用Zipline回测国内数据

我们都知道zipline目前只能很好的支持国外市场,针对国内市场如何修改来进行回测,我看了一些文章来简单的说下自己的看法。

为什么不能支持国内市场

  • 数据:zipline自带的bundle都只支持国外数据,quandl只包含美国市场,而yahoo经过配置也只勉强下载到国内的数据
  • 交易日历:TrandingCalendar在zipline中和很多组件都相关联,如果日历不匹配那么回测的结果肯定是不正确的。zipline默认使用的是美国纽交所的交易日历,同时也提供了CME(芝加哥商品交易所),ICE(洲际交易所),us_futures(美国期货)等,但是同样都不适合国内的数据
  • 基准数据和国债利率曲线:zipline默认使用的美国标普500作为基准,显然无法使用国内市场

Databudle

对于如何更好的回测国内数据,我只针对第一部分databudle数据部分说一下自己的看法。
引入国内的数据源进行回测,有一下两种方案:
1. 不ingest数据源,直接在构建TradingAlgorithm时引入从csv或者数据库里读取的pd.Dataframe作为DataPortal的datasource
2. 自己定制data bundle,然后ingest

写一个新的bundle数据包,主要是ingest函数

ingest(environ,asset_db_writer,minute_bar_writer,daily_bar_writer,adjustment_writer,calendar,start_session,end_session,cache,show_progress,output_dir)
参数作用
environ代表环境变量的映射,如果需要一些额外的参数引入,可以在这里通过环境变量指定,如quandl的API key
asset_db_writerAssetDBWriter的实例,通过它的write函数可以把一个证券的基础信息,主要是码表名称起止日期等写入到数据库中,并且为每个证券分配一个sid作为唯一标识,这个sid在系统的其他地方也会成为股票的主要索引方式。默认保存在sqlite数据库中
daily_bar_writer写入每日行情信息的BcolzDailyBarWriter的实例,通过调用write方法写入股票的开高低收和成交量等信息,这里的信息也需要使用sid与基本信息进行关联。默认使用bcolz的格式保存
minute_bar_writer写入每分钟行情数据
adjustment_writer处理一些拆分,合并,送股,分红等事件的信息。默认使用sqlite数据库
calendar你当前使用的交易日历,数据的获取是以交易日历作为索引的
start_session/end_session获取数据的起止日期
cachedataframe_cache的实例,你可以使用它来缓存在获取过程中的原始信息,在多次ingest的时候起到加速作用
show_progress一个布尔值,是否显示ingest的过程,如果你的获取数据时间较长,可以判断show_progress变量来显示进度
output_dirdata bundle的输出目录

其中最主要的是三个参数:
1. asset_db_writer 获取基础信息
2. daily_bar_writer/minute_bar_writer 写入行情信息:将数据转换为dataframe格式,index按日递增,cloumns为open、high、low、close、volume,writer可以将dataframe转换为zipline内部的bcolz格式进行保存。
3. adjuestment_writer 写入split,didividend信息

总结一下:用户可以讲任何本地的数据首先转换为DataFrame,其中index按日递增,columns分别为open、high、low、close、volume。然后讲DataFrame作为value,数据ticker为key来构建对应的Panel作为回测本地化的标准数据输入。

最后特别感谢这篇文章对zipline的详细讲解https://www.gitbook.com/book/rainx/-zipline

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值