金十交易学院

5.4 为什么需要样本外测试

不想错过精彩课程?一键“订阅”,轻松学习!




大家好,欢迎来到金十交易学院《智能量化交易》课程。


摘要:在上节中,课程分别围绕几个重要的绩效指标,教大家如何读懂策略回测绩效报告。其实写一个能赚钱的回测策略还不是最难的,比这更难的是,如何评价这个策略在投入实盘中是否继续有效。那么今天我将为大家讲解样本外测试,以及它的重要性。


一、回测不等于实盘


很多量化初学者凭借一个看似不错的回测绩效报告或资金曲线,就轻易的确信自己的交易策略,准备在市场中大展身手。诚然,这个回测结果能够完美地契合他们所观察到的某一市场状态,但是一旦这个交易策略被投入到较长时间的实战中,他们就会发现这套策略其实并不有效。


我见过许许多多交易策略,回测的时候成功率可以达到50%以上。在这么高胜率的前提下,还可以有1:1以上的盈亏比。可是,这些策略一旦付诸实盘,基本上都是亏损的。导致亏损的原因有很多,其中就有,在回测的时候,数据样本太少,导致数据迁就偏差。


然而,交易就是这样一件纠结的事情,事后回看无比清晰,但如果我们回到当初,依然不知所措。这就牵扯到量化的根源问题——历史数据的局限。那么,如果仅仅用有限的历史数据,来检验交易策略,则很难避免“看着后视镜开车”的问题。


二、什么是样本外测试


如何在数据有限的情况下,尽可能的充分利用有限的数据对交易策略科学回测?答案是样本外测试法。回测的时候,将历史数据根据时间先后分为两段,前一段数据用于策略优化,称为训练集,后一段数据用于样本外测试,称为测试集。


如果你的策略始终是有效的,那么在训练集数据中优化几组最好的参数,并把这几组参数应用到测试集数据中去回测,理想情况下,得到的回测结果应该与训练集相差不大,或者相差在一个合理的范围内。那么就可以说明这个策略是相对有效的。


但如果一个策略在训练集表现很好,但是在测试集表现很差,或者变化很大,并且选用其他参数也是如此,那么策略就有可能存在数据迁就偏差。


举一个例子,假设要回测商品期货螺纹钢,现在螺纹钢有10年左右的数据(2009年~2019年),那么可以把2009年~2015年的数据作为训练集,把2015年~2019年的数据作为测试集。比如一个双均线策略,在训练集中最好的几个参数组是(15周期均线和90周期均线)、(5周期均线和50周期均线)、(10周期均线和100周期均线)...... 那么,我们把这几组参数分别放到测试集中回测,并对比训练集与测试集的回测绩效报告和资金曲线,判断它们的相差是否在一个合理的范围内。


如果不使用样本外测试,直接用2009年~2019年的数据来回测策略,得到的结果就有可能因为拟合历史数据,得到一个很好的回测绩效报告和资金曲线,但是这样的回测结果对于实盘意义不大,并没有指导作用,特别是那些参数比较多的策略。


三、样本外测试的进阶


除了把历史数据分成两份,进行样本内和样本外回测外,其实还有一个更好的选择,那就是递推式回测和交叉式回测方法。特别是在历史数据很少的情况下,比如近年刚上市的原油期货、苹果期货,采用这两种方法可以利用有限的数据对模型进行全面的检验。


递推式检验的基本原理


用前一段较长的历史数据去训练模型,并用随后相对较短的数据去检验模型,然后不断地向后移动取数据的窗口,重复训练与检验的步骤。


训练数据:2000年至2001年,测试数据:2002年;


训练数据:2001年至2002年,测试数据:2003年;


训练数据:2002年至2003年,测试数据:2004年;


训练数据:2003年至2004年,测试数据:2005年;


训练数据:2004年至2005年,测试数据:2006年;


...以此类推...


最后对(2002年、2003年、2004年、2005年、2006年...)的测试结果进行统计,来综合评估策略表现。


如下图,可以直观的解释递推式检验的原理:



上图分别展示了递推式检验的两种方法。


第一种:每次检验时,测试数据比较短,测试次数较多。


第二种:每次检验时,测试数据比较长,测试次数较少。


在实际应用中,可以通过改变测试数据的长度,进行多次测试,用来判断模型在应对非平稳数据的稳定性。交叉式检验的基本原理:把全部数据等分为N个部分,每次用其中的N-1个部分做训练,用剩下的部分做检验。


把2000年至2003年按照每年划分,分为4个部分。那交叉校验的操作过程如下:


1、训练数据:2001-2003,测试数据:2000;


2、训练数据:2000-2002,测试数据:2003;


3、训练数据:2000、2001、2003,测试数据:2002;


4、训练数据:2000、2002、2003,测试数据:2001;



如上图所示:交叉式检验最大的优点就是充分的利用有限的数据,每个训练数据同样也是测试数据。但交叉检验应用到策略模型的检验时也存在明显的缺点:


1、当价格数据非平稳时,模型的测试结果往往不可靠。例如,用2008年的数据做训练,用2005年的数据做测试。很有可能2008年的市场环境与2005年相比发生了很大的变化,所以模型测试的结果不可信。


2、与第一条类似,在交叉检验中,如果用最新的数据训练模型,而用较老的数据测试模型,这本身就不怎么符合逻辑。


另外,在对量化策略模型进行检验时,无论是递推式检验还是交叉式检验都遇到到数据重叠的问题。


在开发交易策略模型时,大部分的技术指标是基于一定长度的历史数据。例如,利用趋势性指标,计算过去50天的历史数据,而下一个交易日,该指标又是该交易日前50天的数据计算得出,那么计算这两个指标的数据有49天是相同的,这会导致每相邻两天该指标的变化很不明显。



数据重叠会导致以下影响:


1、模型预测的结果变化缓慢导致持仓变化缓慢,这就是我们常说的指标的滞后性。


2、对模型结果检验的一些统计值不可用,由于重复数据导致的序列相关,使得一些统计检验的结果不可靠。


优秀的交易策略应该能够在未来具有获利性。样本外测试,除了能客观检测交易策略外,更能有效率节省量化交易者的时间。大部分情况下,直接采用全部样本的最优参数,投入实战是非常危险的。


如果对进行参数优化的时间点前的所有历史数据进行区分,划分为样本内数据与样本外数据,先利用样本内数据进行参数优化,再利用样本外数据进行样本外测试,则可以将这种错误排查出来,与此同时还能检验优化后的策略是否适用于未来的市场。



下节预告:交易策略优化及最佳化


课后习题:

1、现实生活中有哪些现象是幸存者偏差?

2、利用发明者量化工具,根据样本内外回测,并比较它们的不同。


最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!


金十交易学院,8点准时更新


0人喜欢
2019-04-15 08:00:00