文/Kevin J. Davey,从事交易超过30年
问任何一个有经验的交易系统开发者有关回测(Backtest)的优劣问题,你很可能得到一个“然并卵”的答案。一方面,他们会告诉你,回测是必须要做的,因为它能告诉你一个策略想法在历史交易中是否能被印证有效。
但是另一方面,他们又会补充说,很多时候回测并不能告诉你未来的盈利可能性,因为你在回测的时候拟合了收益率曲线甚至过度拟合。因此,交易系统回测是个天使与魔鬼的组合。 (“交易员说”注:过度拟合(Overfitting)或曲线拟合:系统可能太过复杂,以至于失去了预测价值。由于它与历史数据的吻合度太高,市场行为的一个轻微变化就会造成效果的明显恶化。)
那些交易新手们往往无法看到交易系统回测的两面性,常过于迷信历史收益表现,并期望在真实交易中也能够实现如此漂亮的收益率曲线。他们期望历史表现会在未来继续,而事实证明,不少策略在随后的真实交易中并不能达到交易者的预期。
传统的交易系统回测最大的问题在哪里?在找到症结前,我们必须定义到底什么是“交易系统回测”,有没有可替代的方式存在。如下图所示是各种回测方式,假设回测终止于2014年12月31日。
红色方块表示跑过回测数据的年份;绿色方块表示样本外测试阶段,或没有进行参数优化的数据做的测试;蓝色方块表示实盘账户,真实交易。
首先,第一个是传统的交易系统回测,目前为止最为流行的测试方法,也是最为危险的方法。绝大多数交易软件鼓励这种测试方法。简单地找到一个图表,插入一个策略,并使用所有可用历史数据来优化所有参数。这个方式对绝大多数交易者来说具有很大的交易风险。
很多被传统交易回测带来的不佳体验的交易者开始寻求变化:增加样本外(Out of Sample)回测评估期。作为全历史数据测试的替代品,交易者会先测试50%-80%数据,其他历史数据暂时搁置一旁。优化过的交易系统在这个样本外期间的表现将被评估。相比传统的回测,这个方法要好很多,尽管很多人反复测试,实际上已经将样本外阶段转变为样本内,因为交易系统的创建者对数据和倾向性的熟悉感已经蔓延至整个开发过程。
样本外回测的下一个阶段是推进分析测试(Walk-forwad testing)。在这个方式下,一个长期的样本外测试期被建立,这个方式受到很多职业交易员的喜爱,尽管这个方法依然会在反复的测试中被“污染”。
最后一个方法就是直接在没有历史回测的情况下开始实际交易测试。这是个最为可信的方式,因为测试基于真实时间、实盘账户。
但这个方法需要极长的时间来评估策略是否有利可图,更不必说这个方法的高成本。那些用这个方法成功的交易者很可能本身就具有良好的交易策略和对市场动能极深的理解,使他们对交易系统在真实环境中是否合格有个很强的预判。在实盘环境里没有模棱两可的结果,甚至不是所有类型的回测都一定适用。
如上所述,相比传统的回测方法,其他三种替代方案都相当复杂和困难,这也是为什么大多数人,特别是那些菜鸟只是用最简单的方式。而因为传统回测的危险性,人们开始认为改善回测是测试的目标,一个更好的回测成为交易者的渴望。让我们来举个例子,你就知道这是个“然并卵”的事情。 过度回测的例子
我们就把这个菜鸟叫为“小明”吧。小明希望针对黄金交易建立一个策略,使用2008-2012年这五年的数据来做回测。然后他取出了现货黄金的这五年日图K线数据,并基于从书上和网站上学到的移动平均线交叉理论,建了一个简单的交易系统,代码如下: input: mavg (2) If Close crosses above average (close,mavg) then buy next bar at market; (若收盘价高于均线,则在下一个烛台做多) If Close crosses below average (close,mavg) then sell short next bar at market. (若收盘价低于均线,则在下一个烛台做空)
显然,小明对交易系统的变量“mavg”,即移动平均线的周期做了不断的优化,在进行了49次的迭代后,他获得了正的利润曲线,如下图的交易系统A。显然这个策略还不够好,小明开始对回测进行改进。