《量化交易之门》连载19:参数最佳化

在之前介绍均线系统的时候,我说了均线系统的日线的置信区间在5-36这个范围,也就是说,如果要以单均线来作为开平仓模块的话,应该这个参数选择在5-36之间。

 

这个区间是怎么得到的呢,主要是靠两个方面,一是经验,二是回测。经验需要大量的交易去试错,而回测则可以通过电脑技术来缩短这个时间周期,但回测需要花点功夫来学习编程,你要得到有价值的信息,必然通过这两个途径,其本质都是通过历史数据来寻找有价值的线索,并且都需要付出努力和事件,努力的过程将贯穿着整个交易生涯,无论是主观交易还是量化交易均无捷径。

 

在选择具体的参数上,我不会去选择一个单品种的最优化参数来作为这个品种的参数,因为历史数据并不能代表未来,如果通过数据挖掘的方法,必然会有一个参数会实现最佳业绩,哪怕是一个本身并不赚钱的策略,也可以通过这种挖掘方式找到一个参数来实现盈利,那么这个盈利能否保持下去,就是一个非常值得怀疑的问题。

 

在单一参数的选择上,我会选择一个多品种组合最适合的参数,假设我选择20日均线,在40个品种的5年历史回测中,有35个品种能够获利,并且过去5年中,每年也能够实现比较平均的获利,那么20这个参数,就是一个非常值得信任的参数。

 

除了盈利的多少外,还有一个比较值得关注的值,就是最大回撤,基本上这两个信息需要综合来考虑,并不能简单的认为盈利最大的策略就是最优的策略,如果策略A最终收益是100万,最大回撤是50万;而另外一个策略B的最终收益是80万,最大回撤仅10万。无疑后者将是一个比前者更加优秀的策略,我会毫不犹豫的选择策略B,然后把杠杆增加5倍,就可以承受和策略A一样的50万的风险(回撤)的基础上,实现400万的最终收益。所以一个策略一定要结合风险来看收益,很多盈利因子、夏普比率、MAR等风险参考指标无非也是基于收益和风险的关系来设计和计算的,所以与其去简单的对比夏普比率,不如更多的了解其内在的机制,直接从风险和收益的整体角度来考虑问题。

 

每个人确定参数的方法是不同的,我的方法则很简单。我将所有参数都测试一遍,得到所有参数下多品种组合的收益/风险数据,我将收益/风险得到一个值,假设用5这个参数的均线交易系统5年的收益是2000%,最大回撤是10%,那么这个值就是2000%/10%=200,这个值没有任何价值也不代表任何东西,仅仅是代表在某个参数下风险和收益之间的关系,它仅仅用于各参数之间的横向比较参数。

 

那么我会把这个值输入到Excel表格中,生成一个数据集,然后来寻找在不同的参数下,可信度比较高的几个值。

均线系统

这些回测数据本身就是通过多品种得到的,未来是充满未知性的,所以这也是能够通过历史数据得到最有可能接近未来最优参数的唯一方法了。由这张图片可以看到,在5这个参数和17这个参数附近是一个持续的高点,并且它们附近的参数都普遍比较高,5和17这两个参数并非一个孤例,所以我认为5和17这两个参数的置信度是最高的,我很有可能将这两个参数分别用于实盘交易。而29这个参数,是一个突然变高的数值,这个值周围均无可支撑的数据,这就是一个孤例,29这个参数,它的置信度就没有5和17那么高。

 

关于双参数,其选择的本质和单参数是一样的,就是通过多参数的组合来选择一个可信的参数组合。常规的做法就是把所有的参数结果都输入进去,然后生成一张三维柱状图,来筛选其中的高点。

 

均线系统

这个方法的优点是比较直观,但缺点也是显而易见的,那就是比较繁琐,还需要一些数学软件的支持,并且还有一个致命的缺陷就是当有第三组甚至第四组参数的时候,基本上就不能采取这种方法了。

 

我介绍一种更简单高效的办法,那就是不做组合参数的优化,只做单参数的优化。

 

比如我做一个三均线的参数优化,有a,b,c三个参数,这个系统是a上穿b做多,反之做空,参数c作为过滤参数,b在c之上,只开多,反之只开空。这个系统该如何优化参数呢?

 

