构建交易系统需明晰的三大陷阱
对大多数交易员来说,策略的制定仅仅是一种手段,是获利的必要路径。交易系统开发的过程,相对最终投入使用,是比较艰难的:通常,实际交易远比制定交易策略要更有意思。
不过,这会使得交易员采取各种捷径,这样一来,他们在制定交易策略时就可能产生各种错误。尽管短期来看,交易方法是简便了,但捷径所带来的错误最终还将影响实时交易。
好在大多数交易员在策略开发时出现的错误基本类似,一旦确定后,就能加以纠正、改进。不过,排除这些问题并不容易;在无法使用捷径的情况下,策略从制定到正确执行将变得更为困难。
那么,有哪些最常见的错误与捷径呢?大致有三种。下面我们将分别解释这三种错误会产生怎样的负面影响,如何发现并纠正这些错误。避免这些常见错误,将有助于建立一个更好的交易系统。
陷阱1:策略过于复杂难懂
在交易过程中,你不可避免地要遇到一些复杂的交易策略。对于自主交易员来说,可能会出现“分析瘫痪”中的情形:可以明显看到,下面的图表中充斥了各种技术指标、技术线及支撑与阻力区域。对于一个算法交易员来说,一个复杂的方法将包含成千上万行代码,需要优化调整几十个甚至上百个变量。
这两种方法有一个共同点:它们都极其复杂,涉及众多内容。很多缺乏经验的交易员会认为这就是开发系统的一种方式;他们认为,指标越多,算法对过去数据的拟合程度也就越好,所制定的交易策略也就会更好。但事实并非如此。
在衡量复杂策略时,存在一个谬误,使我们得出这一策略优于一般策略的错误结论:在历史数据上能取得较好结果的策略,并不意味着这一策略用于实际的交易中也能获得同样的成功。事实上,通过增加指标来不断地调整策略,或在算法中添加新的规则使得交易策略更为复杂;这种做法通常只能给交易员一种虚假的信心。在策略中,改进及添加更多的规则,并不意味着策略将变得更好。
很多人可能很难相信,简单的交易策略通常是最好的。对于自主交易员来说,只有一两个技术指标的相对简洁的图表,加上对价格走势与市场动态深刻的理解,往往比一个充斥着技术线与技术指标的图表要好得多。对于算法交易员来说,一条简单的入场指令通常要比需要满足5至10个条件才能执行交易的规则要好。
陷阱2:没有考虑市场摩擦的交易策略
比较市面上的交易系统,你会发现大多数交易系统都会列出一小段免责条款:佣金与滑移价差不包括在内。同样,许多自行开发系统的人也会忽略佣金与滑移成本;即使他们考虑了这些成本,通常也会低估实际的金额。
你会听到系统不包括佣金与滑移在内的各种原因。最常见的借口是“不同券商通常收取不同佣金”;另一个常见的理由是“我的系统只使用限价指令”。但真正的原因则是:这样的做法可以使系统看上去更好。如果考虑实际交易成本,能够获利的系统就更难找到。
以一个交易E-Mini标普500指数期货(CME:ESM14)的系统为例,该系统使用一种通过微小交易来捕捉非常小的市场变动的技术,并频繁进行日内买卖对冲来进行投机。如果不考虑佣金与滑点,该系统每天进行20笔交易,平均每笔获取15美元的利润。交易员看到的是每天300美元的利润,并会认为这些交易还算不错。但如果加上每个交易回合5美元的佣金及1个基点的滑点(这可能已经是乐观的估计),每天300美元的利润就变成了每天50美元的亏损。
对于不考虑佣金与滑移成本的交易策略来说,一个潜在的影响便是该系统可能会使交易员进行过多的交易。这里有一个例子。假设系统A是上面所提到的小型投机系统,如果不考虑佣金与滑移成本,每天可以获得300美元的利润。相对来说,系统B每天只进行一次交易,不考虑交易成本,每笔交易平均可以获得50美元的利润。任何比较这两个系统的人,都会选择系统A。但是,当加入佣金与滑点,结果正好相反;系统B才是唯一有价值的策略;交易次数少了,佣金与滑点占总利润的比例也要小很多。
因此,在系统开发初期,就将一定数额的佣金与滑移成本考虑进来,是至关重要的。对于E-Mini标普500指数期货来说,每个交易回合5美元的佣金,一两个基点的滑点,这样的假设是相对合理的。
陷阱3:系统测试使用所有历史数据
在系统开发时,很多交易员可能出现的第三个错误就是在测试系统时使用所有可用的历史数据。大多数缺乏经验的交易员会对到今天为止所有的历史数据进行优化与分析。之所以这么做,是因为他们希望确保策略已经反映了对最新数据的调整。
当然,如果第一次测试失败,交易员将在系统中添加一些规则或筛选条件(这样一来,就更可能出现前面提到的策略过于复杂的错误),然后再次运行所有数据。
最终,交易员会找到一个可行的交易策略系统,并将这一系统运用到实际交易中。但在交易策略发生问题时,这种做法几乎总是必然的解决方法。
一个更好但难度也更高的方法是通过对样本外数据的测试来验证一个交易系统。比如说,交易员可能会用过去10年的数据来制定交易策略,但保留最近一年的数据。当系统开发完成后,使用未知的(也就是样本外数据)进行测试;如果系统运行得较好,那么这一系统可以被用于实时交易。
此外,还能采取移动窗格测试。这种方法使用多个样本外的时间段,更有可能获得成功,因为产生的股票曲线已经完全包括了样本外的优化结果。
移动窗格测试或者样本外测试的一个缺陷在于:一旦样本外测试运行过一次,任何进一步的测试就不再是基于真正的“样本外数据”而进行的。因此,如果测试运行过很多次之后,很容易在不经意间就使得样本外测试变成了样本内测试。不过,样本外测试的方法还是要优于对所有数据进行优化的方法。
系统开发没有捷径
设计一个可行的交易策略是相当困难的。事实上,很多交易员从来没有真正做到过这一点;很多时候,他们在开发系统时会走捷径或者在系统开发过程中出现过于简化的错误。当然,在系统中添加一条又一条规则、一个又一个筛选条件,比找到一条合适又简洁的规则要容易得多。
同样地,如果不考虑佣金和滑移的摩擦成本,找到可行的策略也是相当容易的。
最后,与移动窗格测试或者样本外测试相比,对所有可用的历史数据进行优化是一种相对简单的方法,得到的结果看上去会更好。
但问题的关键是,如果我们使用对所有数据进行优化的方法来建立交易策略系统,相当于设计出这样一个交易策略:只有在测试的时间样本内应用这一交易策略系统,才能获利。当然,这需要有一个时间机器,而这显然比建立一个有利可图的系统更为复杂。
我们从上述系统开发的常见错误中得到的启示是:如果某一种方法使得系统设计变得更简单,或者回测的成功率明显提高,那么,这实际是一个可能有错误发生的警示信号。一个合理、恰当的系统开发过程总是困难重重的。
然而,从长期来看,用正确、恰当的方法开发交易系统,总是要好过因为系统开发中产生的错误而在市场上赔钱。