由CMO驱使的VIDYA交易系统
市场波动的变化给长期交易系统带来了特殊的困难:产生更多的错误信号。显然,一个适应市场波动的交易系统,对跟踪长期趋势是非常理想的选择。这种自适应系统相对参数固定系统的另一个显著优点是,不必担心优化系统参数的问题。优化系统参数通常在考评历史数据时非常有效,但在实时交易中却会惨遭败绩。
我们将使用VIDYA,一种弹性移动平均线,来构建自己的交易系统。我们将使用第3章中讨论过的绝对钱德动量摆动指标(absCMO),将VIDYA编篡成市场动量指标。由CMO驱使的VIDYA系统将尝试跟踪市场长期趋势,其胜率大概在40%左右,回报率超过2.50。
我们想把VIDYA与CMO组合在一起,这样,当市场动量很低时(absCMO值接近于0),VIDYA移动平均线的有效步长会增加;并且我们希望当市场获得动量时(absCMO值> 0.30),VIDYA移动平均线的有效步长会减小。理想情况下,当价格大幅波动时,VIDYA移动平均线也会快速移动。然后,随着动量的衰减,VIDYA移动平均线的移动也会减缓。
为了组合CMO与VIDYA,首先,将根据未平滑9日RSI来定义CMO。为此将使用来自Omega研究所的System Write软件进行计算,该软件可将未平滑RSI作为内置函数。用该函数来计算CMO,把CMO除以100,得到+1到-1之间的数值,而不是+100到-100的数值。这里只是随意地使用了9日RSI来计算日收盘价的CMO。对于短、中期分析来说,9日是一个普遍采用的时间参数,但如果你愿意,也可以使用14日的CMO,或任何你想要的其他时间步长。其次,将取CMO的绝对值以消除负号,然后将其乘以一个比例乘数t。该比例乘数小于或等于0.50,以提供CMO与VIDYA之间的平稳转换。用符号A来表示经过比例乘数缩放后的绝对值CMO。因此,计算CMO和VIDYA的公式如下:
|CMO|= |(2RSI3-100)/100|,
A=t|CMO|(t<=0.5),
AIDYAd=A×收盘价+(1-×VIDYAd-1】 (8.1)
当市场趋势强劲时,VIDYA在该趋势方向上有强劲动量,并使得绝对值CMO的值很高。当A增加时,在VIDYA定义中的A×收盘价那一项数值增加,则新数值会在计算VIDYA平均线值时占据更大权重,从而降低了平均线的有效步长。当市场横盘整理时动量降低,此时情况正好与上相反。
要为比例乘数t选择一个值,我们希望避免采用对各种数值进行测试的方法来寻找效果最佳的那个特殊值。我们的设计目标是针对长期VIDYA,因此,t的“小”数值,诸如0.05、0.10、0.15或0.20,才是我们真正需要的。计算VIDYA的公式8.1表明,当t值减小时,A项也会减小,并且在VIDYA数值的更新过程中,新数据所占权重越来越小,从而增大了VIDYA的有效步长。现在我们可以选择0.05到0.20之间的任意一个数作为t的数值。或者,我们可以使用其他计算来缩小选择范围。
我们在24个市场中,再次使用美国CSI公司39#期货永久合约1992年1月1日至1993年4月26日的数据,来测试采用上述选择t值的方法,对所选用的四个数值0.05、0.10、0.15和0.20的测试效果。测试结果见表8.1。表中各列显示了不同t值所对应的净收益(或净亏损)。研究表8.1中不同t值对应的各平均收益,我们发现t=0.10与t= 0.15的结果极为相似。因此,我们决定使用户0.10值作为所有市场和时间段的比例乘数。
当|CMO|= 1,t=0.1转化为19日指数移动平均线值后,这将符合我们使用长期VIDYA的设计准则。现在可以定义以下多头和空头进场法则了:
1. 开仓建立多头头寸法则。如果当天收盘价和昨天收盘价都位于当天的VIDYA上方,则明天买入,并下达买入后的止损指令。止损点设在比当天最高价高1跳的价格水平处。
2. 开仓建立空头头寸法则。如果当天收盘价和昨天收盘价都位于当天的VIDYA下方,则明天卖出,并下达卖出后的止损指令。止损点设在比当天最低价低1跳的价格水平处。


你也可以以股票和共同基金收盘价为基础进行交易测试。我们在测试模型时不会使用任何特定的退出策略,那意味着一个多头进场信号将会使空头交易退出,反之亦然。我们将使用1500美元作为初始止损点,该止损点可以在稍后使用MAE后,即“最大不利变动幅度”后进行改进。我们将增加125美元的亏损幅度和减少125美元的收益来扣减滑点和佣金。
测试数据来自商品系统公司(CSI)39#永久合约,尽管你可以使用其他永久合约或你喜欢的其他连续数据。我们将使用从1983年5月26日起始的10年瑞士法郎期货合约数据,并使用System Writer Plus(SWP)软件包进行系统测试。数据将被划分为大致相等的两个5年数据模块。首先,将用1983年5月至1988年5月期间的数据对模型进行测试,然后,再用1988年5月至1993年4月期间的数据运行该模型。
请记住,我们希望我们的瑞士法郎长期交易模型胜率在30%~45%,回报率大于2.50。让我们看看我们的期望值与来自第一个5年数据模块的测试结果是否吻合,见表8.2。首先,我们知道测试周期并不短,因为在这个测试模块期间交易了33次之多。SWP软件的输出结果显示,交易的胜率为36%,平均盈亏比(回报率)为3.37;去除最大盈利和最大亏损后的回报率为3.18。该模型平均亏损持续天数为13个交易日,平均盈利持续天数为79个交易日。平均每次交易收益超过700美元,远高于我们的滑点损失175美元。因此,这一未优化的模型确实满足了我们的主要设计目标。从中我们可以得出这样的结论:这是一个合理的长期趋势跟踪模型。
MAE分析显示,任何一次盈利交易的MAE都没有超过1000美元。因此,在实际交易中,我们可以使用1050美元作为资金管理的初始止损点,而不是采用“测试”中使用的1500美元作为止损点。然而,当我们使用第二个数据模块测试模型时,我们将继续使用1500这个数字为止损点,以保持前后一致性。
分析“最大有利变动幅度”表明:
●有12次亏损交易的各自最大盈利不到1500美元。
●另有7次亏损交易的各自最大盈利介于1501美元至2500美元之间。
●仅有2次亏损交易的各自最大盈利大于2500美元。
因此,当最大盈利达到2501美元后,你可以把止损点移到盈亏平衡点处。如果盈利超过1501美元,你也可以更积极地管理你的止损点。

现在,我们有了一个在第一个测试数据模块上运行的模型,我们必须做一些“延长测试”,即在另一个连续的数据模块上测试该模型,而不改变模型的任何参数变量。这被称为“样本外”测试。采用第二组数据测试的目的,是检查模型交易性能是否会以任何方式出现下降。如果我们在用第一组数据测试模型时进行过“过度拟合”,即通过添加太多的条件以满足测试中遇到的一些细微要求,而这些要求在实际交易中又不太可能重复出现,则模型交易性能有可能下降。对第二组数据进行的测试结果将会告诉我们,该模型在实际交易中到底会有多好。如果模型在两个数据模块中的测试性能都相同,而不是在第二组数据模块测试中表现较差,那么我们对该模型的信心就会更强。
接下来,我们测试了从1988年6月1日至1993年4月27日的瑞士法郎价格数据,结果见表8.3。此次样本外测试数据中,有27次交易,我们大致将其四舍五入到30次。这一时期的测试结果与第一测试阶段的结果一样好:胜率相同(37%),盈亏比在某种程度上更高一些,为4.72。在剔除最大盈利和最大亏损后,重新计算得到的盈亏比为4.10,平均连续亏损交易日大约为10天,平均连续盈利交易日为102天。


总之,我们的趋势跟踪模型在10年的时间框架内运行得相当好。在1988-1993年测试时间段内,有7次盈利交易的各自MAE不到1000美元,有11次亏损交易的各自MFE不到1500美元。有4次亏损交易的各自MFE介于1501~2500美元,仅有2次亏损交易的各自MFE大于2500美元。这表明,在最大盈利达到2501美元后,你可以把止损点移到盈亏平衡点处。在模型发出反向进场信号前,瑞士法郎有足够的波动性触发我们的初始止损点。
我们还采用来自TechTools的Continuous Contracts软件开发的连续合约数据,对模型进行了测试,使用的测试时期与采用CSI公司39#永久合约测试的时期相同。两组数据的测试结果没有明显的差异。现在我们对该模型的信心更强了。两组数据4年期的结果对比见表8.4。

正如所见,从盈利交易的平均持续盈利天数来判断,该模型确实能很好地跟踪长期趋势。然而,不能保证该模型在未来任何一个市场中的表现都很好。它只是一个好的趋势跟踪工具,能够适应市场波动,并且该模型很有可能在偶尔出现调整的趋势性市场中获利。
现在,我们可以在接下来的12个月时间周期内测试该模型,以研究回报率和胜率数据的变化。或者从制定交易计划着手,你可以假设该模型应该达到35%胜率和2.50的回报率。
该模型有两个弱点需要提及。一是它在盘整市场或无趋势市场中,会出现“两头受损交易”;另一个弱点是在震荡剧烈的市场中,在该模型发出反向信号之前,会因触发止损点而使前期交易亏损离场。1992年秋季的市场波动就是一个很好的例子。在这一时期,该模型表现不太好。这并不奇怪,因为该模型必须对所跟踪的长期趋势不能太敏感。在长期盘整的市场VIDYA也不可避免地会产生亏损,尽管它比起其他移动平均线确实帮助改善了模型在波动市场和盘整市场的性能。
你可以测试该模型的其他参数变量。例如,通过使t值大于0.10来提高模型的灵敏度;或者,可以选择比9日周期短的时间段来计算驱动该模型运行的CMO。
接着,你可以将风险控制策略与该模型有机地融为一体。你可以将VIDYA本身作为一个跟踪止损的工具,测试基于波动率止损为退出策略的效果,严格测试模型。请务必以图形方式查看结果,以便更好地理解模型的特性。
在用此模型进行交易之前,你应该开发一个在第7章讨论过的典型的交易模板,以了解交易的进程,并考虑可以自由退场。很明显,模型计算仅仅是建立完整交易系统的起点,完整的交易系统还包括风险控制和资金管理。
希望本次讨论能让你结合本书中的不同指标,对开发趋势跟踪模型流程有一点感性认识。你可能会同意,需要对许多因素进行权衡,没有一个模型能面面俱到。