21.5 最佳测试结果的发现模式
测试一个策略是否得到最佳结果的方法是:获取最优的参数集合,这不同于生成测试目标最大值的参数集,即无论是最高利润、最大的一致性,还是最高的信息比率都不行。最大值不可能是代表最优策略的选择模式,然而,许多方法都是通过确定最大值来认可最优的交易策略。本节将探讨的是查找最大测试结果的技术方法。
在过去20年中,搜索方法已经随着技术的发展而变化。最先进的方法是基因演算方法和蒙特卡罗抽样法,当测试组合太大而不能发现所有可能性时,我们则使用这两种方法(我们将在本章结尾处进行讨论)。其中,最基本的方法是顺序测试,即以预设顺序来计算每个参数组合的测试结果,例如,某种附带止损机制的移动平均系统可能有以下范围的参数测试:
(1)移动平均计算周期为1~50;
(2)止损点为0~1000美元/股,相当于10美元。
总测试次数为50×100=5000。当测试三个参数时,相应的次数则迅速增加。如前所述,我们这里需要注意:应用最佳参数的分布模式(之前探讨过)则是减少测试时间且提高测试结果效应的简单方法。当有太多的测试时,即使是经过仔细选择的值,它也可以使用更宽的定义域来设置相关效应的一般模式。一旦知道参数值的近似范围,我们就可以更加详细地重新进行测试。
在开始优化之前,我们需要计算将要运行的测试的次数。因为计算机的速度越来越快,时间可能不是问题。但是,其可能会受制于计算机可用的存储空间,所有计算机都会有这种限制。如果生成10000个组合模式,那将需要使用电子表格进行评估,而大量的行和列,再加上众多的行情模式就会生成一个无法控制的大型电子表格。
21.5.1 数理优化模式
如果创建了一个大规模系统并且参数量与每个参数所需进行的测试相结合的时间太长,那么数理优化模式则可提供一个相应的解决方案。这里需要注意的是:这种方法仅适用于连续的测试结果;被测值必须逐渐增加,就像在移动平均计算周期内,测试结果是连续的。也就是说,随着参数值的增加,系统效应会在一定程度上呈现平滑式的增减态势。另外,你不能使用该方法来测试导致情境突变的指令变量。在最简单的范例情境之中,其过程是:
(1)测试一个参数,如移动平均系统的计算周期,同时将其他参数初始化为合理的值;
(2)找到最佳的测试结果,然后修复剩余的测试值;
(3)选择要测试的下一个参数;
(4)继续步骤(2)。
上述这种技术被称为顺序优化模式,它的优点是:可以将参数3所相关的n1 ×n2 ×n3 的总测试值减少至n1 +n2 +n3 。它的劣势是:当测试非常值较大时,它无法发现参数值的最佳组合。图21-3显示了所有测试结果的二维映射情境,这是一个发现参数集之间相关性的好方法。如果图21-3能够显示所有的测试情境,那么最好的选择方式是20日移动平均线、0.30%的止损机制(显示为30个基点),其净值为400。应用顺序测试模式是从设置移动平均线那一天开始的,同时设置了止损点位的最小值,而最好的测试结果为200(排在第一行的顶部),以及为期15天的计算周期。我们将第一个参数值固定为15并测试止损值,其结果将显示在同一列中;当止损值为0.30%时,最好的测试结果是300。虽然前述这个测试结果较好,但它并不是最高的,甚至不是最好的350,当被选择的其他参数值最低时,相对于前述这组测试而言,无论其是从行还是列开始,它都不能发现最好的测试结果。
图21-3 可视型二维优化的测试结果
有两种方法可以避免上述这个问题:一种方法是按照重要性的顺序列出相应参数,它们是对盈利能力产生最大影响的参数或者是对交易策略具有本质重要性的参数(这在“给测试参数排序”一节中讨论过)。在前述这个范例当中,移动平均是主要参数,然而,这种选择不起作用。幸运的是,数学家为这个问题准备了另一种答案。
另一个选择方式是为每个参数(包括主要参数)选择一系列随机启动值且从该点进行水平和垂直性的搜索。例如,我们选择参数2为止损点,那就选择两个随机值1和4。相关测试则首先扫描第一行所有的移动平均值,这是在第一个范例情境中完成的,其最大的数值为300。重复测试,扫描第四行的所有移动平均值,此时,第四列中可以找到300这个值;而对第四列的下一次扫描中,我们可以发现最大值为400。我们这里并不是测试所有组合n1 ×n2 ,而是找到2×(n1 +n2 )种答案,当n1 和n2 较大时,相应的过程要快得多,而这个过程称为随机子集。
任何搜索的目标都是在尽可能少的测试中找到最好的结果。虽然每3个参数的测试只有n1 +n2 +n3 次,但是,总测试次数将迅速地累积。当从一个随机子集开始执行大量搜索并找到相同测试结果时,我们就可以确定地认为已经找到了峰值,例如,如果你于图21-3中开始操作,那么在除第一行以外的任何行或列中的搜索就能发现相应的最大值。相对于测试次数的规模而言,在3个子值显示相同的结果之后,你就可以得出结论:峰值已经找到。对于较大规模的测试而言,其需要更多的子集,但是总搜索的次数将相对较小。
21.5.2 测试连续性问题的解析
任何系统都可以使用计算机进行测试,但是只有在连续的情况下,最佳测试结果相关的自动化选择模式才有意义。一个附带止损的移动平均系统在各个方向都是连续的。如果我们添加第三维度,即进场或延迟离场情境(于0、1或2天之内),那么其将在三维空间内生成连续性的测试结果,但不是所有的测试都符合前述这个原则。我们已经简要地提及,规则的变换模式最有可能产生不连续的情境。现在,我们测试的一个变量是趋势相关的计算周期,而另一个是一组编码为L、S和B的规则,其中,L只需要多方头寸,S只需要空方头寸,B则既需要多方头寸也需要空方头寸,其间虽然可能会生成有趣的模式和相关性,但是,相应测试结果的平均模式则使其变得没有意义。
如果所测试的每个参数有连续性的收益值,那么我们就可以使用数学方法来以最少的步骤找到最大的利润点。一种最速下降的优化方法 [1] 能够应用收益值和其变化率来确定优化过程所采取步骤的规模。如果有多个收益率的峰值,那么,此种方法可能不是最佳的,但其可以使用子集来解决相关问题。
[1] F.R.Ruckdeschel,BASIC Scientific Subroutines,vol.2(Peterborough,NH:Byte/McGraw-Hill,1983).