为了朝着量化交易的方向努力行进,数学和编码是必须提高的垫脚石,财务分析则属于业余爱好加分项。数学方面借着报名“七月在线 — 机器学习数学班”重温数学基础以图从机器学习的角度入手,而编码则再次翻开数据结构和算法导论用以弥补计算机基础不足的同时,一方面尝试配合小伙伴重写C++版本vn.py用于实盘交易框架储备,另一方面则研究Zipline用于指标及策略回测框架学习研究。Zipline是一个自动化交易回测框架,同时国外Quantopian,国内优矿、米筐和聚宽等web平台都基于它提供服务,它的成熟性自不必说。但它由Quantopian开发维护并不断迭代,默认只支持欧美市场,如果要将其应用于国内市场,即使国内已有成熟的web服务,但相关资料却甚为匮乏,看看StackOverflow上的问答就能窥见一二。因此,对个人用户而言,对它的研究仍有很多的坑要踩,今天我就想分享一下最近填好的坑。
开发环境:64位Win7 + PyCharm
1、首先下载并安装64位Anaconda,CMD运行”conda install -c Quantopian zipline”,将Zipline作为第三方库安装至Anaconda,再将PyCharm的解释器设置为Anaconda下的python.exe,至此准备工作一切就绪。
2、Zipline的本地化回测应用主要涉及2大块内容:TradingEnvironment和TradingAlgorithm。TradingEnvironment主要用于本地化交易环境设置,而TradingAlgorithm则是Zipline回测框架的主对象,可以理解为回测入口。本文将介绍TradingEnvironment的详细设置,同时初探TradingAlgorithm实现,它的具体实现则放在以后的博文中介绍。
3、TradingEnvironment本地化最重要的就是设置tradingcalendar、benchmarke_return和treasury_return。tradingcalendar用于设置tradingdays,其默认已排除周六周日,因此用户只需要重写一个py文件将每年对应的holiday从tradingdays除去即可。而benchmarke_return和treasury_return则作为策略回报的比较基准,将国内沪深300和对应各期限国债收益率通过重载load函数导入,将load函数对象传入至TradingEnvironment即可,注意benchmarke_return为Pandas的Series对象,treasury_return为DataFrame对象,各期限必须包含1month ~ 10year间所有。
4、TradingAlgorithm的本地化则需要重点设置simulation_parameters、initialize函数对象,handle_data函数对象。simulation_parameters包括策略回测的起始日期和回测频率,回测起始日期必须通过Pandas的tz_localize本地化,而回测频率包含daily和minute两种方式。而initialize函数与handle_data函数则用于策略初始化和模拟Bar周期反复回调所用,具体作用可参考国内优矿、米筐和聚宽任意一款服务。
5、数据的准备:理论上Zipline只支持其内置的DataPortal类型,它是其回测模拟所有数据的接口。考虑到通用性,Zipline目前也支持pandas的DataFrame和Panel,只不过它对DataFrame的支持就是将其很粗暴的转换为Panel来实现的。因此,就目前来说,Zipline只支持内置DataPortal和Pandas的Panel两种类型。所以,用户可以将任何本地可获取的数据首先转换为DataFrame,其index按日递增,columns为小写的open、high、low、close和volume等。然后以DataFrame为value,数据ticker为key来构建相对应的Panel作为回测本地化的标准数据输入。
至此,用户就已经可以利用Zipline跑通一个完整的本地化回测Demo,这也解决了StackOverflow上关于Zipline提出70%以上问题,希望对大家有用。
|