谨慎对待数据
对于系统测试所需数据我们有多种选择。所以在选择数据时应该加倍小心,因为它们对测试结果有很大的影响。
在选择数据供应商时应当谨慎,因为不同供应商所提供的数据在准确性、覆盖深度和报告惯例方面都有所不同。例如,两个数据供应商提供的同一份合约的开盘价格可能不同。另一个策略方面的差异是如何检测和更正错误。我们希望寻找能够提供“干净”数据的供应商。
如果测试期货合约,那么就使用连续合约或者带有展期的实际合约。与现金市场指数不同,期货数据是不连续的:合约从不活跃变为活跃,然后过期。所以,要产生连续的“合成”数据流,必须以相同的方式把不同的合约组合在一起。 把期货合约组合在一起时我们有两种选择:一种选择是保持价格和价格水平不变,代价是不能保证价格运动的幅度不变;另一种选择是保留价格运动的幅度,代价是需要调整价格。在测试时一般使用保留了价格运动幅度的连续合约。两种类型的合约所给出的测试结果略有不同。
如果软件允许的话,一种比较好的选择是使用带展期的实际交易数据。从连续合约中得出的测试结果与带展期的数据非常接近,但是会低估交易数目和由滑移价差和佣金带来的损失。它们还会低估在展期交易上放置止损的难度。例如,在实际交易中,展期后我,们可能已经被止损踢出,而在连续合约上对系统进行测试时,系统会继续保持原来的头寸。
除了选择测试数据的类型之外,我们还必须确定测试数据的数量。一般情况下,测试使用的数据越多越好,因为我们可以在一个较为广泛的市场行情上测试系统。当然还有统计学的要求,为了开始使用基于正态分布的测试,通常需要在测试周期上产生30笔或更多的交易。此处的理论是,在给定的样本中得出的交易越多,我们就越能更好地评估系统的平均特性。所以我们可以使用平均特性(比如平均交易利润)来预测系统在未来的性能。
虽然30笔交易看起来可能是一个不小的数目,当使用某个趋势跟随交易模型在周线数据上进行测试时,要得到30笔交易可能存在一定的困难,但要想完全去掉数据选择对测试的影响,30笔交易可能太少了。所以如果可能的话,我们希望测试次数超过100,通过使用多个市场和多时间框架进行组合测试,这样可以得到足够的交易数目。在本书的后面部分,读者将学到如何产生合成数据,如何获得大数目的交易。
这次讨论的重点在于输入数据的不同会带给我们不同的测试结果。此外,我们不能确定交易会永远得到那种结果,因为我们不可能在合成数据上进行交易。现在来看一个测试结果,使用一个5日和50日简单移动平均的双移动平均交叉系统,初始资金管理止损为1500美元,滑移价差和佣金考量为100美元。
表3.12是由Tech Tools公司的软件Continuous ContractorIM产生的数据,显示出瑞士法郎不同类型的连续合约。在相同的周期上,使用实际合约计算系统业绩,在合约到期前一个月的21号自动展期。从这些测试结果我们可以看出,由于数据类型的不同,测试结果可以显示出很大的不同。
对于相同的入场和出场规则,我们来关注一下交易的数目。使用实际数据有11笔交易,比使用连续合约获得的交易数目的平均值高出近37%。多出的交易主要米自合约到期出场进入下一份活跃合约。
另外需要注意的是,回报率在使用实际数据时最低的是1.80。这是因为展期头寸降低了盈利交易中的利润。在长期趋势中连续合约一直存在,没有任何展期。所以在使用连续合约时,交易持续的时间比较长,获利也比较大。于是,连续合约可能会低估交易数目,并高估获利与亏损比和交易持续的时间。