开发者社区 问答 正文

python如何在zipline中提取非一分钟数据?

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

摄取(环境,asset_db_writer,minute_bar_writer,daily_bar_writer,adjustment_writer,日历,start_session,end_session,缓存,show_progress,output_dir)

minutes_bar_writer minutes_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 =(用于type =)使用的日历=与所需的共享日历=不匹配

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

展开
收起
被纵养的懒猫 2019-09-29 18:08:39 786 分享 版权
阿里云 AI 助理回答

看起来你正在尝试将非标准时间频率(5分钟klines)的数据导入到Zipline中,而Zipline默认配置主要针对日频和分钟级数据。根据你的描述,问题在于Zipline的内部结构和预期的数据格式与你提供的5分钟数据不匹配,特别是BcolzMinuteBarWriter和交易日历(trading_calendar)的设定。

要解决这个问题,你可以考虑以下几种方法:

  1. 自定义数据读取器和写入器:最直接但也是最复杂的方法是修改或扩展Zipline的数据读取器和写入器以支持5分钟数据。这可能涉及创建一个新的类,比如Bcolz5MinuteBarWriter和相应的Bcolz5MinuteBarReader,并确保它们能够正确地处理和索引这种频率的数据。同时,你需要在日历方面做出调整,以确保交易时间按照5分钟间隔来定义。

  2. 预处理数据:另一种策略是在将其输入到Zipline之前,将5分钟的数据转换成更接近Zipline期望格式的形式。例如,你可以将5分钟的数据汇总或重新采样为1分钟数据,尽管这可能会引入一些数据精度上的损失。使用Pandas库中的resample功能可以实现这一点。

  3. 修改交易日历:错误信息提示所有读者必须共享目标trading_calendar。这意味着你需要一个与你的数据频率相匹配的交易日历。你可以尝试创建一个自定义的交易日历类,该类基于Poloniex的实际交易时间,并且能够理解5分钟的时间间隔。这需要对Zipline的日历系统有深入的理解。

  4. 外部数据管道:如果上述方法都显得过于复杂,你也可以考虑在Zipline外部构建一个数据处理管道,将原始的5分钟数据转换成符合Zipline要求的格式,然后再导入到Zipline中进行回测或实盘交易。

请注意,由于这些解决方案可能涉及到对Zipline源代码的修改,强烈建议在开始前创建一个分支或者工作副本,以便于实验和调试,同时保持原项目的完整性。此外,考虑到社区支持和后续维护,探索是否有现成的社区贡献或第三方插件已经实现了类似的功能也是一个好主意。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: