我正在使用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点开放。
要使这成为一条规则,我现在需要6个不同的日期,其中周日和周五需要特殊的时间,其余的工作日将被视为所有时间。我非常确定我需要按天和按小时混合rrule,但我没有任何好的例子来这样做。
任何帮助都非常欢迎!
发布于 2013-03-18 20:11:00
我已经想出了一种更简单的方法,我花了一些时间单独使用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)https://stackoverflow.com/questions/15467488
复制相似问题