【问题标题】:how to ingest non-one-minute data in zipline如何在 zipline 中摄取非一分钟数据
【发布时间】:2019-09-29 09:59:32
【问题描述】:

当我尝试将数据摄取到 zipline 包中时,因为我无法获得一分钟的数据,而只有 5 分钟的 klines 数据。看起来标准的 zipline 不支持它? 引用自http://www.zipline.io/bundles.html

摄取(环境, 资产数据库作家, minute_bar_writer, 每日酒吧作家, 调整作家, 日历, 开始会话, 结束会话, 缓存, 显示进度, 输出目录)

minute_bar_writer minute_bar_writer 是 BcolzMinuteBarWriter 的一个实例。该编写器用于将数据转换为 zipline 的内部 bcolz 格式,以便稍后由 BcolzMinuteBarReader 读取。如果提供了分钟数据,用户应该使用 (sid, dataframe) 元组的可迭代调用 write()。 show_progress 参数也应该转发给这个方法。如果数据源不提供分钟级数据,则无需调用write方法。将一个空的迭代器传递给 write() 以表示没有分钟数据也是可以接受的。

无论如何,我使用此界面将 5 分钟 klines 摄取到 zipline 中。但是当我调用run_algorithm时,无论我输入什么data_frequency,它都会提示错误。

data = run_algorithm(start=start,
                     end=end,
                     initialize=initialize,
                     capital_base=100000,
                     handle_data=handle_data,
                     bundle="poloniex_csv",
                     data_frequency='60min',
                     trading_calendar=PoloniexExchangeCalendar())

AssertionError:所有读者必须共享目标 trading_calendar。 Reader= for type= 使用的 calendar= 与所需的共享日历不匹配=

如何解决这个问题?例如让 BcolzMinuteBarReader 支持 5 分钟数据。我可以处理 zipline handle_data 函数中的 5 分钟数据。 谢谢!

【问题讨论】:

  • 你有没有想过这个问题的答案?

标签: python zipline


【解决方案1】:

对此的答案是不应该直接使用日历类,这里是PoloniexExchangeCalendar(),而是应该调用get_calendar(calendar_name) 从日历工厂获取日历的实例。从理论上讲,这将保证框架只使用一个日历实例,因此该行

assert trading_calendar == r.trading_calendar

在 dispatch_bar_reader.py 中总是会解析为 true。就我而言,出于某种原因,即使使用get_calendar(calendar_name) 还不够充分,我正在比较同一日历类的两个不同实例,这不可避免地会解析为False。因此我得到了同样的错误。我通过在自定义日历类中添加以下行来让我的日历类实现自己的相等比较来解决这个问题

__hash__ = ExchangeCalendar.__hash__

def __eq__(self, other):
    return all(self.all_sessions == other.all_sessions) if isinstance(other, CoinbaseExchangeCalendar) else False

绕过了比较两个实例的技术细节,这对我起到了作用,但诚然没有真正弄清楚为什么get_calendar(cal_name) 没有返回自定义日历类的单例实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2022-01-11
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多