不想错过精彩课程?一键“订阅”,轻松学习!
大家好,欢迎来到金十交易学院《智能量化交易》课程。
摘要:回测是量化交易与传统交易最不同的地方,根据历史上已经发生过的真实行情数据,快速模拟策略信号触发和撮合交易,得出一段时间内的绩效报告等数据。对国内、国外的股票、商品期货、外汇等市场都是策略开发最重要的组成部分之一。
一、回测的意义
前面的章节我们学习了主流编程语言的基础部分,以及教大家如何利用这些编程基础,写一些简单的交易策略,可以说万里长征已经走了一大半了。但是,一个策略编写完,肯定不是直接就可以实盘的,它还需要不断的回测——调试——回测——调试——等等,直到策略能够完整的实现模型内容,并且能够顺畅运行。
从量化交易逻辑的角度讲,策略其实就是建立在对市场上的一系列认知和假设,回测可以高效率确定这些假设是否成立和稳定。在历史不稳定时期,可能会带来什么样的损失,以及为预防这些损失辅助作出决策。
另外,从量化交易运行的角度讲,回测可以帮助检测策略逻辑中的bug,如未来函数、偷价、多度拟合等等。为策略可以用于实盘交易提供可靠的证据。
验证交易信号的准确度。
验证交易逻辑和你的想法是否可行。
发现交易系统中的缺陷,并改进原始策略。
因此,回测的的意义是通过历史数据,尽可能真实的还原实际的交易过程,对策略有效性的进行验证,避免为错误的策略付出昂贵的代价,并帮助我们筛选、改进、优化交易策略。
二、回测的陷阱
回测陷阱之信号闪烁
交易策略在回测时是基于静态的历史数据。而真实的交易的数据是动态的。举个例子:如果最高价大于昨天的收盘价就买入开仓。这个开仓条件在实盘中,如果K线还未走完,那么最高价就是动态的,交易信号就有可能来回闪烁。而在回测时,回测引擎是基于静态的历史数据是可以模拟撮合成交的。
回测陷阱之未来函数
未来函数是用到了未来的价格,也就是说当前的条件在未来可能会被修改,同样未来函数也能造成信号闪烁的原因。所以任何函数都具有未来函数特性,比如“之字转向函数”。
如下图:之字转向函数指示了波峰和波谷的转折点,它能根据最新的实时价格相应得调整自身取值,但是如果当前价格变化的时候,之字转向函数计算的结果也会随着改变。如果用了带有未来函数的函数,可能当前下单信号成立了并且下单,但过会儿可能这个信号又不成立了。
回测陷阱之偷价
所谓偷价行为是指利用过去的价格去交易。举个例子:如果最高价大于某个固定价位即以开盘价买入。这个条件就是在偷价格,因为在实盘中,最高价大于某个价位时,价格已经高于开盘价一定距离了,这时用开盘价是买不到的。但在回测中,是有买入信号的,并且能成交。
还有一种情况,如果价格跳空高开与策略设定的固定价格,回测时可以以固定价格成交,但是在实盘中这个固定价格显然是买不到的。
回测陷阱之不可能成交的价格
不能成交的价格分为几种情况:
第一种:在实盘中,涨停时一般情况下是买不到的,反过来跌停也是如此。但是在回测中却是可以成交的。
第二种:交易所撮合机制是:价格优先、时间优先。有些品种盘口会经常有巨量订单,实盘时如果挂单买卖,需要等待盘口厚度,才能成交甚至不能成交。但是在回测时,挂单买卖是可以成交的。
第三种:如果套利类策略,那么回测利润是很高的,因为回测时每次都已经假设了抢到了这些价差。真实的情况下,很多价差都抢不到,或者只抢到了一条腿,一般来说肯定是不利于你的方向的那条先成交,那么就需要马上去补另一条腿,这时候滑点已经不是1、2个点了,而套利策略本身就赚这几个点的价差,这种情况是回测中无法模拟的。真实利润完全不如回测。
第四种:黑天鹅事件。如下图红圈处,在外汇瑞郎黑天鹅事件中,尽管表面上看有开盘价、最高价、最低价、收盘价,其实当天的极端行情中,中间的价格是真空,大量的止损单,造成踩踏事件,流动性为零,成交难度非常大,但是在回测中却能止损。
回测陷阱之过度拟合
每次看到下面这张图,我的内心是:哈哈哈哈......通过下面这张图可以看到,一个荒谬的模型,只要足够复杂,是可以完美适应数据的。
针对量化交易来说,回测是基于历史数据,但历史数据的样本是有限的,如果交易策略的参数过多,或者交易逻辑过于复杂,导致交易策略过多的适应历史数据。
量化策略的建模过程本质上就是一个从大量的貌似随机的数据中找寻局部非随机数据的过程,如果不借助统计学的知识,很容易落入过度拟合的陷阱。
所以,不要自欺欺人。如果发现样本外数据表现不好,又觉得丢掉模型太可惜或者不愿意承认自己这个模型不行,而对着样本外数据继续做模型优化,直到样本外数据上也表现得一样好,那最后受伤的一定是你的真金白银。
回测陷阱之幸存者偏差
华尔街流行着这样一个笑话:假设市场上有1000只参与投资的猴子,第一年,淘汰500只输给大盘的猴子。第二年再淘汰一半,剩下250只猴子。等到第三年末,剩下125只猴子......
到了第九年,还剩下最后一个猴子。然后你看啊看,左看看右看看就觉得眼熟。最后看到财经杂志封面一下子想起来, “ 噢,这不就是巴菲特吗!”
当然这只是一个笑话,但是你有没有想过,如果有1000个基金经理,那么在10年后,大约有10个基金经理会连续10年跑赢大盘战胜市场。但这可能是随机和运气决定的,和基金经理们的技能没有关系。
就像下图左边那张回测绩效,相信绝大多数投资者都会眼前一亮。该投资策略有非常稳健的表现,而且几乎没有大幅度回撤。
且慢,如右图所示,真实的情况就在里面。原来左边的回测曲线只是众多回测中表现最好的一只而已。也就是说在左边那个回测中,背后还有众多表现更差的情况。
回测陷阱之冲击成本
在真实的交易环境中,价格是一直在波动的,当你看好一个交易机会,下单的那一刻,可能价格就已经变化了。所以滑点问题,无论是在主观交易中,还是在量化交易中,都是不可避免的。
但是回测是基于在静态数据,很难模拟出真实的交易环境。举个例子:下单价格是1050买入,但实际成交价可能是1051。造成这种现象的原理有很多,比如:极端行情时流动性真空、网络延迟、软硬件系统、服务器响应等。
不加滑点的回测
如上图,是一个不加滑点的回测,资金曲线比较好看,但在实盘交易中的实际成交价与策略回测的理想成交价存在差异。所以为了减小这种误差,在进行策略回测时,可以设置2个滑点,来提高买入价或降低卖出价。
加上滑点的回测
如上图,同样的策略,如果加上2跳滑点后,回测的结果与不加滑点的回测结果,相差很大,那么也就代表这个策略需要改进或者淘汰换新。特别是交易频率比较高的策略,回测时加上1~2跳的滑点,可以使回测更接近于真实的交易环境。
下节预告:如何做量化交易回测
课后习题:
1、什么是过度拟合,以及如何避免?
2、现实生活中有哪些是幸存者偏差?
最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!
金十交易学院,8点准时更新