10 测试交易系统坚韧度
如果一个交易策略在很多不同的条件下都能成功,那么它就是坚韧的。如果它在与测试条件大不相同的情况下(比方说,一个更剧烈的波动创出了新高)仍可以工作,那么它就是更加出色的。
许多用户指责交易系统的不成功是因为计算机运行速度不够。综合了策略测试和统计学软件,计算机已经使得模拟上千种交易规则和技术易如反掌。预先编好的策略、无数的指标以及创建自定义指标的能力,都让没有经验的用户去毫无区别和重点地进行测试。结果是,计算机测试了大量的数据,但却很少能测试到成功所需的关键性标准。司空见惯的情况是,测试结果显示系统的盈利能力非常高,而在实际使用中则一败涂地。
过度适应
系统对于某段历史数据特别适应,即称为过度适应。每一个交易系统开发者都需要使用历史数据来验证结果。如果没有做历史数据测试,只是直接设定一些规则就开户交易,是不牢靠的。过去的风险会告诉你,你将需要一个多大规模的账户来达到你的目标,并且顺利挺过在征途上将承受的资金风险。
对于历史数据的仔细分析,经常会指明高风险的区域所在。有些时候,一个简单的规则就能够把风险降低到一个合适的水平。比方说,市场波动幅度增加时减少入市头寸。
对市场进一步分析,还可以产生出其他的规则:
如果S&P在3日内下跌超过1500点,则全部平仓。
或者:
如果S&P在前一周内下跌超过10%,则在周五平掉所有多仓。
这些规则以杜绝历史上曾经有过的一到两个特殊灾难为目的,从较普遍的、逻辑性的风险控制发展到更具有实际指导性。在什么情况下这些变化将不合时宜?答案是很难搞清楚的。
在这一章里,我们将一个不依赖于儿个有限条件限制的系统称为坚韧的系统。如果一个8日均线或12日均线系统会产生亏损,那么即使一个10日均线系统有获利能力,也不会被采用。最好的系统是一个可以在很大范围内选择参数而仍然获利的系统。这些参数包括趋势的速度、风险控制、获利平仓.以及过滤器。当几乎各种不同的参数设定都可以获利时,交易者获得的就是一个更加可靠的系统。
将坚韧度和参数选择分离
确定一个交易策略是否有效,以及将来能否用该方法获利,这两者之间有一个非常明确的分别。历史测试可以验证一个假设,表明怎样的变量和参数在过去是成功的。但这并不表明,那些在过去产生高额利润的参数设置在未来也有效。另外,如果有两个策略在历史测试中都获得了类似的成功,哪一个更好呢?
复杂的测试(称为优化)所给出的结果是,系统在某些情况下有获利,某些情况下有亏损。利润证明了策略背后的逻辑是有力的。系统越能够获利,我们对该交易方法就越有信心。然而,历史测试中带来利润的参数未必总是在实战中带来利润。提前决定哪些参数将会带来未来的利润,是一个和建立坚韧的交易规则不同的问题。
本章的大多数内容将集中讨论如何建立一个坚韧的交易系统。越坚韧,就越少依赖于选择合适的参数。我们可以假定一组任意选择的参数将产生平均的绩效。因此,我们要确保平均的绩效是好的。
原 理
开发一个与参数无关的交易模型是一个理想的方案,但是这很难。这是一个与套利(基于明确的经济反常状态)相反的观念。本章将设定一些过程,这些过程将极大地提高任何交易模型的坚韧度。这不是一个容易的过程,但可以一步步来。做得越多,结果越好。
没有不带任何限制的模式。每个模式都有一个目的,从而需要一些满足其操作环境的定义。一个长线交易系统完全有理由将使用3日均线排除在外。交易频率和风险都可以降低到一个狭窄范围,因策略和投资所允许的范围不同而定。在价格形态可以被预先确认时,采用一个价格形态是有效的。在这个范围内,程序可以变得坚韧。
参数选择的一些基本原则,确保了一个选择可以产生非常优异的结果。这包括更慢的趋势和更少的人为风险控制。本章将通过前述的结论来建议一套规则和测试的步骤,以产生更接近于实际交易的测试结果。
优化的绩效一例
表10-1对比了均线加百分比止损系统的几组测试结果。均线的周期以及止损的百分比是两个用来决定交易的参数。一个TELETRAC优化将上述系统应用在1991-1992年的恒生指数上,以寻找出各种不同参数的组合。
如果我们使用1991年全年的测试结果中最优的参数,在1992年进行交易,我们将倾向于使用慢速移动均线。45日均线系统给出17.4%的利润。5到30日的移动均线都只给出了波动的结果和可怜的利润。
1992年的测试结果则说明完全相反的情况。5到20日的移动均线带来了丰厚的回报,而40到50日的均线带来了最差的结果。如果我们以1991年产生高额利润的参数来交易,那么1992年的绩效将只有1.3%(前提是如果交易执行得很好)。

