def date_range(schedule, frequency, closed='right', force_close=True, **kwargs):
"""
Given a schedule will return a DatetimeIndex will all of the valid datetime at the frequency given.
The schedule values are assumed to be in UTC.
:param schedule: schedule DataFrame
:param frequency: frequency in standard string
:param closed: same meaning as pandas date_range. 'right' will exclude the first value and should be used when the
results should only include the close for each bar.
:param force_close: if True then the close of the day will be included even if it does not fall on an even
frequency. If False then the market close for the day may not be included in the results
:param kwargs: arguments that will be passed to the pandas date_time
:return: DatetimeIndex
"""
if pd.Timedelta(frequency) > pd.Timedelta('1D'):
raise ValueError('Frequency must be 1D or higher frequency.')
kwargs['closed'] = closed
ranges = list()
for row in schedule.itertuples():
dates = pd.date_range(row.market_open, row.market_close, freq=frequency, tz='UTC', **kwargs)
if force_close:
if row.market_close not in dates:
dates = dates.insert(len(dates), row.market_close)
ranges.append(dates)
index = pd.DatetimeIndex([], tz='UTC')
return index.union_many(ranges)
calendar_utils.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录