理想解决方案
上一篇介绍了海龟策略在实现中遇到的困难。
本章主要讲其解决方案,那就是vn.py啦!
vn.py1.9.1新增完整的投资组合级别的海龟策略实现,经过多次测试发现,这一次海龟策略本地化实现的完成度很高。其投资组合回测资金曲线如下。
投资品种选择了12个,分别是:
- 上期所的铝、铜、螺纹钢、锌
- 郑商所的普麦、一号棉花
- 大商所的玉米、铁矿石、焦煤、焦炭、豆粕、聚氯乙烯。
回测时间是2014--2018,百分比最大回撤是-29.46%,年化收益45.11%,夏普比率达1.5。从资金曲线的形态上看,虽然时不时发生回撤,但是整体趋势是向上的。故从回测上看,已经非常符合原版海龟策略的特点了。
(因为考虑到海龟策略是日K线中低频策略,故手续费和滑点在回测中都设置成零,以方便操作。但就算加上手续费和滑点,资金曲线的形态不会发生变化,夏普比率也仅仅是稍微减少,这在以后章节详细说明。)
操作步骤
下面介绍如何通过vn.py实现完整的海龟策略。
1. 工具准备
- RQData:RQData 是RiceQuant(米筐科技)提供的商用版金融数据工具包, 支持 python, matlab, excel 插件等多种访问方式。它集成了简单高效的API接口,用户可快速调用丰富整齐的量化金融数据,最大限度地免除了数据搜索、清洗的烦恼,加速投研及投资的决策周期。RQData 期货数据终端提供7天免费试用。其地址如下:RQData 期货数据终端
- vn.py:vn.py是基于Python语言的量化交易系统,其独特的事件驱动引擎和逐条数据回放的回测设计杜绝未来函数的可能性。同时回测引擎和实盘引擎设计采用了完全兼容的API函数,用户可以使用同一套策略代码来实现回测研究和执行实盘交易。(v1.9.1版本以后提供海龟策略模块,老版本建议升级,升级方法:先卸载vn.py,命令是 pip uninstall vnpy,然后安装新版本)其地址如下:vn.py 1.9.1
2数据准备
1)安装RQData
Window系统RQData安装,输入下面命令即可。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://rquser:ricequant99@py.r
icequant.com/simple/ rqdatac==1.0.0a29
2)下载数据
在"examples\DataService\RqdataDataService"文件夹内的config.json上填写RQData的账号和密码,保存退出后启动downloadData.py下载全期货品种的日线级别数据。启动操作是按住"Shift"并且鼠标点击右键,选择“在此处打开命令窗口”,然后输入下面命令即可。
python downloadData.py
本次投资组合回测时间区间是2014年1月1日以后的数据,故在该回测上会剔除一下比较新的品种,在下面的代码中以注释出来。
其代码如下
"""
立即下载数据到数据库中,用于手动执行更新操作。
"""
from dataService import *
if __name__ == '__main__':
#中金所
downloadDailyBarBySymbol('IF99')
downloadDailyBarBySymbol('IC99') #中证500 从2015开始
downloadDailyBarBySymbol('IH99') #上证50 从2015开始
#上期所
downloadDailyBarBySymbol('CU99')
downloadDailyBarBySymbol('AL99')
downloadDailyBarBySymbol('ZN99')
downloadDailyBarBySymbol('PB99')
downloadDailyBarBySymbol('NI99') #镍 从2015开始
downloadDailyBarBySymbol('AU99')
downloadDailyBarBySymbol('SN99') #锡 从2015开始
downloadDailyBarBySymbol('AG99')
downloadDailyBarBySymbol('RB99')
downloadDailyBarBySymbol('WR99')
downloadDailyBarBySymbol('HC99') #热轧卷板 从2014 3月开始
downloadDailyBarBySymbol('SC99') #燃油 从2018开始
downloadDailyBarBySymbol('BU99')
downloadDailyBarBySymbol('RU99')
#大商所
downloadDailyBarBySymbol('C99')
downloadDailyBarBySymbol('CS99') #玉米淀粉 从2014年12月
downloadDailyBarBySymbol('A99')
downloadDailyBarBySymbol('B99')
downloadDailyBarBySymbol('M99')
downloadDailyBarBySymbol('Y99')
downloadDailyBarBySymbol('P99')
downloadDailyBarBySymbol('FB99')
downloadDailyBarBySymbol('BB99')
downloadDailyBarBySymbol('JD99')
downloadDailyBarBySymbol('L99')
downloadDailyBarBySymbol('V99')
downloadDailyBarBySymbol('PP99') #聚丙烯 从2014年2月
downloadDailyBarBySymbol('J99')
downloadDailyBarBySymbol('JM99')
downloadDailyBarBySymbol('I99')
#郑商所
downloadDailyBarBySymbol('TA99')
downloadDailyBarBySymbol('MA99') #甲醇 从2014年6月
downloadDailyBarBySymbol('FG99')
downloadDailyBarBySymbol('SF99')
downloadDailyBarBySymbol('SM99')
downloadDailyBarBySymbol('ZC99') #动力煤 从2015年
downloadDailyBarBySymbol('WH99')
downloadDailyBarBySymbol('PM99')
downloadDailyBarBySymbol('CF99')
downloadDailyBarBySymbol('SR99')
downloadDailyBarBySymbol('OI99')
downloadDailyBarBySymbol('RI99')
downloadDailyBarBySymbol('RS99')
downloadDailyBarBySymbol('RM99')
downloadDailyBarBySymbol('JR99')
downloadDailyBarBySymbol('LR99') #晚籼稻 从2014年7月
downloadDailyBarBySymbol('CY99') #棉花 从2017年
downloadDailyBarBySymbol('AP99') #苹果 从2017年
数据成功下载界面如图所示
3)数据说明
RqData分3种数据,分别是以88或888结尾的代表主力连续合约数据和以99结尾的指数连续合约,下面以IF合约为例子进行详细说明。
- IF88:主力连续合约,由IF股指期货不同时期主力合约接续而成,仅仅是合约量价数据的简单拼接,未做平滑处理
- IF888:主力连续合约,对价格拼接进行了"平滑"处理,即以主力合约切换前一天(T-1日)新、旧两个主力合约收盘价做差,之后将 T-1 日及以前的主力连续合约的所有价格水平整体加上或减去该价差,以"整体抬升"或"整体下降"主力合约的价格水平,成交量、持仓量均不作调整,成交额统一设置为0
- IF99:指数连续合约,由IF股指期货全部可交易合约以累计持仓量为权重加权平均得到的
(主力合约定义:合约首次上市时,以当日收盘同品种持仓量最大者作为从第二个交易日开始的主力合约。当同品种其他合约持仓量在收盘后超过当前主力合约1.1倍时,从第二个交易日开始进行主力合约的切换。日内不会进行主力合约的切换。)