这个简单的移动均线测试说明,如果只使用一小部分数据,那些“最佳”参数的绩效就会显现岀典型的不稳定性。1991年带来最高利润的区域在1992年产生了很差的结果。
决定坚韧度的潜在方法
我们可以通过集中研究那些广泛成功的系统,来提高我们参数选择的效果。如果所有场合的测试都可以获利,我们将得到一个完美坚韧的交易系统,任意一组参数都将带来利润。
为了衡量哪一个策略比其他的更好,我们将会定义一系列测试步骤,来衡量所有测试结果的平均值和标准差。仅有最高的平均值是不够的,一个较小的标准差表明了所有测试绩效的一贯性。从平均值中减去标准差之后,即是最佳选择指数的值。
最佳选择指数=平均回报-回报的1个标准差
因为一个标准差涵盖了一组占全部范围68%的数据,最佳选择指数告诉我们,这个系统将提供84%的机会来获取大于等于最佳选择指数的值。请记住,在分布曲线的左边部分上表明亏损有一半的概率。比方说,如果所有的复合数据测试的年回报平均是14%,并具有6%的标准差,我们得出的结论是:
■一个任意的选择将有84%的机会产生比8%大的回报。(平均值减1个标准差)
■一个任意的选择将有97.5%的机会产生回报比2%大的回报。(平均值减2个标准差)
■一个任意的选择将有99.5%的机会产生回报比-4%大的回报。(平均值减3个标准差)
最小的测试标准应该具有一个由最佳选择指数给出的84%的成功机会。
测试程序
终极的解决方案是测试程序。由概念开始起步,测试以清晰的步骤构成并指向一个明确定义的结果。经验表明,如果你不控制程序,程序就会控制你。测试程序可以被分为5个部分:
1.决定该测试什么
2.决定该如何测试
3.评估测试的结果
4.选择特定的参数来交易
5.交易和测试绩效
这里,每一个步骤对于程序的成功都是至关重要的。第一次建立这个程序将会需要大量的精细工作,但大多数工作只需要做一次。关于数据、测试软件和评价的方法,需要作许多决定。交易策略的正确开发对其成功至关重要,因此本章将详细地讨论这些方面。方框10-1提供了一个清单,可以作为我们的备忘录。
方框10-1坚韧度测试的核对清单
第1部分:决定该测试什么
□1.策略是合乎逻辑的吗?
□2.你能将所有的规则编成程序吗?
□3.策略只在特定的情况下才有用吗?
□4.估计一下测试的结果。
第2部分:决定该如何测试
□5.选择测试曲工具和方法
□6.你有足够的"正确”数据吗?
□7.计算包括了现实的交易费用了吗?
□&你将会测试一个参数的全部范围吗?
□9.参数将会以什么顺序被测试?
□10.参数进行了适当的分布吗?
□11.你定义评价的标准了吗?
□12.输出飾结果将如何呈现?
方框10-1(续) 坚韧度测试的核对清单
第3部分:评估结果
□ 13.计算的结果正确吗?
□ 14.有足够的交易是"明显的”吗?
□15.交易系统是否对于大多数参数的组合都给出了积极的结果?
□16.逻辑的改变是否会提高总的测试绩效?
□ 17.在其他数据上的测试结果如何?
第4部分:选择特定的参数交易
□ 18.最后一次测试包括最近的数据吗?
□19.你是从一个广泛成功的区域中选择吗?
□20.测试结果的利润是相对平均地被分配到被测试的历史数据之中吗?
□21.每笔交易的利润大到可以忽略误差吗?
□22.历史数据测试的结果列出了任何因价格突变而引起的巨大亏损吗?
□23.你是否将回报进行过风险调整以达到你可接受的风险水平?
第5部分:交易和观测绩效
□ 24.你总是遵循相同的经过测试的规则吗?
□25.你只交易被测试过的金融产品吗?
□26.你观测了系统和实际交易的差别吗?
第1部分:决定该测试什么
在你开始测试之前,完整地定义系统和测试计划。你一定要告诉计算机该做什么,而不是让计算机来告诉你。当你遇到障碍时,不要随意改变主意。试着遵循最初的主意来完成系统的构建,并学习它的优点和缺点。
步骤1 策略是合乎逻辑的吗?
在你开始测试之前,你写下规则了吗?你的想法来源于哪里?交易系统的成功基于有力的观点,比如经济关系或有效的技术分析策略。让计算机去弄明白一个不明显的短期价格形态,无论结果看起来如何可靠,仍然不会是一个好的交易方式。价格形态总是能被发现,但是其可预测性值得怀疑,而且时常不带任何预兆就改变。
当你开发你的系统时,你的策略一定要对于市场有意义,而且配合好你自己的目标,就像下面的一些例子一样:
■对于股票市场,你可能想要一个长期多头而没有空头仓位的策略。
■对于债券市场,一个和缓慢变动的经济以及政策平行运行的长期投资策略,可能是最保守的。
■对于外汇,一个跟随日间价格突破进行买卖,并以小利平仓为目的的短期投资方法,可能对战术性的对冲和有限的隔夜仓位是更加有效的。
使用合乎逻辑的主意。一个合乎逻辑的主意不需要以基本面为基础。长期观察芝加哥国际货币市场(IMM)上的价格运动,你也许有一个印象,那就是可靠的买卖信号只发生在每天高成交量的三个时间点——开盘、收盘以及午后开盘。几个时间段之间的成交量低迷期给出的信号,可靠性要更差些,并且需要一个更大的价格运动为基础来进场交易。重要的是,知道你到底想要做什么,然后使用计算机验证你的主意。
由一个念头出发却结束于另一个想法。确保计算机的反馈不会导致你偏离自己原来的想法。一个合乎逻辑的策略,可能会发展出一些毫无意义的形态。人有一种天性,总是想去解释一个系统为什么是很好的,而这往往只是因为他发现测试的结果是好的。
步骤2 你能将所有的规则编成程序吗?
交易策略的所有规则都能被输入计算机或者一个电子表格吗?你是否假定了任何没有被编入程序的东西?一个不能被测试的策略将不能被评估。如果你仅仅因为系统不做隔夜交易,就假设你不会被一个价格突变冲击,那么你将使你自己暴露在料想不到的亏损、资金短缺和老板无可非议的批评下。
写下清楚的规则对于测试是很重要的。你必须确定你能记录买卖的条件、风险控制、买卖单的种类、交易的时间以及其他一些情况,来完整地描述你的计划。写下规则将会提醒你需要用于测试的数据类型(无论是价格、生产者物价指数,还是美国石油协会统计数据),以及频率和数据的内容(开盘、最高、最低、收盘或者带有分笔成交量的30分钟价格)。测试的时候越仔细越好,因为到后来细节总是加了又加。
日间突破的例子。从最基本的方式开始,省略风险控制、获利了结或者入场条件限制。如果你相信一个日间突破系统是有冲击力的,那么就先测试突破进入位置和基本的退出位置。你可能在每天收盘时想要平仓,或者在价格向相反的方向突破时你也可能退出。最重要的是,你在增加获利了结、风险控制和其他特殊条件之前,需要知道最根本的原理是否工作正常。
决定系统的哪一部分能改变。早盘的一次价格突破给出了交易信号,这样你就有充裕的时间来执行这个交易,获取较大的利润。因此,你将会想要测试价格突破的时间点。你不会采用在那天接近收盘时的一个进入信号,因为这时候潜在的利润空间已经很有限了。
如果交易系统完全用计算机处理,你将不会想要比每5分钟一次还更频繁地观察数据。尽管你可以在一个突破发生后的60秒钟内执行一个买入指令,但想要得到好的执行价是不大现实的。使用5分钟线来测试,而不是1分钟K线,也能减少测试策略所用的时间。
在你开始测试前,你已经知道,一个日间突破系统,取决于当日的突破发生在哪段时间,以及买卖点的时间、获利了结目标的规模和一些风险控制。
趋势系统一例。所有的系统都有一些共同的地方:进入市场和退出市场的规则,风险控制,以及可能的获利了结情况。一个趋势系统需要以趋势的速度为基础,这可能会因为你的程序和目标而有巨大的不同。因为较小的杠杆作用和较髙的交易费用,股票交易程序需要的是一个50到500天的趋势。而一位期货交易者因为只需要5%的保证金,将会更愿意依靠一个5到30天的快速趋势。
对于日内数据使用平滑方式是错误的。因为随着观察数据的时间周期缩短,噪音的水平在增加。在所有的市场中都有流动性不高的时间段,这种时间段内,价格向任意方向的跳动都不能表明趋势发生了真正的改变。这将引起很多错误信号,而这些信号无法借助使用跟踪较长趋势的方法来消除。这种日内噪音和趋势延迟的组合,将会是个很难克服的障碍。
步骤3 策略只在特定的情况下有用吗?
必须预先决定:策略是否只是对特定的市场行情有效。一个主意只能仅对长期或者短期的交易有帮助。比方说,一个使用15分钟线数据的日间交易系统,不会使用200日移动平均值,而一个长期股票投资系统将不会使用一个3天的趋势。定义清楚哪一个交易模型将对应于哪一个范围的市场工作,将减少失败的可能。在交易策略中相对应于每个关键的参数的最合理的测试范围,要把它写岀来。你越清楚地定义你的期待,你得到的结果也越好。
步骤4 对预期结果进行猜测
决定预期的收益,明确获利交易的百分比和亏损的规模,目的是把测试结果与你的期望相比较。结果究竟是比计划的更好还是更坏?当评价有一个基础的时候,你将更容易地修改和发展你的系统。你必须首先决定什么是你期待的,然后再对测试结果说“哪里有问题”。
第2部分:决定该如何测试
步骤5 选择测试的工具和方法
借助当今市场上更加成熟的策略测试软件,如今已经不再需要用FOR-TRAN、BASIC或者C语言来编程。使用一个软件包,比如TeleT-rac,或0桵EGA的SYSTEM WRITER,甚至一个LOTUS或Quattro的电子数据表,在几分钟以内,你就能对交易策略的好坏有一个相当不错的了解’
今天,有越来越多的价格低廉的可编程图形终端和新的测试策略的软件。它们全部可以正确地计算损益,灵活地改变规则和数据的选择,以及将价格和获利率绘成直观的图形。在某些情况下,测试结果还能输入电子表格内作较进一步的评价。软件的价格比起被节省下来的时间是很理想的。对于更加熟练的分析师来说,更先进的软件,例如Manugistics Statgraphics和Mathsoft Mathcad,是用于评估复杂的统计关系和表达数学公式的优异工具。
长期的测试,短期的测试,或“一步步递进”的测试?表10-1的模型是很常见的。使用很少数据的测试给出的结果表明,许多参数的组合都可以进行良好运转。测试的时间段越短,越多的系统将会呈现盈利的状态。我们来看看一个已经稳定上涨达3个月之久的债券市场。如果只有小的回撤,那么任何大于10天的移动平均值将会产生相同的结果,也就是从开始到结束时期的净移动(见图10-1(a))。
当一个短期测试有一次或者较多的价格波动时,较缓慢的趋势将回吐利润,而一些较快速的趋势将非常成功。价格波动的大小和市场噪音的多少决定了哪一趋势的速度是最好的(见图10-1(b))。大体上,

