一天中按天和小时设置的时间

2024-09-22 14:31:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python的rrule计算交易时间。这几天很简单,我在这个网站上找到了一个稍加修改的例子:

def get_rset(start_date):    
    # Create a rule to recur every weekday starting today
    r = rrule.rrule(rrule.DAILY,
                    byweekday=[rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR],
                    dtstart=start_date)
    # Create a rruleset
    rs = rrule.rruleset()
    # Attach our rrule to it
    rs.rrule(r)
    # Add holidays as exclusion days
    for exdate in holidays:
        rs.exdate(exdate)
    return rs

问题是,虽然这对股票很有用,但我需要用不同的方法计算外汇日期。我需要按小时工作,加上公共假期等

在UTC,我相信市场开放时间是周日晚上10点到下周五晚上10点。在

为了使这成为一个rrule,我现在需要6个不同的日子,周日和周五需要特殊的时间,其余的工作日要考虑所有的时间。我很确定我需要将rule-by-day和by-hour混合起来,但是我没有任何好的例子来说明这一点。在

欢迎任何帮助!在


Tags: todateby网站create时间holidays交易
1条回答
网友
1楼 · 发布于 2024-09-22 14:31:16

我想出了一个更简单的方法,在Google、代码和类文档上独处了一段时间。它使用了一个轻微的(但适当的)欺骗。请参阅下面的示例解决方案。在

from dateutil import rrule
from datetime import  timedelta , datetime
holidays = [] # This is just a list of dates to exclude

def datetime_in_x_trading_hours(start_dt,future_hours):
    # First we add two hours. This is because its simpler to view the timeset
    # as 24hrs MON - FRI. (This also helps align the dates for the holidays)
    print start_dt
    start_dt += timedelta(hours=2)
    rs = get_fx_rset(start_dt)
    # Now using the set get the desired time and put the the missing hours
    future_time = rs[future_hours]
    future_time -= timedelta(hours=2)
    return future_time

def get_fx_rset(start_date_time):

    # Create a rule to recur every weekday starting today
    r = rrule.rrule(rrule.HOURLY,
                    byweekday=[rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR],
                    byhour=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],
                    byminute=[0],
                    bysecond=[0],
                    dtstart=start_date_time)

    # Create a rruleset
    rs = rrule.rruleset()
    # Attach our rrule to it
    rs.rrule(r)
    # Add holidays as exclusion days
    for exdate in holidays:
        rs.exdate(exdate)

    return rs

today = datetime.now() - timedelta(days=2)
print datetime_in_x_trading_hours(today, 7)

相关问题 更多 >