近年来,程序化交易在国内发展迅速,采用程序化作为交易手段的投资者越来越多,国内对程序化交易的研究也越来越深入。开发一个优秀的程序化交易系统,走上稳健获利的投资道路,成为众多交易者追求的目标。
从开发一个优秀的程序化交易系统,到使用该系统获得一定的利润是一个复杂的过程,在此过程中会遇到很多问题。比如,经常有投资者在实际使用交易策略前,因为策略的历史测试收益曲线图平滑向上,对策略的盈利能力非常自信。而实盘之后,资金曲线却拐头向下,不尽人意。出现这种现象的一个重要原因是过度拟合。所谓过度拟合,指的是对于样本数据,描述的准确度很高,而对于样本外数据,描述的准确度却很差。具体到程序化交易中,就是历史行情效果很好,而在未来行情中却失效。本文尝试解释造成过度拟合的原因,并提出避免过度拟合的几种方法。
过度拟合产生的原因
程序化交易系统的设计过程包括两个部分,这两个部分都有可能造成过度拟合。交易系统设计的第一部分是形成一个完整的交易规则体系。形成交易规则一般有自上而下和自下而上两种方法:自上而下的方法是基于对市场行情的长期观察总结出来规律,再在规律的基础之上形成数量化的交易策略,这一过程需要长时间交易经验的积累;自下而上的方法是从市场数据出发,进行统计分析得出市场特征而形成的交易策略。程序化交易的出现以及电脑技术的发展,使得自下而上的方法得到广泛采用,交易者可以将开发出来的交易系统用历史数据进行快速测试统计,以观察系统在历史行情中的表现,形成新交易系统的速度得到极大提升。在测试交易系统的过程中,往往会根据测试结果对交易规则进行重新训练形成新的交易规则,或者对这些规则进行组合,这样产生的交易系统很容易是对市场数据的拟合。第二部分是将这些交易规则通过数量化的方法实现。在数量化实现交易系统的过程中,一般会采用参数来描述系统。设计者会通过增加参数个数和优化这些参数,寻找出最佳的交易系统。如果参数个数较多或过度优化参数,往往就会产生对历史行情的完美过度拟合,而未来的绩效却大打折扣。
如何避免过度拟合
设计交易系统的目标是在未来实盘的行情中可以产生利润,而不是为了追求一条漂亮的历史测试曲线,过度拟合的交易系统是一个“美丽的陷阱”。如何逃离这个陷阱呢?我们认为可以从交易规则的形成和交易系统开发两大方面着手。
现代数学对金融市场的数据分析表明,时间价格序列包括两个部分:第一部分是确定项,可以从中找出一定的规律;第二部分是随机项,没有确定性的规律可言,出现某一现象只是概率性的。当我们从市场历史行情中提取交易规则时,需要分析规则的逻辑性和规律性,交易规则需要能够反映市场的规律性,具有一定的合理性。同时交易规则的数量不宜过多,过多的交易规则如同对一个事物的描述加上太多的定语,而非事物本质的反映,如果事物的表象发生变化,描述就失效了,只有对事物本质的描述才是事物本身的定义。交易规则同样必须抓住市场的本质。总而言之,我们需要的是简单而有效的交易系统,系统越简洁,生命力就越强,适应的市场范围越广。
当交易者通过各种途径形成交易规则后,在具体的交易系统设计过程中,需要注意如下问题:
第一,增加历史测试数据样本容量,避免交易次数过少。如果历史测试数据量较少,虽然设计的系统在样本内效果良好,但是较短时间段的测试不具有说服力,系统未来的表现很难预期。而较少的交易次数往往是由于增加过多的交易规则限制,对亏损的交易进行了强过滤,是一种典型的过度拟合行为。
第二,在测试时,将测试的数据样本分为样本内和样本外,设计系统的时候采用样本内数据,然后用样本外数据测试得出的系统,如果效果大大降低,那么这种系统极有可能是拟合的。
第三,核心参数不宜过多,参数过多的系统是一个多自由度系统,在优化多个参数之后总会得出一个漂亮的系统,但这种系统的可靠性是令人怀疑的。
第四,在对系统的参数进行优化时,我们需要对最优参数附近的参数进行考察。如果附近参数系统的性能远差于最优参数的性能,那这个最优参数有可能是一个过度拟和的结果,数学上称为奇点解,是不稳定的。如果市场的特征稍微发生变化,最优参数可能会成为最差参数。
第五,将交易系统用于其他品种,观察其效用。万能的交易系统是少见的,但是在一个品种上表现优秀的系统,在别的品种上至少可以获利。如果在别的品种上不能盈利,在使用该系统的过程中就应该注意其有效性,即是否过度拟合某一品种的特殊行情。