(a) —个短时期的趋势市允许大多数的趋势速度都运行得很好。
(b) —个短期震荡市可能允许快速的趋势获取利润,但是较长的趋势则造成亏损。
小量数据的测试会给出:
■单独值和平均值都非常高的测试结果
■有时风险非常低
■更多可以获利的快速交易模式
■波动的预测能力
通常,在较长的测试期间内找到一个好的交易方法就难多了。跨许多年份的测试数据所产生的绩效,将绝不会和测试几个月或一年的数据所产生的绩效相提并论。当测试较多的数据时,你应该考虑到的因素有:
■更低的回报
■仓位被持有更久时间时,具有更高的风险
■很难得到和短期交易类似的一致性的获利
■较旧的数据是否可靠
■更良好的预测能力
因此,测试相对少量的数据会使得测试结果看上去比较理想,但实际运行起来,并不像你指望的那样好;以比较长的测试期为基础的结果比较差,但实际运行起来会更接近你的期待。长期数据的测试结果不如短期数据的测试结果,你不要为此感到失望,因为较短期数据的测试结果实际上误导了你。
选择一个长期的、具有代表性的测试时间段。当测试较多的数据时,会碰到很多不同寻常的情形,如较长期的有利的价格移动,或一系列的亏损和价格突变。当较长的时间段被测试时,风险和回报都同时增加,但风险的增加比回报的增加更快。较短期时间的测试,只能显示出不切实际的小的风险,这在实战中会导致交易资金不足和致命的亏损。一个好的规则,要保证数据中包含了两个完整的周期,也就是说,应该包含两个清楚的牛市行情、两个熊市行情以及两个延长了的震荡市。
因为测试长期数据总是得出不很令人满意的结果,你可能会争辩说:市场已经改变,旧的数据不再有代表性意义,全球化和区域同盟已经改变了许多地区的价格联系和模式,政府控制将会避免经济崩溃。但是,市场只会继续展现最近所出现的价格运行模式的观点是不切实际的。市场将最终会发展出新的模式,我们却无法预知它将会成为什么样子。历史中所包含的有关变化的环境的例子,是现实的,是最容易获得的和有实际指导意义的。表10-2显示:随着更多数据的使用,绩效降低,但预测能力增加——短期的测试产生了不合理的利润预期。
“外推检验法测试”对单一的长期测试。“外推检验法测试”的技术似乎是解决一些测试的两难问题的有效方式,其操作如下:
1. 选择一个短期数据间隔,称为“测试窗口”(比方说,2年的数据)。
2,在测试窗口.上进行测试,优化全套的参数并选择“最好的”。
3.在紧接着的另一段数据上(举例来说,未来的3个月)测试该模型,并使用“最好的”参数。(见图10-2)
4. 收集系统在这段非原取样期的绩效结果,与原取样区的绩效作一比较。
5. 将测试窗口向前移动,重复第2步骤到第4步骤直到结束。
6. 在取样区外绩效最稳定的一组参数可以被认为是最好的。
潜在的问题。外推检验法测试似乎和我们实际操作一个交易系统的方式完全一样。但是这里有些隐藏的问题:
■较短期的测试数据通常支持比较快速的策略,产生比较高的利润和较多的交易。但是,快速交易策略的绩效从一个测试窗口改变到另外一个时,会剧烈改变,就如先前讨论过并在表10-2中显示的一样。“最好的”参数不是交易的好选择。
■短期的测试无法公平地表现长期交易的效益。每个短期测试中只能有少数的长期交易,而且它们可能因受到测试窗口的限制而在交易中间被迫结束。将测试窗口往前移动并不能修正这些交易的问题。
■用经过修改的规则重新测试原系统,意味着“取样外”的数据不再是新的了。这叫作“反馈效应”。一旦经过使用,数据就不再是“取样外”的了。因为此时你已知道该期待什么价格运动以及如何使数据模式显现出较多的利润。
外推检验法通常将会选择出一个不一贯的、快速的交易方法,而不是一个更好的长线交易系统,这是由于测试窗口的局限造成的。与此相反,在一个长期数据的测试中,使用所有的输入数据,就可以在尽可能多的变化的价格形态基础上,得到一个绩效连续的系统。
方框10-2较多的数据将改良测试的结果
使用校多的数据能得出更加一致和现实的结果。最后的测试结果可能表明,风险更高,而利润更低,但是这些数字更可能在实际交易中达成。在较长的数据系列中寻找稳定的短期模型是更加困难的;因此,结果选择会更加支持较缓慢的交易。长线的方案包括了真实的资金曲线的波动,因为那是不可能靠微调来避开特定的亏损期间的。这个绩效结果表明了更高的风险,说明必须要有更高的资本。
对于法国期负交易所CAC-40指数(表10-2)的一个简单测试,列出基于
1、2、3和5年度数据的几个测试的预期能力。被测试的系统是:
1.一个从5到50天范围的EMA指数移动平均线,以5天步长增加。
2.一个趋势改变的判断标准("过滤器”)从0到10点,以1点为步长增加。
3. 当趋势向上改变超过过滤器的幅度时,系统给出一个买入信号;当趋势向下改变超过过滤器的幅度时,系统给出一个卖出信号。
每个测试的最高利润决定了趋势的速度和过滤器的大小,然后这些参数被用来评估未来1年度的数据。每一个测试的平均值放在一起比较。
结果的摘要报告
1年度测试。最佳趋势速度和过滤器尺扌每年都不相同。平均速度在所有测试中是最低的,表明一个快速的趋势在短期的测试中总是显得最好。绩效在接下来一年的测试中是波动的,平均亏损41点。使用1年度的数据预测下一年度看起来没什么希望。
2年度测试。年均利润下降,平均最佳选择稍微减慢了,表明更多的测试数据变得难以配合。然而,下1年度的结果改善并呈现了净利润。
3年度测试。绩效模型继续改进。1988年和1989年的1年度向前测试表明了巨大的亏损,研究那些数字发现,该两年创了新高。如果能够保证价格移动保持在被测试期内的范围里,那么绩效在取样外数据中似乎是比较好的。5年度测试°继续全面的改进。较长的趋势被系统选择,测试的绩效下降,这些是相当好的结果,因为在3年度测试中显现出极大利润的1985年和1986年,并没有被包括在这个取样外数据的绩效中。


一个非常吸引人而严格的测试步骤,时常因为测试窗口过短的原因而从快速向缓慢的参数跳变。这可能将错过选择更慢更保守的策略的机会。
步骤6 你有足够的“正确”数据吗?
测试的数据越多,系统将经历的不同状况越多。至少要有两个多头市场、两个空头市场和两个震荡市的数据。你通常应使用尽可能多的数据,除非你能证实那些较旧的数据是误导性的或不再有效。在最后的系统被确定以后,要将一些数据作为取样外数据以作验证之用。这在步骤18中将更进一步地讨论。
测试与实际交易用的是同一种数据吗?请勿测试某种数据却交易另外一种。不要使用一个“连续的”数据系列,因为这种数据中的跳空有可能已经被移除掉了,或者数据将引起在实际交易中不可能发生的突发性巨大利润或亏损。一个“永久的”合约中,会存在从来没有出现过的价格,并通常缓冲了任何剧烈的价格运动,使得风险看起来更小。
你核对数据的准确性了吗?即使数据是由一个可靠的供应商提供的,也可能是错误的。注意观察合约开始和结束的地方有什么价格是完全不同的。有时候数据会包括一些从另一个市场中采集来的数据,或者一到两年之前的一个错误日期。检查空白的或记录为0的地方。如果你将数据绘制成图表,你将会容易地见到错误的地方。小到无法见到的一些错误则可以忽略不计。
选择测试数据时的一些特殊情况。我们不是总能找到充足的数据来进行测试。新的市场或变化的形势可能促使我们质疑旧的数据。也有可能你正在期待从一个最近的价格模型中获利,并不期望长时间地使用系统。下面提供一些可供选择的方案。
(1) 选择有相似期间的特别的数据。已下滑到一个很低水平的股票价格,将与它在很高价格和很高波动率的区间中有截然不同的运行模式。选择类似的历史期间,比如在一个延长了的下跌期之后,或在一个10%的抛售性下跌之后,可能是唯一的构建你策略的方法。
(2) 使用现货市场来构建期货市场的模型。现货市场时常被用来测试即将交易一个新的期货合同的系统;然而,一个新的合约流动性可能会非常差。一个好的模型将记录其他的新市场中类似的情形,以适应从现货到期货的改变。因为有许多变化中的市场,这应该是一个很有好处的练习。
(3) 在特殊状态下的股票和期货市场。所有的市场都经历过一些突变:一个集团的丑闻或管理失误,突然加入的新竞争者或政府的干涉,由于一场霜冻而造成的咖啡或橘子汁的价格突变。这些特别的情形一定要分别研究,而不是将它们融合进每天价格趋势的变动之中。对于特殊的情况,市场的反应经常是类似的,因为此时更多是人的本能反应,而非企业或商品的基本面因素。相似的情况在其他的市场中也有。当特殊情况以价格突变的形式出现时,将需要一组新的规则。这在第7章中讨论过。
(4)注意结构性的改变以及数据不足。欧洲货币体系把一个共同的结构加在了有很少先例的各参与国的货币上。在此之前,在《布雷顿森林协定》体系之下,不大可能获得很充足的相似或合适的数据来构建一个交易策略。在这种情况下,基本分析是唯一的选择。以小量的数据为基础的测试结果是不可靠的。如果对于新协定的基本交互作用和规则有明确的理解,那么测试可能会提供某些验证。迄今为止,欧洲货币体系已经被证实波动性很大,因此,采用一到两年数据的一个测试,会导致惨不忍睹的结果。
(5) 创建更多的数据。对于某些市场,是可能人工创建数据的。通过研究不同价格水平的波动性、运行的次序、高价与低价区间的周期变化以及季节性等因素,有可能使用随机的价格发生器,创建出类似于原被测数据统计特性的数据。人工创建的新数据提供了测试较多情况的可能,并开发一个更加坚韧的解决方案,但它与真实的数据是不同的。建议最好在测试真实数据之前,先用人工创建的数据进行测试。
被测试数据的类型。为测试策略所用的数据,应该总是和用于交易的数据相同。对股票来说这是非常简单的,但当你使用外汇或期货价格的时候则变得更困难一些。外汇市场需要作对于持有期利息的调整,而期货市场的问题就更大。虽然最近期的期货合约流动性最好,但它可能仅仅有一个月的黄金交易期,很少超过三个月。时常发生的合约到期使得测试很不方便。下面将说明该如何解决这个问题。
(1)原始数据系列。对于股票、外汇、利率或其他的现金交易市场数据,一个长期连续的未经调整的原始数据是可以用于测试的。交易现货市场时,你也会需要利率来计算下一个期货的价格。把现货价格当作一个有效的进入和退出点,这可以避免每日都要将仓位向前滚动。每个换期都要付出交易费用,从而侵蚀到总利润。当合约兑现的时候,另一种方法是,你使用现货价格作为进入和退出点,而且计算出平仓时的净利率信用和债务。在每次合约换期的时候,要算上附加的交易费用。
(2)期货合同。原始的期货合同数据也可以不必修改而进行测试。可用下列步骤:
■读取期货合同数据。
■从数据最初出现的地方开始测试策略,或一旦有了足够的数据就开始测试。
■于某一日在一个新的合约上开设仓位,或在早先的合约停止交易的日子上继续。如果在换期的时候,早先的合约已有一个未清的仓位,那么就在同一个日子在新的合约中建立相同的仓位。交货月份之间不是高度相关的那些特例是值得注意的,比如家畜类这样的市场,以及谷物市场中上季作物转为应季作物的关键性时期,或者二月转三月时的取暖燃油。
■在合约到期之前选择一个特定的日期来退出所有的交易。对于利率,这通常是在当月交割之前的最后一天。对于货币,是在到期之前大约3天。因为结果通常以合约的方式给出,所以这个方法不是很方便。对于利率期货的一个10年度数据测试,40组个别结果要进行累计计算。除非你能视一段一段的数据为一个连续的资金流,否则将很难评估资金最大的损失。
(3)期货的连续数据系列。许多数据供应商会提供一个重新构造的数据系列,该系列将伦敦金属交易所不同月份的期货合约都连接在一起(举例来说,一个为期3个月的价格系列)。但这些数据对于测试来说是无法接受的,因为它们无法复制出在一个真实环境中交易所产生的价格。被构造出的3个月长的数据,因为用插值替换的方法来反映换期费用和利息,通常比那段时间实际发生的价格运动更加平滑,从而减少了利润和风险。
缺口调整过的系列和指数系列。缺口调整过的数据系列是大多数技术分析程序的好选择。这种系列借助消除换期时的价格缺口,来将最接近交割期的合约都连成一体,从而构建一个单一的价格系列。较旧的合约依照缺口的情况进行向上或向下的调整,通过调整,近期或远期期货合同都具有了与当前价格可比的价格。
缺口调整过的数据系列适应于趋势跟踪系统,同时也对那些只关心相对价格而非绝对价格的策略很有帮助。它不能用于图表分析、经济研究(供需情况/价格关系)和其他类似的用途。缺口调整的一个问题是,当较旧些的价格改变时,非常老的数据将变成负数或不切实际的价格。价格不是真实的,但收益率和风险衡量必须关联到真实的价格,而并非在缺口调整过的系列上的价格。
再加上一个附加的步骤——编制指数,缺口调整过的价格系列就变得更加有用。编制指数是指以数值100(或1000,看方便情况)开始,然后根据百分比变化来增加或减去一个连续的值。举例来说,
index=index[1]+(price-price[1])/price[1]
指数=指数[1]+(价格-价格[1])/价格[1]
第2步骤:跳空调整一
1.由最近的数据输入开始,并向前检查。
初始化偏差(BIAS),也就是跳空的累计值。
初始化价格计数值N。
2. 如果之前的日期和现在的日期不等,则增加偏差并保持数据,否则增加新的跳空到偏差上,并略过这个重复的记录。
3.如果全部处理完毕,就转向第3步骤,否则增加N,去处理下一个历史数据。
第3步骤:编制指数
4. 从最早的数据M开始,设定指数初值为100。
5.增加M以便观察下一个数据项。
6. 以百分比变化来计算指数值。
7.如果没有全部完成,回头继续从(5)开始。

图10-3连续并且经调整跳空后的价格系列流程表
一旦你依照在表10-3中那种形式建立了一个连续的数列(第1步),就很容易地向前检查调整跳空,向前编制指数。
“指数”指今天的新指数值,它等于昨天的指数值“指数[1]加上昨天价格改变的百分比。标志[1]意味着前1天的值。指数价格表现了一个百分比的改变,而且可以对不同市场的回报之间作简单的比较。这就消除了需要参考原来的价格数据来计算风险和回报的必要性。
构建一个缺口调整过的系列。如果你正在操作期货合同,一个连续的系列可能是非常有用的。创建连续系列有三个步骤:①在换期当天用复制的记录创造一个连续价格系列;②缺口调整该系列;③编制指数。图10-3表明了这一加工的流程表,由第2步骤开始。使用表10-3的数据来追随流程。举例来说,如果S&P500股票指数正在被组合,第1步骤将导致1993年的6月合约在5月的最后一天终止,同时9月的合约在那天开始。第2步骤中,每当我们识别了一个重复的日期,就会向后搜索并调整缺口。在表10-3中,6月合约价值被上调了12点,和5月31日的换期缺口相同。第3步骤将会将第一个价格赋值为100,然后计算接下来每个连续记录的百分比改变。注意:如果仅仅需要输出指数,那么一个聪明的分析师是不需要进行第2步骤的。

S&P价格已经被组合成单一系列,而且仍然表现了原来的价格。在5月31日出现了一个重复的记录,这是换期和缺口调整的日期。“缺口调整”和“指数”两列给出了在那些步骤完成以后的价格。
其他可选择的方案。缺口调整还会导致一个问题,就是交易费用不能在换期的时候被显示出来,因为换期日已经无法再被识别。有一种更难做到的方法,但很可能是更有效的,就是编写一个程序来检测,当遇到重复的日期时,就自动了结旧仓、开立新仓。
调整过价格突变的系列。在第7章中,有一个用FORTRAN语言编写的程序,可以除去价格突变,并用编制指数的方式恢复数据的连续性。这是一个与图10-3流程类似的程序,并且给出了代码的细节。
步骤7 你考虑了真实的交易成本了吗?
交易费用包括手续费和价格的滑失。但是,其他的因素也会减少绩效。
你很在意错过了交易机会吗?“无法成交的交易”并不导致亏损,但减少了利润,它们对于绩效有很大的影响。如果你过度交易,超过了市场的流动性所允许的范围,那么,“无法成交的交易”就成为一个很重要的因素。日间交易系统比起尾盘交易系统要面对更多的问题。一个成功的交易系统的重要特征之一,是能够达成与预期相类似的真实交易。对于价格滑失和无法成交的交易的详尽讨论,请见本书第2章。
步骤8 你将会测试一整套参数吗?
预先确定好这个策略的参数敏感范围。如果你正在为某个机构的投资组合进行股票交易,移动平均线的测试范围可能是50-400天。止损的尺度必定要相同的大。然而,不要刚刚初步扫视一遍,就下手除去带来亏损的非常快和非常慢的参数范围,这和只保留带来利润的参数的做法是一样的。如果只观察一个狭窄的已被预先选定的运转范围,你将无法建立起一个相当坚韧的模型。
步骤9 以什么顺序测试参数?
首先测试最重要的变量,即会引起绩效最大改变的变量。那可能会是MA、RS1或者KD所用的天数;一个价格突破系统的日内时间或天数;或者反趋势套利方式中的标准差。这些变数通常对于利润有最大的影响。对于其他规则的测试都应该遵从一个顺序——对利润影响最大或最常用的排在前面。
先测试最重要的变量,将大大提高测试速度。每次为一个变量选择测试范围,比起测试一个程序的所有变量的所有组合,能减少测试的次数,从而减少了耗用时间。
某些情况下,参数的最大利润组合发生在最主要的变量被“局部优化”的时候。举例来说,当移动平均值非常快速的时候,获利了结的机会可能增加,因此你可能需要一个迅疾行动的状态来保证非常快速的获利了结和非常短的持仓时间。如果这两个特性一定要一起工作,同时测试趋势周期和获利了结水平就很有效。也可能是,获利了结水平是最重要的变量,而趋势周期的影响并不明显。
步骤10 参数适当地分布了吗?
不只是参数的范围需要预先设定,参数的分布也很重要。方框10-3描述了需要完成的任务。这是把握测试全局观的一个决定性的步骤。良好的全局观,是构建一个坚韧的系统的关键。
因为最终结论是以所有测试的平均值为基础,参数的分布不能只是支持快速的或缓慢的其中一种策略。参数必须被平均分布。当一个移动平均系统被测试的时候,通常认为一个5,10,15,20……的测试是一个合理的选择。但是,这种相等的步长增量,只支持非常缓慢的交易。
相等天数的步长,对于所需要的测试数据有大相径庭的百分比变化,图10-4显示了这一点。一个从5天到10天的移动平均值改变,使得数据量增加了百分之百:从10天到15天的改变增加了50%的数据,但一个从95天到100天的改变只有5.2%的变化。一个天数相等的步长分布,将会使测试倾向于较缓慢的结果。
方框10-3 测试的趋势分配
待测趋势速度的选择,将影响到对系统潜能的观测。如果测试了从5天到100天的移动平均线,总的结果将偏向校长的趋势;这意味着,从55到100天的趋势周期的结果可能是非常相似的,而从5到50天的系统则可能显现出非常不同的绩效。
观察一连串测试的百分比变化,可以发现随着趋勞周期加长,测试的数量将减少。表10-4显示了:(1)天数,即以日来计的指数移动平均值的测试周期;(2)变动百分比,即该时期发生的百分比变化;(3)ExpSC,相等的指数平滑常数;(4)Equal,一个平滑常数的平均分布,以下面列出的算式计算:
smoothing_constant=2/(days+1)
(5)天数,与第4列中的平滑常数相对应的天数。每一列的底部给出了平均值。

方框10-3(续) 测试的趋势分配
方框第(2)列表明,当周期偏短时,变化百分比的跨度非常大。平均的变化百分比在35天的测试附近下滑,尽管测试的中央区是50到55天。这表明了对于较长期测试的不平衡,因为它们的变化都很小。图10-4(a)也列出在快速趋势区域的巨大改变,在剩下来的大部分测试中,变化也很快地降低到很小。

(a) 相同的测试期间。相等的测试期间步长增量,导致非常不同的百分比改变。
(b) 相同的平滑常数。平滑常数通常可以被认为是一个百分比,表明了对于快速的趋势来说,以天计算的测试期间给出的结果明显地更加相互接近。
方框10-3(续) 测试的趋势分配
趋势速度以相等的百分比逐步增加的一系列测试,比起以相等期间逐步增加的一系列测试,能够提供好得多的综合绩效。使用EMA可以简单地做到这一点。因为在EMA中,相等的平滑常数间隔和相等的百分比间隔是一样的。第(4)列使用了一个均匀分布的平滑常数,开始和终止的值与第(3)列中的相同。第(5)列给出了大约与第(4)列中的平滑常数一样的天数,这是通过如下方法转换而来:
days=(2/smoothing constant)-1
图10-4(b)比较了相同天数间隔和相同百分比间隔的测试结果,以试图获取一个更加均匀的绩效分布。
用目测来分布。不必使用数学工具来决定测试的参数分布。下面的例子很好地显示了一个非常有效的目测方法。如果测试的最快速结果列出100次交易,而最缓慢的结果列出10个次交易,那么我们就可以选择测试的周期,以使得II遍测试分别提供100,90,80,……,20,10次交易。事实上,想得到一个完美的分布是不可能的,但是,测试目标应尽可能保持清晰。要努力尝试着去寻找,找到那些使测试的交易能够平均地分布在全部测试区间上的参数。
步骤11 你定义评价系统的标准了吗?
你用什么标准来衡量哪个系统比较好?为了评估结果,需要对每个测试做一些最起码的统计。要预先决定你将如何选择最好的策略。利润最好的测试,未必比风险回报比最好的测试更重要。你经常会需要一个各种统计数字的集合,包括回报/风险比例、单笔交易的利润,以及进行风险调整后的回报等等。
风险回报比,是年均综合收益率除以年度资金变动的一个标准差。只要所有的测试是相同的,对于实际的目标来说,每月每日的价格都可以用于测试。这个标准是证券业公认的,可以对不同的时间周期上的测试作一个快速而标准的比较。
综合的年度收益率:
CROR=(最终价值-起始价值)^(1/年数)
标准差:
SD=@ STD(资金的每月变动)
回报/风险比例:
RR=CROR/SD
在决定是否使用杠杆之前,应使用现金回报来考核净绩效。其重要性和具体使用方法在第4章中已经很彻底地讨论过。
单笔交易的利润,表明了你有多少资金可以应付料想不到的意外,并且能让你观察到交易费用的影响。如果两个系统有相同的百分比回报和相似的资金波动,那个具有更高的单笔交易利润的系统会是较好的选择。进行一个新品种交易时,成交量比较低,或当日交易时市场流动性较差的情况下,具有更高的单笔交易利润的测试能够抵消较多的交易费用影响。一个单笔交易利润小于50美元的系统是不太可能成功的。
交易的次数,将会表明是否有充足次数的交易结果是可靠的。对于正确性的一个大致的估量如下:
sample error=1/@ SQRT(numberoftrades)
最大的回撤。每一日都衡量着资金曲线由峰顶到谷底的下跌,给出交易的最小所需资金。尽管某一测试用标准差来衡量可能有较小的资金波动,但是因为该模型在严重的价格突变时受到相同的冲击,所以最大的回撤却是一样的。具有较小标准差的模型,在正常的市场情况下可列出一个比较能接受的资金波动,但是它也需要从波峰到波谷的相同资金。这经常备用于最糟糕的情形下应急。很不幸,最糟糕的情形却是很少会出现的。风险调整过的回报,是最重要的绩效衡量指标。这个指标用来比较在相同的风险水平下已经标准化了的回报。
获利交易百分比,提供了系统绩效一贯性的指示。更多的获利交易通常意味着更少的资金波动。获利交易的百分比例非常低,就意味着系统依赖着一些巨大的价格变动。每一种类型的系统,无论趋势跟随或反趋势交易系统,都有可辨认的模式。趋势跟随系统应有35%到45%的获利交易,而反趋势交易系统应有超过60%的成功交易。与此不同的模式需要加以注意。
恢复所需要的时间。风险类似,这个变量有一个不同的解释。它描述了价格高点之间的时间间隔。从实际的角度看,一个较大的资金回落但随后又很快恢复,比起一个较小的资金回落但非常缓慢地恢复,可能要更加有利一些。
步骤12 输出的结果将如何表达?
在500种不同的参数组合所进行的历史数据测试结果中,如果你只是观察到其中的最佳结果,将无从得知策略是否是坚韧的。本章将强调,由一个很宽范围的参数选择所带来的综合绩效,将决定系统的置信度。
在这个全局观里,绩效的模型能在最后用于参数的选择。举例来说,如果更长时间持有部位,就应该相应具有较高的单笔交易利润;其他限制风险的测试可能给出一个较好的报酬/风险比。
当那些影响交易频率或风险控制的参数由小变大时,绩效也应该做出一系列的连续改变。将测试的结果合适表达,能使最后参数的选择工作变得非常简单。测试通常以一行接一行的形式显示,来给岀第一个移动平均的速度和逐步增加的止损,如同表10-1显示的那样。如果把表格以二维或三维图形方式显现出来,结果就变得更加显著。
一个二维图形显示。一个条形图或线形图是一个二维图形,它可以显示净利润、每笔交易利润以及趋势的速度。在图10-5中,a线表明对于一个20天以下的趋势速度和很小的止损,每笔交易的利润呈波动线形。在20天以上的趋势中,结果就比较稳定。中央的灰色地区集中表现了最好的趋势。b线显示出在与a线相同的趋势速度下,使用更大一点的止损所带来的每笔交易利润。交易结果呈现一致性的改进,但使用的型是一样的。

使用小幅止损的移动平均线系统的结果(a线)是波动的。而比较大的止损(b线)改进了结果的稳定性,并也能基本保持一样的模式。
用图10-5的线形图表来描述上述这个例子是很清楚的,但如果被测试的每一个止损都被画出来,就无法清晰识别了。这时,就需要借助图10-6(a)这样的等高线图,来清楚地列出该模型。图10-6(b)是等高线图转换而成的表格,纵坐标是趋势速度,横坐标是止损。最快速的策略,由最短的趋势和最小的止损组合,在左上角给出了0.07%的每笔交易利润;最缓慢的策略和最大的止损,在右下角给出了一个0.22%的每笔交易利润。最大每笔利润的峰值则集中在中央地带。
图10-6中的白色区域表示最大的每笔交易利润,而黑色区域则是最小的。很容易发现,测试的结果随着与左上角拉开距离而越来越好,但是在图表的右侧中部附近时又变差了。如果获得的测试结果不是这些清楚的图像,而是散布的峰和谷,那么交易策略可能就是波动和具有风险的。在第6章有关止损的讨论中还有一些等高线图的例子。

(a) 这个等高线图用Mathsoft的MATHCAD导入图表中的电子表格产生。测试结果的等高线地图与山峰的拓扑图类似。利润跳跃突变的区域在一些测试里表现为不规则的锯齿状。绩效稳定的坚韧系统,通常给出的是面积较大且渐变过渡的图形。
(b)这个图表给出了一个设定好止损百分比的趋势系统的每笔交易利润。系统在趋势向上的时候买入,趋势向下的时候卖出,形成规律。在开始进场时,止损就已经预设完毕。一旦触发止损点,如果没有新的趋势信号发生,将不再进入市场。

(a) 平滑处理过的测试表格和等高线图,将使得参数选择更加容易。每个原始记录能被相邻九个格子的结果平滑。
(b) 沿着边缘是六个格子。
(c) 角上是四个格子。有阴影线的格子包含了平滑后的新结果。
使表格和图表更平滑。在大多数情况下,等高线图都能平滑地显现结果。然而,一个个孤立的峰或谷可能使得自动选择一个最好的参数比较困难。图10-6(b)的结果可以通过制作一个新的表格来平滑,这个新表格中的每个记录,都是以它为中心的九个格子记录的平均值。在边上,是6个格子的平均值,角落里是4个格子的平均值。请见图10-7。在这个新的方格中,阴影格是它周围所有格子(包括它本身)的平均值。这种二维的平滑方式对于参数选择很有帮助。对于比较大的测试或更多的平滑,可以使用5x5或7x7的格子区域。
第3部分:评估结果
使用平均值和等高线图
平均值减去标准差,就得岀了最佳选择指数,该指数意味着选择到一个能产生平均结果的交易模型的机会。等高线图能帮助定位成功的宽广区域,避免选择一个以不切实际的小的每笔交易利润为目的的系统。如果整个局面看起来不错,策略有获利能力,结果在地图上的大多数区域也显得很平滑,那么选择到一个成功的模型的可能性将比较很高。以下几个步骤可以用来验证结果是否合格。
步骤13 计算的结果正确与否?
在进行下一步之前,请检查你是否已经核对了所有的计算步骤。你是否手工核对了表格中某几行?你是否提前计算了一系列依照不同规则进行的交易的准确进入和退出价格?答案看起来合理吗?别忘了,最好的分析师都有可能在键入一个公式的时候犯错。在没有核对之前,先不要浪费时间去运行数以百计的测试。
步骤14 足够数量的交易是显而易见的吗?
在步骤11中,取样误差由下式给出:
取样误差=1/@ SQRT(交易次数)。因此,如果仅有16次交易,取样误差就是±25%。需要400个以上的交易才能保持误差在5个百分比以下,这是最小的可接受规模。但是,很少有系统能产生那么多的交易。唯一可取的选择是,确定基本的交易哲学是稳固的,然后尽量产生多一些的交易。
步骤15 交易系统是否能使大多数参数的组合都得到利润?
任意选择都能获利的可能有多大?系统模型是连续的吗?
一个坚韧的系统一定可以获得较大范围的成功。当你审查测试结果的时候,应该预期在大部分结果中见到利润,而且最佳选择指数一定是正的,提供一个至少84%的成功机会。使用平均值减去2个标准差就达到97.5%的水平,如果平均值减去3个标准差,则将达到99.5%的水平。正确率越高,则系统越坚韧。等高线图应该列出连续的图形,就像图10-6(a)中一样。图中锯齿形的峰和谷,可能是由特定规则下的测试所带来的,并不是普遍适用的。
步骤16 逻辑的改变是否会全面改进测试的绩效?
当一个新规则或计算方法被加入系统中,如果它们能改进最佳选择指数,那么结果将是坚韧的。这就保证了逻辑的改变能够使所有测试结果得到普遍的改良,而不仅仅是某个特例。在标准差不变的前提下,当所有测试的平均值增加的时候,最佳选择指数升高。或者,平均值保持相同,而标准差减小也与此类似。由一个比较小的标准差可以看出一致性有所提高,从而使得选择较为成功的参数更容易。这些例子见图10-8。
步骤17 系统在取样外数据的测试上运行得如何?
至少10%的测试数据应该要被先搁置在一边。更好的办法是,将最早的10%和大部分最近的数据先不用在测试中。在交易策略刚被制订完成时,分开测试那一部分留存的数据,并与大批量历史性数据的测试平均值进行对比。在实际交易中,即使是在最好的情况下,你都可以预料到利润会稍低,而风险则稍高。然而,模式应该与测试的结果类似。
如果取样外数据与普遍测试的结果大相径庭的话,就要加以特别注意。这种糟糕的结果表明策略可能是不对的。使用一个CHI-SQUARE测试(见第11章),将会弄明白这个失败究竟是长期绩效不可避免的一小部分,还是哪里出了问题。也许在规则或计算中有一个错误,但那应该在此错误点之前很久就已经被修正了。也有可能测试数据的时间长度太短,从而造成了波动的结果。

(a) 当绩效曲线变平且宽的时候,结果将更糟。平均的回报保持一致,但是标准差的增大使得最佳选择指数降低。
(b) 当平均值向右或向左移动,总绩效变得更好或更糟,标准差同时保持不变。
反馈的两难局面。一旦你已经使用了取样外数据来核对系统,那么你将不能重复使用那一组数据了。检查交易的结果并增加规则,可能产生一些有效的改良,但你只是在对某些“未见过的”数据改良;因此,你没有办法来进一步核对结果。因为你容纳了一些新数据并省略了一些旧数据,结果的可靠性已经下降了。
第4部分:选择特定的参数来交易
交易模型的最后一块,是利润、风险和个人喜好的综合。一项持有仓位数周的计划,可能导致最高的每笔交易利润,但不可能使投资者达到一个短期目标。每个人可能作不同的选择,最坚韧的系统提供了具有最好选择的平台。本节将提出一些关键的、与特定目标无关的问题。
通常,长周期交易的仓位给出了更可信的结果。快速交易模型的预期回报总是很难评估。图10-9显示了一个想象的趋势系统的运行结果,最快速的交易模型放在左边。绩效是波动的,尽管一个被平滑过的曲线能提供更好的期待值。在真实的交易中,6天的趋势可能获取厚利,而4天和8天的趋势则会造成亏损。
对快速和缓慢的策略进行比较后,可以列出区别:
■较快速的交易对于当前的市场模型是更敏感的。
■较快速的交易的很大部分利润被交易费用消耗掉了。
■较快速的交易可能同样具有因巨大的价格波动而造成的亏损,这些亏损将会比典型的利润和亏损大许多。
不管交易策略如何,保持长线的视角是更稳健、更可靠的方式。虽然长线策略也可能出现大的亏损,但相对于较快速的计划,长线策略通常会以较好的回报/风险比胜出一筹。当然,这并不意味着你无法找到一个表现良好的快速交易系统。当你透过不规则的结果画那条平滑线的时候,绩效一定要是高的。你也必须明白,真实的回报是波动的。图10-9中显示的测试表明,结果是可能与预期大相径庭的,尤其是对于快速交易策略。你应该预料到,真实交易回报的波动性会超过测试所显示的。

如果选择最高利润,或最髙的回报/风险比,结果通常显示为短期趋势下的跳动性的回报。在真实交易中得到这个绩效的机会非常小,平滑的曲线形状是最有可能的结果。
步骤18 最后一次测试包括了最近的数据吗?
在保留一些数据以作为取样外测试备用后(见步骤17),程序应使用所有的数据再测试一遍。如果取样外数据是最近的数据,这更是特别重要。模型一旦运行起来,应该再获得50%-10%的新数据,或在一个独特的市场模式产生时进行再测试。模型可能被小量地微调,但它也将会变得更加坚韧一些。
步骤19 你是从一个广泛成功的区域中选择的吗?
是否选择了较缓慢的策略?
从等高线图上可以看出,策略的绩效会因参数情况不同而显示出平滑或者不规则的状态。成功的区域很宽阔,显示了系统的稳定性,而且成功的区域通常与速度比较慢的交易模型有关。
如果选择较快速的策略,一定要有单笔交易的较大利润和相当高的可靠度,来抵消波动性的影响。在选择的邻近区域的最糟表现仍然是可以接受的。图10-9显示出,在从这个区域选择的时候,与短期交易有关的波动的结果,可以被认为是经过平滑处理的。
步骤20 利润平均分布在被测试的历史之上吗?
研究交易和最后模型的资金变动,来观察损益的变化是否以一个合理的模式变动。资金变动的一个标准差,或恢复元气所用的时间,以及其他的统计值,会显示出某个测试相对于其他测试的独特优势。但在你开始交易前,只有形象化的观测是足够好的。通常来说,每季度的结果对于观测持续性有一定意义。
步骤21 每笔交易的利润足够大到吸收误差吗?
当两个测试有相似的风险和回报时,最好选择具有最大的每笔交易利润的那个。较大的利润能够吸收料想不到的问题(举例来说,在一个快速市场中的价格滑失)所导致的利润损失。应当设定一个可接受的最少的每笔交易利润额度。
步骤22 历史测试的结果是否显示了由价格突变所带来的巨大亏损?
价格突变是不可预知的事件。当价格突变的时候,你的计划中应该有一个相应的亏损,尽管有一些可能触发了止损。要仔细检查对应于系统交易的过去的明显价格突变。如果系统全部从中获利,或避免了亏损,那么结果只是过度适应或刚好幸运而已。你不能期待通过未来不可预知的事件来获利。交易一个未经价格突变带来亏损的系统,风险在于该系统的风险不合理地小。这将导致较大的杠杆效应和巨大的亏损。
步骤23 你是否已经将回报的风险调整到一个你可以接受的水平?
报酬/风险比将绝对的绩效值变成相对的回报率,使我们可以对每个模型作公平的比较。交易者一定要建立自己可接受的风险水平。比方说你决定,你希望在任何一个月亏损超过10%的概率仅为1%,那么你的交易系统必须给出一个少于3.3%的风险(每月资金改变的1个标准差)。三个标准差就是10%。请记住,以每月数据为基础的资金已经被平滑过了。你可以预见到,有可能会出现较大的月中资金波动,有时幅度会达到50%。
第5部分:实战交易和观测绩效
再多的测试也代替不了实战交易。一旦第一个仓位被建立,你可能就会发现诸多问题:在测试中设定的交易费用与现在实际支出的比起来太低了;交易所收盘之后,你根本无法购入系统要求买入的东西;或者一个价格突破信号带来了流动性缺失的跳空。观察每一个与真实交易相对应的系统信号,可以提供一些信息以便继续改进测试。
步骤24 你是在使用经过测试的规则吗?
如果在测试中使用的规则不被遵循,那么实际交易的结果往往和测试结果不同。交易费用和市场流动性状况也可能使一些交易无法成交。通常,这是买卖手法的技术问题。如果等到计算机给出信号之后再动手,实际市场价和计算机在理论上的信号已经很不同了。这可以通过预期计算机信号来解决,你必须在计算机信号产生的同时就下单,第11章显示了如何预期一个计算机信号。
步骤25 你正在交易的是被测试产品的同类吗?
虽然测试使用一个连续的或“永远的”合约更方便,但测试结果将与你交易现货或期货合同的实际结果不同。请确定你正在交易的是已经被测试过的产品,你已经测试了你正在交易的产品。
步骤26 你正在观测系统与实际的进入退出位之间的差别吗?
想要理解该如何测试一个策略,需要先辨识测试结果和实际交易结果为什么是不同的。监测理论上的信号与实际的执行情况,以及不能成交的交易的百分比,然后用这些改良的值再次测试策略,你将能及时列出非常接近现实的测试结果。
其他重要的实际指导方针
最认真细致的测试,也无法列出实战交易状态下系统将会如何运行。从前述的指导方针出发,经验说明下列要点值得注意:
■比较慢速的系统。那些使用较长期数据来评价的系统,运行起来比起快速模型更加接近预期的结果。
■远离那些显示不出风险的系统。缺失风险说明过度适应,或者这其实是不可能在交易中被再次重复的好运。
■视测试结果为一个平滑过的线条。利用一个坚韧的系统进行交易,预计好的结果会趋向于差一些,差的结果会趋向于好一些一一实际交易时都会向着平均值有所移动。
■避免可靠性较低的系统。这样的系统,其绩效是依赖于某几笔特殊的交易,并不稳定。
■避免只进行寥寥几笔交易的系统。它们可能还不能够列出正确的结果图形。
更多的数据给岀更可预期的结果
需要再次强调:使用较多的数据来进行测试是非常重要的。更多的数据包含了更多的价格模式,如持续变动和价格突变。有观点认为,旧的数据与当前的市场缺乏联系。这在一些特定的情况下,对于某些程序来说是有道理的。但为了保险起见,用更多数据总是比更少数据要安全一些。
在过去3年数据上测试的一个系统,将无法经历最近10年间的最大价格突变,而你却必须预期是否有更大的价格突变将会到来。如果你只依照近期的风险状况来决定投资策略,你将无法长期生存。交易的最大失败是保证金不足,这也是对于盲目认识风险者的最直接后果。如果最近的数据对利润最大化是最有利的,那么相应地,较多的历史数据对于准确的风险评价也是最好的。
对一个策略进行两次测试是比较合理的——针对参数选择作一次,针对风险衡量再作一次。因为较长期数据的测试会带来较低的利润和较高的风险,就不那么被人看好,选择较短测试间距的高回报和低廉风险是更加令人愉快的。但事实是,较长的测试对真正的交易结果更具有代表性。不理睬这些结果并不会带来更髙的利润。
由知道答案开始
计算机测试的最佳用途,是验证一个理论的效果。如果你的设想很好,然后测试各种不同的时间间距,进入与退出的条件,以及风险管理参数,从而得到合理而稳定的回报。也可能你的理论对于短期是好的模型,但对长期来说则不理想。不过不管如何,计算机测试都可以验证你的想法。一个以对市场的理解为基础的概念——无论经济的、统计的还是价格形态一一是建立一个系统的卓有成效和最具价值的基础,也是最好的开发交易程序的方法。也有人这样做:输入一系列指标、规则和价格序列,然后让计算机运行,直到产生一个可获取利润的结果——用这种方法去建立一个成功的交易系统,成功的机会是非常低的。
忽略的错误
“幸存者偏向”和事先没有准备好应付最糟情况的情形,通常被称为忽略的错误。对于分析师来说,忽略常表现为数据中一个无法察觉的圈套。相比之下,计算少见的价格形态和价格突变比起寻找价格无法反映的潜在危险要容易得多。
幸存者偏向。在选择特定的股票、基金和投资管理人的时候,人们经常忽略了最糟糕的情况——公司倒闭或者投资管理者歇业。一个幸存者偏向的典型例子,是在对于投资管理人的评价中:带来最高利润的那个经理,可能也有最高的风险。如果只讨论现在那些经理的报告,你将无法知道所有存在较高风险的经理们都已经由于亏损而被迫出局了。这种比较方式,只能让你看到低得不切实际的风险。
同样地,对于特定股票的选择,意味着那些公司没有显示出失败的迹象。甚至是最大的公司也不再像我们曾经设想的一样安全。DrexelBum-ham.E.F.Hutton.Stotler和宾夕法尼亚州铁路(还有Penn-Cen-tral,曾经拥有最多资产的美国公司)证实了管理失误和诉讼连最大的公司一样能毁灭。IBM、汽车巨人和保险公司不再看起来不可侵犯。如果你只研究胜利者,将难以适当地评估风险。
最糟的情况。更具难度和更重要的是,要有能力构想“最糟的情况”。什么因素可能导致一个市场去创新高、新低,或者两倍于历史最高水平的波动率?如果这种情况真的发生,你将采取什么步骤控制风险?或者,你想把那些品种从你的投资组合中去除掉吗?如果价格移动到了历史数据记录之外,交易策略仍然能正常运行吗?以前并不关联的品种,将会一起动作吗?
这些情形对于风险控制来说是很关键的。通常,我们并没有对这些假设情况立竿见影的答案,只具备对自己的策略能弹性适应一般市场改变的信心。这是不够的,一次暴跌会带来强迫性的资金需求,导致投资者兑现其他不相关联的资产来支持亏损的仓位。这将导致在很多投资领域中的资金回撤。
数据的完整性
总是把一系列历史数据假设为完全正确无误,可能会导致你浪费大量的时间。所有的数据应该在被使用前作一个总的误差检测。即使来自可靠数据供应商的电子数据,仍可能存在问题。测试和评估一个系统需要一定的时间,在几个星期的工作后,发现有一个数据误差,这意味着所有的测试必须要从头再来——下面几个简单便捷的步骤就能避免这种情况。
1.观察一个包括所有数据的价格图表。任何的严重数据问题都会是非常明显的。
2.如果你有测试策略的软件,确认那些开盘、最髙、最低或收盘价比前一价格大于3%的数据。一个个观察那些数据,大都应该是错误的。
3. 当最后的模型已经选好之后,观察每个交易的盈利和亏损。对于最大的损益加以关注,核对其进入和退出市场的价格。
修补问题
交易策略借助普遍性而成功。大多数交易计划是可行的,因为它们带来的利润大于亏损。一个普遍化或统计化的方案,其问题在于无法判断一些特殊的情况,但是交易者却能知道大的价格变动的理由。
每一个主要的运动或者价格突变都是可以被解释的。通过认真仔细地研究价格变化的原因,剖析造成较大亏损的价格形态,将指标和规则进行组合与综合,能够对亏损加以控制,从而获得一个较好的利润模式。但是,下一个大的变动总是与以前不同的。突变行情在回顾时可能解释得很清楚,但却很少能配合一个预先规则下来的模式。解释每一个亏损对于人的智力来说是有满足感的,但并不能减少交易风险。将每个例子固定在它自己的特色上仍然是一种过度适应。
不要过度解决问题。一个年轻的分析师会尝试从一批精确到小数点后2位的数据来计算出小数点后4位的答案来。其实,你无法产生比你现有的数据更精确的数据。技术分析模型是以价格形态或统计特征为基础的,不依靠于某个单一的价格运动。它们依靠大量的交易来体现效果。微调一个移动平均值,可能产生与愿望相反的结果,因为偏离了普遍适用的方向。一个特别的趋势速度虽然能避免某次巨大亏损,但无法防止将来的其他类似亏损。过度解决问题或者过度测试系统,将带来不切实际的系统绩效预期。
准确度和测试用时。对于大多数系统测试,在正确率和计算用时之间存在正相关的关系。用更多的时间计算,结果就更好。测试指数平滑常数的步长为0.1,0.01或0.001是否会更好?从0.1到0.9的范围内,基于不同的步长,可以进行10、100或1000个测试。但是,进行1000个测试是浪费时间,正如在总投资中以5美元为一个增量测试止损一样天真。
如果连续三次测试中,有一次显现了两倍的利润,这很重要吗?如果你仍然在测试中寻找最高收益,而不是寻找最佳系统或等高线,那么你就是在浪费时间。趋势有一种使数据平滑的倾向。微调一个趋势与数据平滑,这两个概念并不是一致的。如果你选择一个154天的移动平均值,而不是一个153天的平均值,只是为了避免一个大的亏损,那么你对于系统内在的正确性就存在着一个基本的误解。
强有力的新式高速计算机现在已经可以使大批毫无意义的测试运行起来易如反掌。当计算机速度跟不上或资源有限制的时候,还是要弄清楚花费在机器上的每个小时为何是有意义的。“粗线条”的方式可能仍然是有效使用时间和避免过度适应的好办法。
小 结
寻找交易策略的方法,会影响你成功的可能性。使用有根据的步骤和统计方法是安全而稳健的。这首先包括一个容纳尽可能多的独特情形的长数据系列。除此以外,平均所有测试的全局统计,提供了衡量系统坚韧度的优秀尺度,同时也避免了寻找高利润结果的诱惑。哪个策略或新技术是最好的,当使用平均结果时,就一目了然了。