通过前面4篇文章,我们已经对量化交易有了大概的了解,并且能够将VN.PY成功运行,并能进行模拟交易。然而模拟交易并不是我们使用VN.PY的目的,我们的目的是做实盘的量化交易。对于VN.PY来说,它的优势在于做CTA的中低频策略实盘。
想要做实盘交易,首先得研发策略,策略研发的步骤一般是:1、分析和策略构思;2、回测;3、评估;4、优化;5、实盘运行。
策略构思,每个人的交易经验和认知都不一样,一个比较容易的入门方式是,先找经典的策略进行学习;然后多看研报、多参加行业会议、多听别人的分享、自己多在交易中总结。这里就不做过多的赘述了。
在实际的研发过程中,当我们有了一个思路后,一般都是回测、评估、优化,周而复始,直到有一个比较满意的结果。
这篇文章我们对回测和评估进行一个介绍。
一、将IF指数的1分钟数据导入到MongoDB
在回测前,我们需要有相应的数据,而VN.PY附带了两份数据,一个是IF指数1分钟数据,一个是螺纹钢指数1分钟数据。放在了examples\CtaBacktesting目录下。
这两份数据,是csv格式的,我们需要做的是读取每一行的数据,然后写入到MongoDB中。
读取代码,VN.PY已经帮我们准备好了。在框架的ctaHistoryData.py类中,已经实现好了:
1)loadMcCsv:将Multicharts导出的csv格式的历史数据插入到Mongo数据库中
2)loadTbCsv:将开拓者TB导出的csv格式的历史分钟数据插入到Mongo数据库中
3)loadTbPlusCsv:将TB极速版导出的csv格式的历史分钟数据插入到Mongo数据库中
4)loadTdxCsv:将通达信导出的csv格式的历史分钟数据插入到Mongo数据库中
5)loadOKEXCsv:将OKEX导出的csv格式的历史分钟数据插入到Mongo数据库中
这里我们使用loadMcCsv来导入数据:
二、DualThrust交易策略介绍
有了数据后,我们可以开始写交易策略了。这里给大家介绍大名鼎鼎的Dual Thrust。Dual Thrust系统是 Michael Chalek在80年代开发的一种通道突破交易的策略。我们用来做日内策略:
1)取前一日的真实波动ATR,乘以一个系数K,来作为今日的价格通道;
2)突破上轨做多,突破下轨做空;
3)收盘平仓
对于多头和空头的系数K,策略考虑了非对称的幅度,可以做多用一个系数k1,做空用另一个系数k2。真实波动的周期数也是可以进行调整的。
注意:我们今天的目的不是讲策略优化,而是给大家演示如何把策略跑起来,这里选择的也只是一个Demo策略,不能作为参考。
三、使用回测引擎,对DualThrust进行回测
上面,我们导入了数据,介绍了一个典型策略,下面进入回测的具体操作环节。
打开examples\CtaBacktesting文件夹下的runBacktesting.py文件,这是作者给我们写好的回测示例代码。BacktestingEngine就是我们的回测引擎。
我们以股指期货为例,设置好引用的策略包,回测开始日期、滑点、手续费、合约大小、合约最小变动、本金大小、数据库、使用的策略,然后我们点击运行。
(这里我在策略源码中把做多和做空的系数K都修改成了0.5)策略的源代码在vnpy\trader\app\ctaStrategy 这个文件夹中,有兴趣的同学也可以研究一下。
四、对回测数据进行分析和评估
运行完成后,我们需要对跑出来的的结果进行分析,看看策略好不好。
我们可以看到策略的回测结果:
回测的结果显示这个策略在我们回测的时间段是赚钱的,胜率在40%以上,还不错。但盈亏比比较低,只有1.45。最重要的是,最大回撤比较高,在只交易一手股指的情况下,达到了31万多,一手股指的保证金才多少钱?所以这个DEMO策略是不能直接实盘的。
我们追求的策略是:达到40%左右胜率,盈亏比在2以上,夏普率在1.5以上,最大回撤比一手保证金要少,最大回撤越小越好。这里面,最终看的指标是夏普率,但也并不是越高越高,太高的话,很可能是你的策略过拟合了。
我们应该找到适应性比较强,但数据并不是那么“优秀”的策略,然后进行投资组合优化,采用多策略、多品种、多周期组合,通过这样的方式提升我们的夏普率。
相关阅读
网友评论