三个参数构建的系统,其稳定性本来就不如单参数或双参数,如果再通过寻找3个最佳参数来拟合交易系统的话,就非常容易的就产生过量优化。那么如何解决这个问题呢?首先我会考虑,这个系统的核心参数是b,因为a实际上是为了过滤收盘价穿过B频繁发出信号而设计的,当a穿过b之后会开多或开空,b才是决定趋势的关键因素,所以最关键的一点就是要优化好参数b。

 

这个道理和逻辑显而易见,因为我这套系统就是以参数b的均线来定义是否出现趋势行情的,所以我率先只优化参数b,这里的唯一逻辑是,如果这个交易系统能够获利,那么最关键的是看短期价格和b均线之间的位置能否对后续行情产生概率上的预测。如果收盘价和b之间的关系不能盈利,那么优化a参数和c参数就没有任何逻辑支撑,策略整体上就可能就会出现问题,所以我最开始仅寻找收盘价和b之间的关系。假设b的参数优化好之后得到的最佳值是17,那么我就会将参数b看作是一个常量17,这个值就不再变了。

 

然后基于这个17,我再去优化参数a,因为参数a和参数c都要以参数b为参照,a和b的位置决定了买卖方向,b和c的位置决定了主要的方向过滤,但本质上a和c没有什么关系,所以,在处理a和b的关系的时候,可以先不管c。基于这个关系,确定了b的值之后,再去优化参数a,假设得到a的值为5,那么到目前为止,就是5日均线上穿17日均线做多的一个系统。

 

继续后面的工作,把这两个参数(a为5,b为17)确定之后,再去寻找过滤系统c的参数,值得一提的是,如果参数c有两个值可供选择,一个是20,一个是200,那么就要从逻辑上来判断这两个值的意义了,因为参数c的存在是为了过滤长期趋势,所以很明显20的值并不符合过滤长期趋势的初衷,即便是20的值有非常优秀的表现,那也是一个不值得信任的值,所以我最终会选择200这个参数来构建这个系统。

 

确定好所有的参数之后,这个系统的买卖模块我们就算基本完成了。

 

通过这种参数优化的方式,我们将一个原本需要三次项的复杂计算,转变为了一个简单的乘法运算,在大大的节省了效率的同时,还增加了稳定性,这个方面是做量化交易最难以把握的方面,也是计算机不能实现的地方,需要人脑智慧去判断和执行,这也是为什么很多人做量化交易,但也仅有少数人能实现盈利的关键,这点其实和主观交易是高度一致的,考察的是一个人能否寻找一件事情的本质的能力。

 

说一句题外话,通过测试,所有加入c参数的过滤的均线系统,均不如单均线和双均线的表现优秀。所以,与其去增加一些额外的参数来过滤,不如就直接用最简单的系统。得到这个结论,需要从大量的参数最优化的工作中得到,你既可以简单的相信我,也可以自己做测试寻找答案,交易是一个由简到繁再化繁为简的轮回。

还有一种参数最佳化的算法,叫做自适应算法,这种算法是把上一个周期的参数用于下一个周期,这种算法看似更加智能,也更加复杂,但是这种代码真的更加有效吗?

 

从逻辑上看,这种方法是有效的,因为某一个品种走势的背后是同一批人,这一批人往往有着同样的操作风格,那么交易品种的风格就具备某种特性。另外,因为市场的推进的,时间会改变参与者的结构,绝大部分自以为是的人会被淘汰,剩余的人都在使用一种方式后,方式的有效性会逐渐趋于无效,之前的老手也会被淘汰出局,坚持到底的人会取得最终的胜利,市场始终在循环,周而复始。

 

这种理念仅从逻辑层面来讲是可行的,但是我们需要靠回测来反馈结果,有两种测试的方法备选:

 

方法一:测试2010.1-2013.1黄金的数据,最优参数为(15,7)。而黄金的走势在2013年之后分化为两段行情,首先是2013.1-2013.8,这段时间内有显著的趋势行情,而2013.8-2015.11期间,呈现无规律的震荡行情,为了表述这两段行情的具体表现,按照遗传推进的规则,模拟以上一个时间段的最优参数运用到下一个阶段的表现性。

 

方法二:因为在之前无法得知每年的最优参数和市场概况,对下个时间阶段到底是趋势行情还是震荡行情的判断是毫无根据和意义的,所以在推进中以年为时间周期,上年最佳参数数据,是没有加入任何感情判断完全是根据软件优化的结果照抄上去的,所以避免了过度拟合的嫌疑。

 

