为什么回测很丰满,实盘然并卵?
[p=30, 2, left]前言写这篇文章的目的,是因为看到网络上各种几百块钱就能买到一个回测很漂亮的策略,准备实现财富自由。但开始真金白银地去交易时,就不是那么回事儿了。其实用脚指头想一想,有这么好的策略为什么卖家不自己用,反而只卖几百块?
[url=http://www.pythonpai.com/assets/uploads/files/1511620971977-11111.jpg][attach]8974[/attach][/url][/p][p=30, 2, left]对于一个有经验的交易系统开发者来说,回测是必须要做的。因为它能告诉你一个策略的想法在历史交易中是否能被验证有效。但是很多时候回测并不代表未来能盈利。因为回测里面有太多坑了,不用钱买点教训,你是不会明白的。而这些教训都是用真金白银堆出来的。我想读了这篇文章至少能让你少走很多量化的弯路和陷阱。[/p][p=30, 2, left]2为什么要回测
我们首先来看一下什么叫做回测。回测就是基于历史数据,尽可能真实地还原实际交易过程,并检验交易策略绩效的过程。这样做有三个目的:[/p][p=30, 2, left]第一、验证交易信号的准确度;
第一、验证交易逻辑和你的想法是否可行;
第三、发现交易系统中的缺陷,并改进原始策略。[/p][p=30, 2, left]3回测陷阱之信号闪烁
交易策略在回测时是基于静态的历史数据。而真实的交易的数据是动态的。举个例子:如果最高价大于昨天的收盘价就买入开仓。这个开仓条件在实盘中,如果K线还未走完,那么最高价就是动态的,交易信号就有可能来回闪烁。而在回测时,回测引擎是基于静态的历史数据是可以模拟撮合成交的。[/p][p=30, 2, left]4回测陷阱之未来函数
未来函数是用到了未来的价格,也就是说当前的条件在未来可能会被修改,同样未来函数也能造成信号闪烁的原因。所以任何函数都具有未来函数特性,比如说 Z 字函数,如下图:[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621029531-222222222222222.jpg][attach]8976[/attach][/url][/p][p=30, 2, left]5回测陷阱之偷价
所谓偷价行为是指利用过去的价格去交易。举个例子:如果最高价大于某个固定价位即以开盘价买入。这个条件就是在偷价格,因为在实盘中,最高价大于某个价位时,价格已经高于开盘价一定距离了,这时用开盘价是买不到的。但在回测中,是有买入信号的,并且能成交。[/p][p=30, 2, left]还有一种情况,如果价格跳空高开与策略设定的固定价格,回测时可以以固定价格成交,但是在实盘中这个固定价格显然是买不到的。[/p][p=30, 2, left]6回测陷阱之不可能成交的价格
不能成交的价格分为几种情况:[/p][p=30, 2, left]第一种:在实盘中,涨停时一般情况下是买不到的,反过来跌停也是如此。但是在回测中却是可以成交的。[/p][p=30, 2, left]第二种:交易所撮合机制是:价格优先、时间优先。有些品种盘口会经常有巨量订单,实盘时如果挂单买卖,需要等待盘口厚度,才能成交甚至不能成交。但是在回测时,挂单买卖是可以成交的。比如下面这张图的盘口厚度:[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621085703-333333333333333.jpg][attach]8978[/attach][/url][/p][p=30, 2, left]第三种:如果套利类策略,那么回测利润是很高的,因为回测时每次都已经假设了抢到了这些价差。真实的情况下,很多价差都抢不到,或者只抢到了一条腿,一般来说肯定是不利于你的方向的那条先成交,那么就需要马上去补另一条腿,这时候滑点已经不是1、2个点了,而套利策略本身就赚这几个点的价差,这种情况是回测中无法模拟的。真实利润完全不如回测。[/p][p=30, 2, left]第四种:黑天鹅事件。如下图红圈处,在外汇瑞郎黑天鹅事件中,尽管表面上看有开盘价、最高价、最低价、收盘价,其实当天的极端行情中,中间的价格是真空,大量的止损单,造成踩踏事件,流动性为零,成交难度非常大,但是在回测中却能止损。[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621142196-44444444444444444444.jpg][attach]8980[/attach][/url][/p][p=30, 2, left]7回测陷阱之过度拟合
[url=http://www.pythonpai.com/assets/uploads/files/1511621180624-33333333333333333333333444.jpg][attach]8982[/attach][/url]
每次看到上面这张图,我的内心是:哈哈哈哈…通过上面这张图可以看到,一个荒谬的模型,只要足够复杂,是可以完美适应数据的。[/p][p=30, 2, left]针对量化交易来说,回测是基于历史数据,但历史数据的样本是有限的,如果交易策略的参数过多,或者交易逻辑过于复杂,导致交易策略过多的适应历史数据。[/p][p=30, 2, left]量化策略的建模过程本质上就是一个从大量的貌似随机的数据中找寻局部非随机数据的过程,如果不借助统计学的知识,很容易落入过度拟合的陷阱。
[url=http://www.pythonpai.com/assets/uploads/files/1511621241971-5555555555555555.jpg][attach]8984[/attach][/url][/p][p=30, 2, left]如果说天文学星座是一阶过拟合的话,那么星座性格学说是二阶过拟合。
[url=http://www.pythonpai.com/assets/uploads/files/1511621264934-666666666666666666666.jpg][attach]8986[/attach][/url][/p][p=30, 2, left]所以,不要自欺欺人。如果发现样本外数据表现不好,又觉得丢掉模型太可惜或者不愿意承认自己这个模型不行,而对着样本外数据继续做模型优化,直到样本外数据上也表现得一样好,那最后受伤的一定是你的真金白银。[/p][p=30, 2, left]8回测陷阱之幸存者偏差
举个通俗的例子来解释什么是幸存者偏差:
1、某宝卖降落伞的商品都是好评。因为降落伞有问题的人都不存在了。
2、某电台记者在高铁上采访乘客是否买到车票。因为买不到车票的人根本上不了车。
3、媒体宣传买彩票可以中大奖。因为媒体不会宣传没有中奖的人。
4。站在风口,猪都会飞。[/p][p=30, 2, left]通过上面例子可以看到,实际上人们接受到的信息其实是经过筛选后的结果,因此生存者偏差造成的结果就是往往一开始就有大量的数据或样本被忽略了,导致基于生存者偏差的结论偏离实际。[/p][p=30, 2, left]那么在量化回测中,就要小心了。回测的结果也有其运气成分,许多情况下回测出来的结果,可能是在众多次数的回测中表现较好的一次。[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621302887-7777777777777777777.jpg][attach]8988[/attach][/url]
金融市场中明星多、寿星少。如果交易者的策略刚好与市场行情契合,那么每年的行情就能造就一些明星。但是很难见到连续 3 年以上持续稳定盈利的寿星。[/p][p=30, 2, left]作为一个交易者,不管是量化交易也好,还是手工交易也好。都要扪心自问,自己的盈利究竟是来自于好运气,还是能力。往往许多人把自己的好运气当做自己的能力。[/p][p=30, 2, left]9回测陷阱之小样本统计
尽管拥有庞大数据的历史,但面对浩瀚无尽且不可预测的未来,历史数据就显得极度匮乏。即便是以现有的全部历史数据来验证,交易策略也不能被证实,但是可以被证伪,那么在证伪策略的时候,就需要尽量多的历史数据,来证伪策略本身。而不是拿很小样本的测试来说明问题。[/p][p=30, 2, left]10回测陷阱之点差
盯过盘的都知道,买一价和卖一价的价格是至少一个点差的,不活跃的品种点差会更大,如果在发生信号后保证成交,得以对手价去下单,一般和信号模拟价相比要损失一个点差左右的,所以在写交易模型编写时必须要扣除点差,特别是在写交易频率较高的日内模型时特别重要,好多这类策略都是如果没有计算点差,那测试报告的资金曲线几乎是一根笔直的斜向上的直线,一旦加上点差,立马变为亏损。[/p][p=30, 2, left]11回测陷阱之冲击成本
无论多么精细的回测引擎,其回测只是基于在静态数据,很难模拟出真实的交易环境。举个例子:下单价格是1050买入,但实际成交价可能是1051。造成这种现象的原理有很多,比如:极端行情时流动性真空、网络延迟、软硬件系统、服务器响应等。[/p][p=30, 2, left]不加滑点回测
[url=http://www.pythonpai.com/assets/uploads/files/1511621350484-888888888888888888.jpg][attach]8990[/attach][/url][/p][p=30, 2, left]加滑点回测
[url=http://www.pythonpai.com/assets/uploads/files/1511621344575-9999999999999999999999.jpg][attach]8992[/attach][/url][/p][p=30, 2, left]但是在回测中是理想环境,没有价格冲击成本,回测时的成交就是1050。特别是高频或短线策略,想象一下,在回测中成千上万次交易,其回测结果也是不真实的。如下图:[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621408873-121212.jpg][attach]8994[/attach][/url][/p][p=30, 2, left]12回测陷阱之风险收益比
交易策略的几何年化收益率/最大回撤的比值在2以上。对于一些粗糙模型,在单个品种上很难让几何年化收益率/最大回撤这个比值大于2,如果在相关度低的多品种上进行组合投资,使组合投资报告上的几何年化收益率/最大回撤这个比值大于2,也是可以的。[/p][p=30, 2, left]下面的策略长期能赚钱,那才不正常。[/p][p=30, 2, left][url=http://www.pythonpai.com/assets/uploads/files/1511621451713-131313.jpg][attach]8996[/attach][/url]
[url=http://www.pythonpai.com/assets/uploads/files/1511621456175-1414.jpg][attach]8998[/attach][/url][/p][p=30, 2, left]13不要忽视策略容量
一模一样的策略在低效市场和高效市场,回测的结果区别很大,甚至完全相反。比如说低效的国内股市和商品期货、国外的数字货币;高效的外汇市场。每种类型的策略都有其容量上限,也就是说策略用的人多了,就不好用了。赚钱永远只是少数人,否则这个市场就不存在了。[/p][p=30, 2, left]14交易策略开发模式
交易策略的开发有两种模式:[/p][p=30, 2, left]第一种:演绎法,自上而下。先从金融心理学出发,找出市场理论的假设,再用统计学工具加以验证。[/p][p=30, 2, left]第二种:归纳法,自下而上。以统计工具挖掘市场特征,并加以验证。[/p][p=30, 2, left]我个人非常推崇演绎法,自上而下开发交易策略。这样更符合自然基本规律。股票、期货市场都是人类社会活动的一部分,遵从人类社会和自然的基本规律。举例来说,人类社会和自然界中存在的周期性的规律在股票和期货市场中也同样存在。再如,事物的发展过程一般要经历孕育、生长、壮大、衰老四个过程,这一规律在股票、期货市场中也普遍存在。其他如物极必反、量变到质变等自然规律在股票期货市场中也同样存在,类似例子不胜枚举。[/p][p=30, 2, left]反观演绎法,自下而上开发交易策略。市场是一个动态的战场,而且其变化是非线性的,过去的价格并不代表未来。[/p][p=30, 2, left]15交易理念
在从事股票、期货、外汇交易中,正确的交易理念无论怎么强调也不过分。只有拥有正确且强大的交易理念,才能驾驭交易策略,否则一切都是空谈。因为没有正确的交易理念,你就不会相信自己的交易系统,你不相信它就更不会去天衣无缝的执行它。只有正确的交易理念,才有无穷的交易策略。[/p][p=30, 2, left]16结语
最初拥有的只是梦想,以及毫无根据的自信而已;但是,所有的一切都从这里出发![/p]
页:
[1]