参数优化中一个重要的原则就是要争取参数高原而不是参数孤岛。所谓参数高原,是指存在着一个较宽的参数范围,模型在这个参数范围内都能取得较好的效果,一般会以高原的中心形成近似正态分布状。而所谓参数孤岛,是指只有在参数值处于某个很小的范围内时,模型才有较好表现,而当参数偏离该值时,模型的表现便会显著变差。
以参数高原示意图和参数孤岛示意图为例,假设某交易模型内有两个参数,分别为参数1和参数2,当对两个参数进行遍历测试后,得到一张三维的绩效图。好的参数分布应当是参数高原示意图,即使当参数的设置有所偏移,模型的获利绩效依然能够得到保证。这样的参数因稳定性强,可以使得模型在未来实战中遇到各类行情时,具有较强的因应能力。但如果遍历参数后的绩效结果如参数孤岛示意图,当参数发生小的偏移时,模型的获利绩效就发生较大变动,那么这样的参数因适应性能差,往往难以应对实际交易中变化多端的市场环境。
一般来说,如果附近参数系统的性能远差于最优参数的性能,那么这个最优参数有可能是一个过度拟和的结果,在数学上可以认为是奇点解,而不是所要寻找的极大值解。从数学角度来说,奇点是不稳定的,在未来的不确定行情中,一旦市场特征发生变化,最优参数可能会变为最差参数。
过度拟合与选取的样本有关系,如果选取的样本不能代表市场总体特征,只是为了使测试结果达到正的期望值而去调整参数,这种做法无疑是自欺欺人,所得到的参数值是过度拟合的无效参数值。例如,通过分析参数过度拟合,交易模型分别在数值35和63出现了收益率突增现象,如果模型中的相应指标选用35和63做参数,则模型的收益看上去很完美,但实际上却是典型的参数孤岛效应。
过度拟合与参数优化的主要矛盾在于,模型参数优化得到的最优参数只是建立在已经发生过的历史数据样本上,而未来的行情是动态变化的,与历史行情相比既有相似性,也有变异性。模型设计者可以找到模型在历史上表现最好的参数,但是这个参数在未来模型实际应用中未必表现最好,更有甚者历史上表现最好的模型参数,在未来模型实战中可能是表现很糟糕的参数,甚至带来大幅亏损。比如,筛选出了一个能抓住历史上一波大行情的一个参数,但设置这样参数值的模型,并不意味着模型在未来实战中也能有如此好的表现,这个历史上较佳的参数值可能在未来模型的应用中没有起到任何帮助。
此外,参数高原与参数孤岛往往还与交易次数存在较大关系。如果模型的交易次数较少,往往能找到一个合适的参数点,使得模型在这几次交易中都盈利,这种参数优化后的模型获利体现出较强的偶然性。如果模型的交易次数较多,模型获利的偶然性就会下降,更多地体现出获利的必然性和规律性,也就会存在一个参数高原。而这种参数优化模型才是进行参数优化的目的所在。
在了解完参数高原与参数孤岛之后,优化参数的方法显得很重要,特别是模型中存在多个参数(下称参数数组)时,往往一个参数的取值会影响到另外一个参数高原的分布。那么如何对参数数组进行优化呢?
一种方法为逐步收敛法。即先单独对一个参数进行优化,取得其最佳值后固定下来,然后再对另外一个参数进行优化,取得其最佳值后固定下来。如此循环,直到优化结果不再变动。例如,一个均线交叉买卖交易模型,两个独立参数分别是均线短周期N1和长周期N2。首先固定N2为1,对N1在1到100的数值范围内进行测试筛选,寻找最佳数值,最终得到最佳参数为8并固定;其次对N2在1到200之间进行优化,得到最佳值26并固定;再次对N1进行第二轮优化,得到新的最佳值10并固定;最后对N2进行优化得到最佳值28并固定。如此循环的筛选下去,直到优化结果不再变动。假如最终得到的最优参数值分别是N1为10,N2为30。至此,参数优化工作结束。
另外一种方法是利用带有较强计算功能的程序化软件设计平台,直接算出目标函数与参数数组之间的分布,进而求多维差分的分布,定义一个差分阈值,差分绝对值小于阈值范围内对应的多维体积最大、多维内切球半径最高者,入选为最稳定参数取值。
除了参数优化方法,数据样本选取也是个重要因素。以趋势跟踪为交易思想的模型在出现趋势行情时表现较好,以高卖低买为交易思想的策略在振荡行情中表现较好。因此,在参数优化时,需要适当剔除吻合交易思想的行情来考虑盈利,增加不吻策略思想的行情数据来考虑亏损。
以股指期货为例,上市之初的2010年以及出现极端大牛市行情的2014年下半年至今,股指期货都是单边行情。毫无疑问,所有的趋势模型都会取得不错的效果。然而如果我们把这种极端行情数据也放进样本中进行参数优化,得到的模型参数未必是最优的。
例如,假设某个模型有两个参数,参数A的测试结果在单边行情时段效果非常好,在其他的时段表现一般;另一个参数B的测试结果在单边行情时段效果不如参数A,在其他时段的表现优于参数A,各个时段之间的分布较参数A均匀。即使参数A在整个样本数据测试的综合指标如风险收益高于B参数,我们也更倾向于选用参数B,因为参数B相对更加稳定,不依赖于特定样本。
总之,在构建程序化交易模型时,一方面,可以通过参数优化改进模型,让模型更好地适应价格波动的模式,提高投资收益;另一方面,又要防止对参数优化的过度拟合,导致模型对行情变化适用性的大幅降低。
转载自 程序化交易者