均线系统

经过权衡,我认为方法二更加接近现实,因为方法一有使用未来函数的嫌疑,所以我运用逐年推进的测试方法,试分析到底应不应该采用自适应参数。

 

另外,如果出现某个别数据凸起产生的不正常收益表现,这组数据是剔除了的。例如,当参数15作为一个比较好的参数,同时13,14,16,17可以互相印证参数15,那么15被选为某个置信参数,假设参数24超过15的表现,但是其周围,22,23,25,26均出现明显低收益,那么24这个参数就叫做凸起参数,这个参数是一个孤例,不具备显著的优势,更大可能是因为过度拟合的产物,为了更加结合现实,我会剔除这个参数。

 

我们将数据分为两段,2012年12月以前的3组数据作为测试数据,2013年1月之后作为推进测试,将2013年1月作为分水岭没有什么特别的意义,仅是随机取中而已。

 

可以看出,运用上年的最优参数作为下年的参数,从2013年1月至今收益为负,亏损额度为87370元,;而采取(15,7)的参数从一而终的进行交易,有231760元利润,说明过度拟合和追逐数据而战胜市场的方法是徒劳的,更进一步说明了一致性的重要性。虽然进一步测试2013年1月到2015年11月的最佳参数组合是(9,5),但是用(9,5)这组数据和之前追逐数据的的做法并无本质的区别,不知不觉差点走了陷阱。

 

从情感上讲,得出一个明显的结果,却不能用于操作,在现实中很难让人接受,但是如果用原始参数(20,10),将发生亏损,那么从概率上考虑,应该得出一个结论:那就是E(9,5)>E(20,10),我希望你能适应我的这种表达方式,大于号的意思是优于,前面的E是期望值,期望值你可以理解为风险和收益的综合表现而不仅仅是收益。

那么至少现在应该了解到,如果用这个策略来操作黄金,应该避免(20,10)这组参数,而相信(15,7)和(9,5)两组参数其中之一,答案靠回测是不能告诉你的,因为测试的结果肯定是(9,5)更好,因为(9,5)本身就是最优化出来的参数。

 

 

如何取舍?

我是这么考虑的:首先,回测告诉我的是(9,5)参数,但这组参数通过推进的方法在明年的表现会输给一个其他参数,这种参数的回归属性是普遍存在的。然后从测试结果得知,黄金这个品种遵循了一个特点:小参数比大参数更加可靠,这点是很显然的。

 

以上信息通过简单的分析就不难得到,但是如果不去重视,而完全依赖回测数据,这无疑是种本末倒置的错误做法。回测永远只是你的一个工具,工具的背后是一个交易者对交易的理解,如果仅能靠计算机技术就可以战胜市场的话,那么每个程序员都将成为交易高手。如果你在这个问题上犯错误的话,说明你仅仅算是一个成功的程序员,而非成功的交易者。

 

通过测试的结果已经很清楚的展现了,我只需要知道,海龟交易法则用于黄金这个品种,基本参数运用要比原版的参数小,仅得出这个结论足以说明这次测试具备意义。知道得到了这个结论后,用任意一组比原版参数更小的参数都应该是相等的预期,为了平衡,我索性用(20,10)、(15,7)、(9,5)的中间参数(15,7)。反过来看测试的表格,我也惊奇的发现,15,7这组参数是整个按年测试中出现最多的数字,从另个角度证明了该参数的有效性,我将追踪这一测试结果,在2016年底来验证是否正确,如果不正确,也不要紧,因为这仅仅是探讨一种理念,并且我很乐于犯错。

 

补充:以上写于2015年12月初,目前是2016年12月31日,就目前看来,最适合黄金的参数是(15,7)。

 

具体如下:

测试时间为2016年1月1日到2016年12月24日。

参数(9,5),净利润:68140,优势1.20,最大回撤23.78%

参数(15,7),净利润:159330,优势1.60,最大回撤24.41%

参数(20,10),净利润:79250,优势1.29,最大回撤22.41%

 

相关推荐:

[ 文章 ] 《量化交易之门》连载20:参数最佳化的三大陷阱——前视偏差、过度优化、曲线拟合

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
c.xuxiang 209982340 yahan.zhong 3人赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线