用Zipline回测国内数据

本文探讨了Zipline在国内市场的应用限制,并提出两种解决方案:直接引入本地数据或定制数据包。详细介绍定制数据包的方法,包括关键参数及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道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

<think>好的,我现在需要帮用户找到适用于期货数据的Python第三方库。用户提到的是期货数据,所以首先我要忆相关的库,并结合提供的引用内容来整理答案。 首先,用户提供的引用中有几个相关的库。引用[3]提到了StarQuant,明确支持期货期权程序化交易和,这应该是一个候选。然后引用[2]中的backtrader和zipline,这两个都是框架,支持期货的可能性需要确认。另外,引用[4]提到CTA策略常用于期货,所以可能相关的库也需要考虑。 接下来,我需要逐一分析这些库是否适合期货。StarQuant直接支持CTP接口,适用于期货,这应该是重点推荐。backtrader虽然通用,但用户需要确认是否支持期货数据格式,比如保证金、杠杆等。zipline可能需要适配,因为其默认可能更多是股票数据,但社区可能有扩展。另外,vn.py在引用中没有提到,但根据我的知识,它也是一个常用的期货交易库,应该补充进来。 然后,用户可能还需要数据源,比如JQData(引用[1])提供期货数据,这需要提到。TA-Lib和pandas_ta用于技术指标计算,也是中的重要部分,所以需要包括在工具链中。 最后,要确保答结构清晰,分点列出库、数据源、工具链,并给出选择建议。同时生成相关问题,比如优化方法、性能分析等,帮助用户进一步了解。</think>在Python量化交易中,以下是适用于期货数据的第三方库及相关工具链推荐: ### 一、期货框架 1. **StarQuant(易数交易系统)** 专门为期货/期权设计的轻量化系统,支持CTP接口实时交易与历史数据。提供完整的期货合约管理、保证金计算和滑点模拟功能,适合需要对接国内期货市场的场景[^3]。 2. **backtrader** 支持多资产类别(含期货)的框架,可自定义交易手续费、杠杆比例和合约规则。其优势在于灵活的事件驱动架构,能模拟期货的逐笔撮合逻辑: ```python import backtrader as bt class FuturesStrategy(bt.Strategy): def next(self): if self.data.close[0] > self.sma[0]: self.buy(size=1) # 买入1手期货合约 ``` 3. **vn.py**(未在引用中提及但常用) 开源量化交易平台,集成CTP等接口,提供期货历史数据模块。支持Tick级数据放和策略绩效分析,适合高频交易场景。 ### 二、期货数据源 1. **JQData(掘金量化)** 提供国内商品期货、金融期货的Tick/K线历史数据,包含主力合约连续数据,可通过Python接口直接调用[^1]。 2. **Tushare Pro** 包含上期所、郑商所、大商所等期货品种的历史行情,需注意数据频率和复权处理。 ### 三、辅助工具链 - **技术指标计算**:`TA-Lib`用于计算期货常用指标如ATR、布林通道[^2] - **性能分析**:`pyfolio`可评估最大撤、夏普比率等期货策略关键指标 - **可视化**:`matplotlib`绘制资金曲线、持仓分布图[^2] ### 四、选择建议 - 需要**对接实盘**优先选StarQuant或vn.py - **研究型**推荐backtrader+JQData组合 - 高频策略需补充`numba`加速计算
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值