系统测试中一些可避免的陷阱
使用今天精密的软件,很容易便可以完成对系统的测试。但是,这些软件同时也会使我们得出不切实际的结果。理论上,我们的交易规则在实际交易中会像在测试中一样地工作。因为存在一些因素影响实际交易结果,所以测试和交易之间很难实现“完美”的匹配。在许多情况下,只要接近假设的性能就足以令人欣慰了。让我们分析一下在系统测试中需要躲避的常见。
任何测试的起点都是测试周期的长度。测试周期应该足够长,一般为3年或更长时间,以便包含多个交易区间和趋势周期。另一种选择方法是在测试周期应产生50笔或更多的交易。在对单一市场进行测试和优化时,习惯上将整个数据分为三部分。首先使用中间部分来开发系统规则,然后用开头和结尾的数据对系统重新检查。用来开发规则的中间部分数据叫做“样本内”数据。我们需要使用“样本外”数据来避免测试期间的过度优化。
在样本内测试周期和样木外测试周期上得出的测试结果取决于交易者选择的特定时间周期。这两个测试周明上的获利性不必完全一致,因为市场会出现不同的运动。但是,对交易系统的另一些内部度量应该基本不变。下面这些数量对盈利不敏感,应该在样本内和样本外周期上基本相同:获利和亏损交易的平均持续时间、最大连续盈利交易数、最大连续亏损交易数、最大单笔亏损以及平均每笔亏损。由于市场在特定的时间里会出现不一样的行情,所以取决于盈利的统计量可能相似,也可能完全不同。我们预计随着样本周期的增加,样本内结果和样本外结果的相似性会越来越大。
下面我们来看一个使用简单移动平均交叉系统在欧洲美元市场上的优化练习。第一个测试周期是从1993年9月1日到1996年12月31日。两个移动平均的优化长度分别为13日和50日。样本外周期从1997年1月2日到1999年12月31日。注意与回报无关的性能度量,比如平均获利和亏损交易的持续时间,以及连续盈利交易和亏损交易(见表3.14)是相似的。这表明该系统模型在长期趋势中交易时与样本周期内相似。对业绩敏感的量则不同,因为净利润在样本外周期内显著降低。在样本外周期上的“最佳”移动平均组合是18日和30日移动平均,表明在样本外数据周期内,欧洲美元市场具有较长的整固期和较短的趋势。
我们如何判断系统潜在的不稳定性呢?典型的不稳定系统在测试数据上被过度拟合,或者在一些细微的地方不够明确。我们要寻找的两条线索是高比例的盈利交易(比如说在总交易数小于30时,盈利交易所占比例大于60% )或者大数目的连续亏损交易。我们使用一套简单波动性突破系统,使用最新的价格运动区间。注意连续亏损交易的数目:样本内数据周期上为12,样本外数据周期上为16。大数目的连续亏损交易表明,对于该市场 这是一套比较蹩脚的系统。该市场以平滑的趋势运动,从简单移动平均系统的潜在获利性便可看出。波动系统中交易的持续时间为4个交易日,而对趋势跟随系统来说是88 ~91个交易日,表明短期波动性突破系统可能不适合交易欧洲美元市场。
另一种需要检查的异常情况是,在给定测试周期上单笔交易获利占净利润的40%或更多,或者日内资金回撤超过最大单笔亏损。超大的盈利交易在3~ 10年,或更长的时间里可能只出现一次,如果考虑交易那种市场的利润,系统的性能便会被高估。现在考虑一下前述波动性系统在瑞士政府债券上的交易,交易周期从1999年1月4日到2000年7月27日。最大单笔盈利为100928美元,大于报告中的净利润67284美元(见表3.19)。最大日内资金回撤为-214833美元,大大超过最大单笔亏损的-63538美元。这表明该交易策略允许不利于头寸的大幅价格回调,而不退出出场。所以,波动性突破反转策略可能不适合通常表现为长期、半滑趋势的债券市场。
当我们测试一套希望在多个市场上使用的系统时,系统最少应该在10个不相关的市场上具有获利性。期货市场大致可以分为如下几个板块:农产品、外汇、能源、利率、金属、软件和股票。所以,我们的系统应该在每个板块中两个以上的市场上具备获利性。
股票指数在交易时一般是比较特殊的,在股票指数上的优化系统与其他版块上具有获利性的系统常常具有不同的特性。在本书的后面将给出对该系统测试结果的分析,分析表明它们的规则是完善的,因为它们在超过10个或更多市场上,在不同的时间框架上都具有获利性。需要注意的是,存在板块专用系统,它们需要使用特定板块的相关信息,比如宏观经济数据、交易者报告的承诺、农产品产量数据或者石油输出国组织( OPEC)的生产限额。显然我们不能希望这样的系统在其他板块上奏效,但它们应该在同一板块的大多数市场上具有获利性。
你的计算机内置计算功能可能具有20位以上的小数位,于是,当你对系统进行优化时,计算机产生的参数值可以捕捉数据中的微小变化。例如,进入一笔交易或避免一笔交易可能对特定数据组上的获利性产生很大的影响。优化过程将利用规则来选择或避开有问题的交易。但是,这种选择性具有很小的长期作用,因为影响交易的随机市场因素可能永远不会被复制。比如我们正在使用百分比交易带,计算机建议的宽度可能为50日移动平均线两侧1.73205087%。但是,我们在系统中最好使用“四舍五入”后的数值,比如2%或1.75%。使用四舍五入后的数字会避免过度拟合,因为在一个时间周期上计算出来的优化宽度很可能在未来的其他周期上不会继续为最佳数值。四舍五入背后的假设是一轮主要趋势一般会上升超过1.75%的交易带,如同超过1.73205087 %交易带和2%交易带。四舍五入将设计问题的解决方案通用化了,所以降低了系统性能对测试数据的依赖性。自然,使用2%交易带代替1%交易带会降低交易频率,因为1%交易带将比2%交易带更经常地被穿越。该结论在所有的市场上都是正确的,而且是一项不必经过大量测试和优化的基本原理。所以,在进入市场之前,系统结构要求一个特定的运动穿越交易带,而且这比带有10位小数的精确的价格带值更有意义。
交易者如何度量系统的完善性呢?我们定义一个名为SMY的单位,当一个系统在一个市场 上在一年的时间里具有获利性时,便称为“一个SMY"。完善系统的最小度量标准应为30 SMY,其中系统在至少10个市场上在3年的时间里具有获利性。另一种度量标准,是在所有市场中最人单笔亏损额总是小于预先指定的限制。但是,交易者还可以使用设计特性的质最评价。脆弱的系统具有设计缺陷,总是会导致重复失利。
我们来分析一套在最近20日最低点或最高点出场的系统。假设这是一套趋势跟随系统,在任意市场上的一次重要反转都会逐渐取代原来的20日最低点或最高点。这样一套 系统是完善的,因为肯定会在与原趋势相反的强势运动中出场。反之,如果一个出场策略要求某个交易日出现大的价格运动退出趋势,比如从先前的高点或低点出现三倍于10日平均真实价差的回调,是相当脆弱的。因为市场可能会花费数天的时间才完成对头寸不利的较大运动,但在任意一天中都没有暴涨或暴跌的行为。
现在我们来分析一种入场策略,使用定额或距离当日最高价或最低价为波动性距离的限价单入场。市场可能会连续数日为上涨趋势或下跌趋势,而市场运动时却仿佛羞于见到该系统产生的订单。例如,交易者希望在上涨趋势较弱时买进,并且希望使用限价单,价位设在市场回调到收盘价的5日移动平均线处。可能有10日或更长时间的连续趋势运动,而不出现向5日简单移动平均的回调,于是交易者便错过了整个行情。对该策略进行一下修改,入场时同时设置止损订单,止损价位设在上个交易日的最高价或略高的位置,这样便可以实现更加一致的入场,进入强劲的震荡行情。所以当我们设计交易系统时,需要找出很容易被市场挫败的交易规则。