曲线套入
我准备先来讨论曲线套入的主题,然后再讨论最佳化程序。先前,我提到曲线套入就是利用资料匹配系统。经过曲线套入之后,系统对于特定时期的特定资料,绩效看起来很好。举例来说,在走势图上看到某段时期的价格在特定区间内来回游走,你可以针对这种行情,建立一套交易系统,使其操作绩效特别好。你也可以编写一个滤网,让你恰好在市场崩溃前进场放空。操作绩效显然很好,但不是真的。在市场下次大跌之前,该系统还会发出类似的放空信号吗?你可以不断调整,使得交易系统与资料之间完全吻合,但问题是这套系统是专为这些资料而设计的,恐怕不能适用于其他资料。无论是哪段时期的资料,只要你愿意,都可以设计报酬率高达2 000 %的交易系统,但该系统对于未来行情完全无用。就交易者的立场来说,你所担心的是系统未来运用的绩效,而不是历史测试结果。这也正是我前边所说的,一套看起来不错的系统,为什么必须采用崭新资料进行测试的理由。唯有采用不同于系统编写过程与最佳化过程的资料,才是真正的测试。如采用曲线套入过程的资料进行测试,系统绩效当然会很好,但却未必适用于未来。总体来说,系统结构越复杂、交易方法越烦琐、测试绩效越过于理想,曲线套入的程度就越严重。
最佳化程序
最佳化程序是针对特定时期的资料,通过不断修正参数与指标,来提升系统的绩效。如果采用移动平均,使用者将不断调整移动平均的长度,来促进操作绩效。决定移动平均长度后,可能继续进行最佳化,希望找到某种突破滤网,使得绩效能够更进一步提高。总而言之,系统使用者可以一直调整参数与指标,使系统绩效有所提升。如果采用Trade Station ,这套软件可以帮你进行最佳化。只要几秒,Trade station 就可以告诉你任何指标在某特定时期内的最佳参数值。表面上看起来,这似乎是很不错的功能,但却很容易让你误解系统的真正绩效。
最佳化的目的,在于提升交易系统的获利能力,但一定要注意,不要做得太过火了。系统概念只需大致正确,而参数值究竟如何设定,并不太重要。最佳化过程,是希望找到一段看起来最好的参数值。举例来说,对于一套穿越近期最高价的突破系统,你希望找到最适用的回顾期间。你发现回顾期间越长,信号的获利能力越强,但回顾期间超过20 期后,就没有明显改善了。你因此而知道系统的回顾期间应该设定为20 左右,至少不应该是5 期。想要找到某个单一的最佳数据,是毫无意义的。因为资料不同,最佳数据也就不同。
就我而言,在最佳化过程中,我希望找到绩效最佳而且普遍适用的一些参数值,然后取其中平均数作为实际运用的数据。举例来说,如果12 期、14 期与17 期移动平均的效果最好,我很可能采用14 期或15 期。如果12 期、14 期与17 期的效果很好,但15期或16 期的效果不好,则意味着系统显然有间题,否则不应该发生这种现象。对于一套真正好的移动平均系统,不论选择5 期、7 期、10 期或15期结果都不应该相差太多。对于某组资料,如果14 期的绩效最好,这并不会特别吸引我的注意,因为我要找的是大体上有效的操作概念或方法,而不是某个绩效最佳的参数值。如果某个交易系统只能采用1 – 2 个参数值,这套系统应该不可靠,很可能经过曲线套入。
使用者可以通过最佳化程序来判断,交易系统是否适用各种不同的参数值,或只适用于特定参数值。市场具有随机性质,某个适用于过去的参数值,是否也会适用于未来呢?如果突破系统的某个缓冲滤网,曾经有效避开随机走势引发的突破,这个案例是否反映该滤网的真实功能呢?看着某份走势图,一些人可能会挑选一个当时最适用的滤网。可是如果采用其他的参数值,这个滤网是否仍然继续有效?这个滤网是否也适用于其他资料?采用不同时期的资料进行测试,甚至采用其他时间结构的资料,来反映不同的观察角度。如果你对于整体结果很满意,就可以采用外部资料进行测试。对于一套有效的系统,外部资料的测试结果应该大致相同。
外部样本
历史测试程序最重要的部分便是采用外部样本测试系统的功能。实际采用某套交易系统之前,绝对需要运用崭新的资料测试该系统:所谓“崭新”,是指系统建立与最佳化过程所使用之外的资料。在系统建立、测试与最佳化过程中,初学者最常见的错误之一便是同样采用所有可供运用的资料。如果手上只有3 年的资料,就直接利用这3 年的资料设定参数值,不知道还要留一些外部样本。如果总共只有3 年的资料,那么就只采用两年的资料,保留最后一年的资料不动,甚至不要用到相关的走势图。要假设最后一年的资料还没有发生,因为你不希望系统建构或最佳化过程受到外部样本的影响。唯有当你对于交易系统已经觉得很满意了,才利用最后一年的资料进行测试。请注意,外部样本至少必须能够产生30 个或以上的信号,否则测试结果不具统计意义。如果系统确实有效,外部样本的测试表现应该差不多;如果测试结果不够理想,就应该改变系统的基本构想,绝不是只修改参数值而已。外部样本是供你判断交易系统的效力,不是用来进行最佳化的,否则根本不需保留外部样本。我喜欢观察外部样本的走势图,进一步确认交易系统确实具有应有的功能。但如果你仍想调整交易系统,绝对不要受到外部样本的影响。
外部样本可以模拟真实世界,崭新的资料可以避免系统过度最佳化。经过最佳化之后,由于系统参数还没有碰到新资料,通过外部样本的测试,我们希望知道系统之所以有效,不是因为经过曲线套入,而是因为系统本身的功能。
资料运用
首先必须确定资料够用。针对6 个月的资料进行测试,没有太大意义,因为6 个月内可能发生任何古怪的事情,足以扭曲整个测试结果。另外,交易笔数至少30 个,否则测试结果不具统计意义。交易笔数越多,测试结果越可靠。如果交易笔数不够,只要一两笔极端交易就可以影响测试结果,使得一套平庸的系统看起来非常突出。你也希望知道交易系统在不同市场状况下的表现,所以要准备充分的相关资料。
把相关资料分为三等份是最理想的。系统建立过程中,使用第一部分的资料。系统初步建立完成之后,利用第二部分资料进行最佳化与相关调整。只有当交易系统已经完成,才利用第三部分资料进行测试。另一种可能性,是采用中间2 / 3 的资料进行系统的建立与最佳化,然后把最初1 / 6 与最后1 / 6 资料视为外部资本,供最后测试之用。不论采用哪种方法,系统建立过程使用的资料期间,最好等于外部样本期间,才能确定系统绩效在期间具有稳定性。
请注意,不同资料不要来自相同类型的市场状况。外部样本最好包括不同市场状况、不同股票、不同时间结构的资料。如果IBM 资料建立交易系统,不妨利用思科、美林、英特尔、沃尔玛百货、道琼斯指数、SP500 指数进行测试。如果测试结果很好,该系统应该普遍适用每只股票,不仅只针对IBM 而已。总之,资料必须包含各种不同的市场与市场状况。如果利用某10 只股票的资料进行测试,它们就不应该呈现相同的价格形态:某些股票应该呈现涨势,某些呈现跌势,另一些则是横向走势。这样才能有效模拟该系统将来碰到的真实环境。