第2章 如何开发具有一致性的策略
一个可交易策略的开发包括两个步骤。第一步为确定该交易员所希望获得的风险收益特征,第二步为开发一个能满足这些要求,并在真实交易时的结果会与回测时一致的策略(具有一致性的策略) 。本书余下的大部分内容都在强调,如何开发出能满足你交易目标的策略,而本章则会强调一些更为重要的东西:在开发具有一致性的策略时会遇到的陷阱。已经有很多人介绍过"如何来开发"的方法,本书只会介绍我的方法,而这是确保你能开发出具有一致性的策略的唯一方法。这种方法会尽可能地减小开发中的曲线拟合,并让开发中关于交易的假设尽可能贴近现实。显然,最大的陷阱是曲线拟合。本章中会使用统计学来帮助厘清一些概念,不要因为有数学,就跳过这些内容。这都是些重要的概念,如果你不能理解它们,你就总会开发出一些没法在真实市场中交易的策略,并且永远不知道为什么。
曲线拟合
当你在开发一个交易策略时,你会用历史数据来测试这些交易想法,看看它们是否会盈利。如果你有无限量的历史数据,那你就可以确信,如果该想法在历史数据中能够盈利,那它在未来也会盈利。不过我们永远都不会有无限量的数据。在最好的情况下, 我们也只会有几十年的数据。对于"无限数据集"中的一个很小的子集,我们就不能说,回测中会盈利的想法,在未来就一定也能盈利。这一开发问题还常被一种被称为"曲线拟合"的行为而加剧。曲线拟合可以被定义为:要么是在对一个相对较大的数据集中开发策略时过度使用了交易规则、参数、过滤器和止损等,要么是在对一个相对较小的数据集中开发策略时合理使用了交易规则、过滤器等。
我们可以就这两种情况,都各给出一个曲线拟合的例子。就使用相对较大的数据集时的例子而言,有一个真实的故事。我认识的一个交易员,他在九十年代末用45 分钟K 线开发了一个标普500 的交易系统。他用1984一1998 年的标普45 分钟历史K 线数据进行分析。在这段测试期的大部分时间里,标普500 期货都会在东部时间9 点30 开盘,并在东部时间16点15 分收盘。因此在这15 年里,每天都会有9 个45 分钟K 线。总共就是34000 个历史K 线数据。用所有这些数据他开发出了一个在这15 年里只有不足90 笔交易的交易系统。在这些交易中,只有很少的交易会亏钱,单笔交易平均盈利超过2000 美元。他通过计算认为, 使用这个策略,他每年都会让起始资金为10000 美元的账户翻倍。几年后我又见到他,于是问他的系统表现得如何。他挠了挠头后说道,他不知道哪里出了问题。当他一开始交易这个系统时,它就"停止工作"了。我认为,导致这一结果的真正原因是,他对这个相对大的数据集使用了太多的条件、过滤器等,这让他分离出了90 个会有很高盈利的短时间期限。
对一个小数据集使用正确的开发方法所导致的曲线拟合
就使用一个相对小的数据集而产生的曲线拟合例子,可以看一看20 世纪80 年代的瑞士法郎。之所以选择这个时间段,是因为瑞士法郎在20 世纪80 年代有很漂亮囱趋势。假设我们用移动平均线来确定趋势。如果今天的n 日均线高于昨天的,趋势就在向上,因此你买入一手合约。你持有这个头寸,直至今天的n 日均线低于昨天的。当这种情况发生时,你把多头平仓,并开空仓。这被称为反转系统。你总是持有头寸,要么多,要么空。表2-1 显示了当n 日均线从10 天变化至100 天(步长为10 天)时的交易结果。

该表显示出,瑞士法郎在20 世纪80 年代的趋势有多强。每个移动平均点都会有显著的盈利。如果我们选择50 天移动平均线,并添加一个n 日回顾过滤器来改善结果。趋势交易的一个原则就是只对长期趋势的方向交易。一个n 日的回顾过滤器就是一种这样做的方法。你回头看看n 天之前的数据,如果今天的收盘价高于n 天之前的收盘价,趋势就在向上,那你就只做多头交易,而如果今天的收盘价低于n 天前的收盘价,你就只做空头交易。当我们把这个逻辑添加到我们之前的50 天反转系统中,就会得到表2-2 中的结果(回顾期从60 天变化至150 天)。

让我们选择110 天回顾过滤器作为原系统的增加部分,接下来让我们增加一些风险控制措施。让我们使用"灾难性止损" (损失"太多" )来退出交易。当我们持有多头或空头时,把灾难性止损设置在距离入场点位X 美元处。如果该止损被触发,我们就不再做相同方向的交易,直到出现反方向的入场信号。有两种方法来实施这个止损。第一种方法是,你可以用"除非撤销否则一直有效" (good until canceled) 指令来设置止损。在这种情况下,该止损单会一直在市场中(当然需要在开市时间,没有什么会24 小时17 天一直交易的) 。第二种方法是,你可以等某一天的收盘价超过止损价时,就在第二天开盘时出场。在这种情况下,你的损失可能会超过止损额,不过也会有两方面的好处。第一个好处就是该止损不会在市场不活跃的时间段内被触发;几乎所有商品的买卖价差,在破间都会扩大,有时会非常大,如果是活跃止损单的话,可能会一下子亏很多。另一个好处是,许多情况下.......活 跃止损单都会在日内被触发,而在收盘时又回到止损价之内。在这种情况下,你的交易会继续存在,有可能会变成盈利。表2-3 显示了用第二种止损方法时的交易结果,止损额从250 美元变化至2000美元。

显然,最佳的止损额为750 美元。
该系统具有以下特点:
● 如果回撤是合理的,这将是一个非常好的系统。平均年化收益为8500 美元,而每手合约所需要的保证金平均仅为3000 美元。如果有个系统能产生这样的交易结果,我会很愿意去交易它。
● 该系统很纯粹和简单:一个人场条件,一个过滤器和一种风险控制逻辑。我想不会有人会认为它有太多的变量,或者被过度优化了。
● 750 美元的止损相对较小,因此即使你连续止损了两次或三次,也不会对你的账户有太大的影响。
● 亏损交易数比盈利交易数多这一事实,并不是我所关心的内容。平均来看,大多数长期趋势跟随系统都只有30%-45% 的胜率。
● 单笔交易的平均盈利为1326 美元,这已经足够好了。因为滑价和手续费都只占盈利的很小比例。
你知道,这是一个曲线拟合的例子,那么后续结果会怎样呢? 表2-4显示了这个系统在1990 年至2010 年间交易瑞士法郎的结果。

该系统在20 世纪80 年代的年平均盈利为8500 美元,但在后续的21年里变成了只有1500 美元。该系统显然适合瑞士法郎在20 世纪80 年代的超级趋势行情。在随后的时间里,法郎变得不那么"有趋势"了。我们曲线拟合在了一段相对小的数据集中,尽管我们并没有给该系统添加大量的规则、过滤器等。
曲线拟合与开发样本中所产生的交易笔数有关
我们对比下这两个曲线拟合的例子,其中有一个相似之处:它们在开发样本中所产生的交易笔数都相对较小。我们可以假设,曲线拟合与开发样本中所产生的交易笔数有关。我们知道,如果我们有元限笔的交易,那我们就能了解这些交易的全部信息,也就不存在曲线拟合了。问题在于: 需要多少笔交易才能"足够"代表这个无限的样本呢? 对于这个问题,我们可以用一个实验来说明。选择一种商品,生成大量的交易笔数,从这个大样本中抽取一个较小的样本然后看这个较小的样本需要包括多少笔交易,才能让其统计特征与大样本( "无限的样本" )基本一致。如果该假设(指曲线拟合与开发样本中所产生的交易笔数有关的假设。一一译者注)是正确的,那么我们将看到,随着小样本的样本规模变得越来越小,其与大样本的差异会越来越大;而随着小样本的样举规模变得越来越大,其与大样本的差异会越来越小。图2-1显示了这种想法。

关于该方法的唯一争议是如何界定"结果存在差异" 。幸运的是,统计学家们已经帮我们解决了这个问题。他们的方法被称为标准误差。你可以计算出这个无限样本的价值的平均值(单笔交易平均盈利) ,然后从中随机抽出不同时间的n 笔交易。然后计算这些小样本的平均值,以及这些平均值的标准差,你就可以得到标准误差。我们可以用一个例子来说明这个过程。
假设你用一个策略生成了无限多笔交易,这个无限笔的样本的单笔交易平均盈利为100 美元。你决定从中随机抽取10 笔交易,然后看它们的结果是否与无限样本的分布一致。图2-2 显示了随机抽取5 次,每次抽取10笔交易时的结果。

每次抽样的单笔交易平均盈利为:
样本1 的均值: 97.94
样本2 的均值: 104.6
样本3 的均值: 100.17
样本4 的均值: 101.43
样本5 的均值: 98.89
这5 个单笔交易平均盈利值的标准差,也就是标准误差为2.59 。现在来看看这个数值代表了什么涵义。从统计上说,68.3% 的样本都介于无限样本均值100上下一倍标准差的范围内。0.683 乘以样本数量5 ,得到4.098 个样本。这意味着,当抽样次数为5 时,应该有4.098 个抽样结果的均值位于97.41 和102. 59 之间(均值100 减去一倍标准差2.59 得到97.41,均值100 加上一倍标准差2.59 得到102.59) 。在我们的例子中,有4 个抽样结果的均值位于该区间内,有1个抽样结果(104.6) 在区间之外。如果我们扩展这个例子,进行数百次抽样,每次抽取10 笔交易,就会出现下面的结果:
● 68.3% 的样本均值会位于100 减去1 倍标准差和100 加上1 倍标准差的区间内。
● 95.4% 的样本均值会位于100减去两倍标准差和100 加上两倍标准差的区间内。
● 99.7% 的样本均值会位于100 减去3 倍标准差和100 加上3 倍标准差的区间内。
对于一个交易员而言,这意味着,如果你开发出了一个策略,其单笔交易平均盈利为100 美元,标准误差为2.59 美元,那么你就有68.3% 的信心认为,该策略的单笔交易平均盈利的真实值会在97.41一102.59 美元之间。并且你有99. 7% 的信心认为,单笔交易平均盈利的真实值会在92.23-107.77 美元之间。
这就是标准误差的原理不过在真实世界中,你没法进行数以百次的抽样。你只有一个样本,也就是你的回测结果。这种情况下该怎么做呢?别担心,有一个方法可以只用一个样本,就能估计出标准误差。计算你回测中各笔交易的标准差,然后除以样本规模的平方根。下面是我之前的5次抽样(每次10 笔)的计算结果:
样本1: 均值=97.94 ,标准差= 10.26 ,
标准误差= (10.26/√―10) =3.25
样本2: 均值=104.6 ,标准差=9.28 ,标准误差=2.94
样本3: 均值= 100.17 ,标准差=11.19 ,标准误差=3.54
样本4: 均值= 101. 43 ,标准差= 11.34 ,标准误差=3.59
样本5:均值=98.89 ,标准差=7.97 ,标准误差=2.52
根据先前使用所有抽样结果来计算时的结果,我们知道,标准误差应该为2.59 。因此只用一个抽样结果所计算出的标准误差不会太精确,但都比较接近。
在我们离开这些假想的例子去交易之前,还有另一个概念需要介绍: 无限样本的方差。在之前的例子中,我们的5 次抽样(每次10 笔)结果都与无限样本的均值100 比较接近。每次抽样的结果,与均值100 都没有离得太远。这是因为我们在生成数千次交易以形成无限样本时,设置的标准差为100 标准差为10 意味着在随机生成的交易中, 68.3%的交易会位于90-110 的区间内( 100 减去1 倍标准差,以及100 加上1 倍标准差) ; 95.4% 的交易会位于80-120 的区间内( 100 减去两倍标准差,以及100加上两倍标准差); 99.7% 的交易会位于70-130 的区间内(100 减去3 倍标准差,以及100 加上3 倍标准差) 。真实交易的分布不会这么窄。亏损时可能会亏数百甚至上千美元,而赚钱时也会这样,甚至更多。与我们示例中60 美元的3 倍标准差范围(当选择3 倍标准差时,区间上限与下限之差为130-70=60。一一译者注)不同,真实交易分布的变化范围可能为数千美元。基本上,基准分布的标准差(或者方差)越大,标准误差也会越大。下面的例子与先前的例子类似,只是无限样本的标准差不再为10 ,而为500 。这会给我们一个为3000 美元的3 倍标准差区域,99.7% 的交易会位于单笔交易平均盈利(或交易均值)上下1500 美元的区间内。类似的,我们从这个均值为100 美元,标准差为500 美元的"无限交易池"中,进行了5 次抽样(每次10 笔交易) ,结果如下:
样本1: 均值=263.29 美元,标准误差= 165.81 美元
样本2: 均值= -31.05 美元,标准误差=151.96 美元
样本3: 均值= -71.57 美元,标准误差= 95.18 美元
样本4: 均值=198.69 美元, 标准误差= 148.14 美元
样本5: 均值=275.74 美元,标准误差= 195.65 美元
平均均值= 127. 02 美元
由于平均均值为127.02 美元这组抽样结果比均值为100 美元的无限样本要好一些。上面的结果表明,当无限分布的方差相对较大时,标准误差也会扩大。当标准差为10 时,标准误差为2.59 ,而当标准差为500 美元时,标准误差现在的范围是95.18一195. 65 美元。
再强调一遍,这个结果意味着,如果某位交易员的回测结果产生了10笔交易,平均损益为275.74 美元,标准误差为195.65 美元(即样本5) ,那么他会有68.3% 的信心认为,该策略的单笔交易平均盈利的真实值会介于80.09-471.39 美元之间。你或许认为这个结果还不错,想赌一把,就交易这个策略。但你还需考虑到,你在回测中可能会得到样本2 的结果。在这种情况下,样本均值有68.3% 的可能性会介于-183.01 和120.91 美元之间,这就没什么吸引力啦。
这个例子可以用来说明我们都会面对的另一个问题。如果把这5 次抽样均视为单独的回测结果,可能在回测中对某个参数的值进行了细微的改变,所以导致了不同的结果。我们很可能会认为,样本1 和5 的结果对我们有利,而样本2 和3 则对我们不利。但这些结果其实都来自于同一个分布。因此,如果样本规模很小,而标准差又相对较大,我们就很难做出判断。
用真实交易数据对曲线拟合与样本中交易笔数有关的假设进行检验
现在回到主题,让我们用真实交易数据来对我们的假设进行检验。我选用了黄金,这是因为我有黄金自1975 年以来的全部日频数据。为了生成大量的交易,我使用了20 日移动平均反转系统。当今天的20 日收盘价平均值高于昨天的平均值时,该系统会做多; 而当今天的20 日收盘价平均值低于昨天的平均值时,该系统会平掉多头头寸,并做空。下面是该策略的一些回测结果:
盈利交易数: 233
亏损交易数: 450
总盈利: 22400 美元
单笔平均盈利: 32.80 美元
单笔交易最大盈利: 16230 美元
单笔交易最大亏损: 5150 美元
所有交易的标准差: 1884 美元
对于我们的分析而言,该策略是否是一个可交易策略并不重要。我们
想知道的是,样本中应该有多少笔交易,才能让样本结果与总体结果比较
接近。为了做这样的分析,我们把所有683 笔黄金交易的损益都放在一个文件袋里。然后从中多次随机抽取相同数量的笔数,并计算每次抽样的均值。对于每个样本规模,我们都进行了10000 次抽样。这10000 次抽样的均值的标准差被用来计算该样本规模的标准误差。比如样本规模为90 笔交易,那就从这个包含有693 笔黄金交易的文件袋中,随机抽10000次,每次抽90 笔交易。每抽样一次,就计算抽中的90 笔交易的平均值,共计算10000 次。然后再计算这10000 个平均值的标准差,并用标准差除以90 的平方根来得到标准误差。这个计算的结果约为200 美元。图2-3 显示了不同交易笔数时的标准误差。样本规模被限制在300 以内,这是因为我们的交易文件袋中一共也只有683 笔交易。

计算标准误差的过程为:对于每个样本规模,我们都抽出了10000个样本,计算每个样本的平均值,然后计算这10000个平均值的标准差,进而计算得到标准误差。样本规模从10 笔交易递增至300笔交易,步长为10。图2-3 显示,随着样本规模增加,标准误差在下降。这与我们的假设是一致的。但样本规模为300时,标准误差约为100美元。此时仍与真实分布有较大偏差。此时,1 倍标准差区域为从均值32.80 美元减去100美元,即-67.20 美元,到32. 80 美元加上100美元,即132.80 美元。显然,为了更为准确地定义基准无限样本,需要更大的样本规模。不过如果我们合理的限制抽样时的样本规模,那这683 笔黄金交易就足以作为我们的"无限样本" 。
为了得到更大的元限样本,我们可以使用商品系统公司( Commodity Systems Inc. INC) 所提供的37 种商品自发布以来的全部连续合约数据。通过使用这些数据,20 日反转系统在回测中产生了如下结果:
盈利交易数: 7875
亏损交易数: 17107
总盈利: 845713 美元
单笔平均盈利: 33.85 美元
单笔交易最大盈利: 99641.20 美元
单笔交易最大亏损: 12800美元
所有交易的标准差: 2316 美元
图2-4 显示了此时样本规模与标准误差之间的关系,交易笔数从20增长至1000 ,步长为20。

图2-4 显示,即使样本规模达到1000 笔交易,标准误差仍相对较大一约为75 美元
对于上面的讨论,交易员可以从中学到一个实践上的经验。你回测结果的方差越大,你的样本规模就应该越大,这样你才会有是够的信心认为,该回测结果是对该策略在未来交易结果的真实反映。在第一个例子中,交易样本的标准差为10 。当我们从这个分布中进行10 次抽样时,所产生的标准误差约为2.5 ,而当交易样本的标准差增至500 时,同样进行10 次抽样,标准误差就增长至95-195 的区间。根据上图(图2-4) 我们知道,当交易的标准差增长至2316 时,标准误差将约为500。对于短线和长线交易员而言,这些事实既有好消息,也有坏消息:
● 短线交易策略会有更小的平均盈利(坏消息) ,但平均亏损也会责小(好消息) 。所有交易的标准差会相对较小,因此标准误差也会相应较小,此时很少数量的样本就可以避免曲线拟合(好消息) 。
● 长线交易策略会有更大的平均盈利(好消息) ,但平均亏损也会更大(坏消息) 。所有交易的标准误差会相对较大,因此标准误差也会相应较大,此时就需要更多数量的样本来避免曲线拟合(坏消息) 。
对曲线拟合进行检验
统计学的部分结束了。上一节的重点是想说明,对于大多数交易系统(我没有说所有交易系统,不过我认为应该是所有) ,都需要在回测中产生数以百计的交易笔数,才能避免曲线拟合效应,这样才有信心认为,真实交易会与回测中所使用的参数相匹配。我不推荐大家去对自己的系统做统计校验,以看其是否存在曲线拟合。我有一个相对简单和稳健的方法提供给大家,以帮助你判断某系统在开发时是否避免了曲线拟合。这个方法是"构建、重新构建和比较",简称为BRAC 。该方法会使用你准备交易的品种的所有历史数据。在构建交易策略时,对你所实施的步骤和所使用的选择逻辑进行跟踪,如果你构建出一个表现还不错的策略,你就完成了"构建"部分的工作。下一步,剔除部分最新的历史数据。如果你使用了20年的日频K 线数据,你可能需要剔除最近一年的数据。然后再用这个相对较小的数据集来"重新构建"你的交易策略,使用你在第一次构建策略时所使用的相同步骤和决策标准。最后一步就是把所有历史数据导入到这个"重新构建"的策略中,并将其结果与先前第一次构建出的策略结果相"比较" 。如果两者的表现比较接近,你就有较大的信心认为,你的策略会在真实交易中有效。
BRAC 示例
现在使用我们之前在讨论曲线拟合时所使用过的37 种商品数据,来构建一个移动平均系统,就像我们在本章之前讨论瑞士法郎曲线拟合例子,所构建的交易系统一样。在那个例子中,我们使用了下列的步骤和相应的选择逻辑:
● 变化移动平均的天数,从10 变化至120,步长为10 。选择能产生最大盈利的天数。
● 变化回顾过滤器的天数,从10 变化至120,步长为10 。选择能产生最大盈利的回顾值。
● 变化灾难性止损的值,从250 美元变化至2000 美元,步长为250美元。选择能产生最大盈利的止损值。
当实施了这三个步骤和相应的判断逻辑,我们就能得到表2-5 所示的结果。该表使用了CSI 自发布这37 种数据以来至2010 年末的全部数据。

在该步骤中,能产生最高盈利的天数为100,这就是我们要选择的值。表2-6 显示了当我们增加一个趋势回顾过滤器时的结果,此时只有与长期趋势方向相同的交易,我们才会执行。

当回顾过滤器为200天时,能产生最大盈利,因此我们就选择该值。现在让我们增加一个灾难性止损。表2-7 显示了这些结果。

2∞0 美元的灾难性止损能产生最大盈利,因此我们就选择该值。
对所有的数据,该系统能产生2103 笔盈利交易, 4326 笔亏损交易,整个测试期内的净盈利为2555125 美元。对于测试期的最后一年(2010 年1 月1 日至2010 年12 月31 日) ,该系统有以下的盈利能力比较基准:
盈利交易数: 101
亏损交易数: 205
总盈利: 333407 美元
现在让我们回过头来,使用相同的步骤和判断逻辑,重新构建该策略,只是把最后一伍的数据从回测中剔除掉。表2-8 至2-10 显示了在每一步中根据判断标准所选择的参数值。

可能会让你感到有些意外,每一步所选择的参数值与之前用全部样本时的选择是一样的。我对此并不奇怪,因为如果你开发的某个策略有数以千计的交易笔数,那么最优的参数集就不会每年都变。我以前开发过一个被称为偏差( Aberration) 的策略,它交易由35 种商品构成的篮子,最优的参数值为80 天的数据。25 年过去了,它仍是最优的参数值,现在我用它来交易一个由全球57 种商品构成的篮子。因此在这个BRAC检验中,第二步中所剔除的一年数据会产生的交易结果,与之前用全部数据来回测的结果一致。在后续的章节中,我们将会开发更多的策略。我们会对一些策略进行BRAC 检验,其中一些会存在曲线拟合的特征。不过请记住: 因为我们没有无限的数据集,并且我们是在用历史数据开发策略,因此总会有一些曲线拟合特征。关键在于,应尽可能的让曲线拟合效应最小。
BRAC 检验与样本外检验
有趣的是,有些东西被无限拔高,被狂热崇拜,被视为某个特定问题的唯一和终极解决方法。在交易的世界里,我认为以下三种说法就可以归为此类:
1. 蒙特卡洛分析能够告诉你,你的策略将会如何,以及最糟糕的回撤会是怎样。
2. 背离信号是一个非常强的人场技术。
3. 判断一个好系统的唯一值得信赖的方法是样本外检验。
我会在本书的其他部分讨论我对蒙特卡洛分析和背离信号的看法,这里我们主要讨论样本外检验。在研讨会时,我常被问及的一个问题是,在交易该系统之前,你进行了多少样本外检验? 我一点都没有做。如果开发的系统通过了BRAC 检验,那它就与我在交易的其他系统是一样的,我就会去交易它。样本外检验的主要问题在于,没有迹象表明,样本外检验有用。假设你用可获得的全部数据来开发了一个系统,然后你的样本外检验是"观察它在明年的交易结果。"你做了长达20 年的回测,其中产生了数以千计的交易,年平均盈利为20000美元,年平均回撤为10000 美元,最大回撤为20000 美元。当你观察样本外一年的结果时你发现你亏了5000美元,回撤了15000 美元。这是否就说明策略在样本外检验中失效了呢?我认为要视情况而定。假设该策略在最近5 年的交易结果如下所示:
时间 盈利 最大回撤
5 年前: 30000 美元 5000 美元
4 年前: -5000 美元 15000 美元
3 年前: 40000 美元 5000 美元
2 年前: 15000 美元 15000 美元
1 年前: 20000美元 10000美元
平均 20000美元 10000 美元
如果你的样本外检验发生在4 年前,那5000 美元的亏损和15000 美元的回撤就会是"正确的"答案。不过由于这个检验结果,大多数人都会放弃这个策略。
如果你的样本外检验方法是用20 年中的19 年数据来构建策略,然后把'预留的1 年加回去,再看看策略的表现。那你就错过了关键的数据。数据的缺失是开发过程中的一个大问题。如果我们有无限的数据,那这一章根本就不会存在。为什么还要放弃掉一些数据来让这个问题更加严重呢?
BRAC 方法则通过提供不包括在开发样本中的数据的业绩表现参考,并让你使用所有可获得的数据来作为开发样本,来解决了这两个问题。
关于曲线拟合的其他补充
我认为存在一个阴谋,来让交易员们陷入曲线拟合的陷阱中。这个阴谋是由那些销售开发软件的公司所炮制的。几乎所有软件都会提供一个"范图",你可以在窗口中添加一个或多个图,然后用该图中所标示出的数据来开发策略。这会导致你开发策略时所使用的数据量太小。此外,这种通过点击来增加交易规则、止损和过滤器,并对它们进行优化的方法,会让使用者认为,"这就是该这样使用它们的方式" 。我之所以称其为阴谋,是因为那些软件公司们知道,这种方法会导致曲线拟合问题,但在两周的试用期( 卖出这些软件的公司一般都只提供两周的试用期)内,消费者使用这种范图,很容易就可以"发现交易的圣杯" 。
更好的做法是,所提供的软件包能够允许使用者对相同的时间使用不同的数据,但如果是这样的话,你就很难找到一个可交易策略,而你在广告中所看见的交易模式,其实际效果也不会有广告中那么好。
进行有效回例的其他障碍
如果你开发了一个交易策略,结果在实际交易中失效,90% 的可能性都是因为你在这些数据中对策略进行了曲线拟合。但还存在其他可能导致该问题的因素:
● 假设K 线中的每个点都是可以交易的点。
● 在同一个K 线中使用了双边交易指令。
● 对交易费用的现实性考虑。
● 偏爱限价指令。
这些障碍的相对好处在于,如果你的单笔盈利目标较大,这些障碍的影响会减小。如果你用日频K 线来开发策略,并且希望单笔交易盈利500美元以上,那这些障碍可能会降低你的实际收益,但并不会让策略失效;而如果你想每天交易2-3 次,每次赚50 美元,那这些障碍就有可能会让策略失效,使其变为一个亏损的策略。
假设K 线中的每个点都是可以交易的点
如果你使用日频K 线,某个股票在某日的开盘价、最高价、最低价和收盘价分别为101 、101 、99 和99 。你的回测平台可能会假设该日有200个可交易点: 从101 到99 的每分钱处均可以交易。在现实中,这个股票可能在开盘时为101,然后马上跌到100.5,再然后则以一分钱的价格变化,直至收盘时为99 。如果你的策略会在100.95 时发出空头止损指令,你的软件会给你这个价格,但在现实中,你的实际成交价为100.5 ,甚至更低。如果你是一名长线交易员,这0.45 美元的价差不会对你有太大的伤害。但如果你在做短线交易,单笔交易就只想赚0.10 美元,那这0.45 美元就是你4.5 笔交易的盈利。解决这一回测障碍的方法是,先用日频K 线来开发策略,但当你发现了某个感兴趣的策略时,再用更小周期的K 线(比如5分钟K 线、1 分钟K 线和分笔数据(分笔数据(tick data) 是指每笔交易的数据,而不是某个时间周期中的信息加总。在中国,并没有真正意义上的分笔数据,都只是提供某个固定时间间隔的截面数据(包括最新的成交价、买报价、卖报价、买报量、卖报量、该固定时间间隔内的所有成交量等),证券交易所行情刷新频率为每3 秒钟一次,期货交易所为每500毫秒、一次。一一译者注)等)来测试同样的策略,并将其结果与使用日频K 线时的结果相比较。
在同一个K 线中使用了双边交易指令
实际上,许多策略在同一个K 线上都会发出一个或多个交易指令。例如:
● 突破系统。你在市场开盘价处放置一个买入止损指令和一个卖出止损指令,并让市场来决定你在首次突破时的头寸。
● 反趋势,或区间交易系统。你在当前价格之上放置一个限价卖出指令,并在当前价格之下放置一个限价买入指令,希望价格的上下波动能够在触发你的入场价格后反方向变动,在达到你反方向限价指令时出场。此时你反方向的限价指令扮演了目标盈利的角色。
● 条件指令。你在发出入场指令的同时,也发出一个当入场指令被执行时提供止损保护的条件指令。
这些类型的指令所产生的问题是,如果K 线的范围包括了这两个指令,你就没法知道究竟是哪个指令先被触发。在上面列出的第二个例子中,谁先被触发并不重要,因为这两种交易都会盈利。但在另两个例子中,结果就不一样了。同上面一样,解决这一回测问题的方法是使用周期更短的K 线数据,从而发现究竟是哪个指令先被触发。
对交易费用的现实性考虑
交易费用包括滑价和手续费。(事实上,对盈利的征税也应该被包括在内,但没有人提及过这一点。)当我在1993 年发布第一套实际交易的系统时,我为单笔持有时间为60 个交易日的交易考虑了每手合约75 美元的交易费用。60 天的添加项是考虑了合约展期的费用。在当时,经纪商一般会对每手期货合约一个来回的交易收取25 美元的费用,另外他们还会对单笔订单额外收取50 美元的费用,这笔费用与你的订单大小或下订单的时间(记住这个可怕的词"快速的市场条件" )都没有关系。这种情况持续了很久。随着经纪商之间的竞争变得越来越激烈( 一个来回的手续费变为2-5 美元,金额为25000 美元的股票一个来回的手续费为5-10 美元) ,以及电子化市场把买卖价差降低至几分钱,夜盘交易除外。因此交易费用的影响已经没有以前那样显著。不过如果你想找到一个(单笔)盈利相对较小的策略,现实的交易费用就会有很大影响。
下面是我在进行回测时所使用的滑价设置,你应该使用你的经纪商给你提供的手续费数值。
股票
我只交易那些在过去5 个交易日中的平均流动性在20000000美元之上的股票。我把流动性定义为收盘价乘以成交量。出于流动性的考虑,我一般不会使用日内止损指令。我会使用下列类型的指令,并希望平均滑价能与我设置的值相等:
开盘时的市价指令: 实际成交价为在开盘价基础上变化0.015 美元,即1.5 美分。
收盘时的市价指令: 实际成交价为在收盘价基础上变化0.0025 美元,即0.25 美分。
限价指夺: 见下文的"偏爱限价指令"部分的讨论。
如果你的账户规模相对较小,那还有一些事是你需要注意的。零股交易目前被界定为订单量小于100 股的交易。如果你在开盘时的市价指令中使用零股交易,你的滑价会比整手交易(交易量大于100股的交易)大得多。这是由于零股订单并没有被包括在交易所开盘时的撮合过程之中,只能与其他的零股交易进行匹配。此时的滑价会大许多,我会避免这样做。
商品
如果该策略的单笔盈利相对较高,我会交易一些不太活跃的商品,但此时我会为它们考虑更大的滑价。
日盘时段的市价和止损指令: 25 美元。
夜盘时段的市价和止损出场指令: 我会等到日盘时段买卖价差更好时再出场。
外汇
我并不是一个外汇的大玩家但当我交易外汇时,我的指令一般都是限价指令,这是因为,我认为外汇更容易以反趋势的形式来交易。如果你有一个外汇经纪商,而不是一个做市商,并且你对6 种主要货币进行配对交易,那每个来回为3-4 个价位,是个不错的数字。
偏爱限价指令
在某些点,我确信几乎所有交易员都从限价指令中发现了潜在的"金鹅"。表面上看, 它们消除了对滑价的所有担心,因为你能获得你报的价格,甚至更好的价格。但现实情况是,滑价在限价指令中会以另一种形式表现出来: 错误入场信号。我曾经交易过一个股票系统,它会每天放置20-30 个买入限价指令。我只希望入场10 次,因此当有10 个指令被触发时,我的软件就会取消剩下的指令。该系统能够盈利,但永远不会像我回测时那样好。出现这一现象的原因是,我错过了那些最好的交易,而仅能实现那些市场价格在我的价格之下的交易,接下来市场价格可能会更低。换句话说,我错过了一些有大额盈利的交易,却总是陷入那些亏损的交易之中。
如果市场价格下跌至你的买入限价,除非卖方有足够的流动性,此时你的订单才能以买入限价成交。否则你就会错过这笔交易,或者只能部分成交。许多人会争论说,像标普和外汇这样的流动性非常好的市场,在每个价位都会有大量的流动性。事实并不是这样的。即使只交易一手合约,或一个100000 美元的外汇单元,市场价格与你的限价指令相同,你的订单不会成交。但你的回测软件则假设你成交了。我曾经多次坐在屏幕前,看着在我的买入限价处,有几百手的买量在等着,我不停地叫着, "加油,让我的能够成交",但它却没有发生。因此,对于使用限价指令来入场,或使用限价指令来止盈出场的策略,它们的问题在于,你会错过一些刚好等于你的价格的交易,你的实际结果会比回测时差一些。如果你的单笔盈利相对较大,你可能只是看到策略的实际表现比你的模拟交易会差一些。但如果你的单笔盈利相对较小,这个问题可能会导致你的策略失败。
对于那些使用限价指令来捕捉小额盈利的系统来说,成交率在实际交易中大幅低于回测时的情况,会造成巨大的影响,把一个盈利机器变为一个金钱陷阱。下面是一个真实案例。我在电子迷你标普合约(emini S&P)上使用5 分钟K 线图,实施了下列的交易逻辑该交易逻辑在回测中具有非凡的结果。
入场指令
限价买入点=收盘价- 0.75 点
限价卖出点=收盘价+ 0.75 点
入场后的止损
止损=入场后亏75 美元(对应电子迷你标普合约为1.5 点)
限价指令盈利目标
卖出平仓限如=收盘价+ 0.75 点
买入仓限价=收盘价- 0.75 点
在2011 年3 月12 日至4 月12 日的一个月期间,该策略具有下列的回测结果:
盈利交易数: 928
亏损交易数: 330
总盈利: 21525 美元
单笔交易平均盈利: 15.90 美元
最大回撤: 1262.50 美元
其模拟资金曲线在图形上差不多是一条从左下角到右上角的直线。但在真实交易中,所有的亏损交易都会发生,但你只能实现差不多一半的盈利交易。最喜欢该策略的人,可能是你的经纪商,因为他能对你每个月600 次回转收取大量的手续费。
本章小结
在你开发出一个可交易策略之后,你希望它在真实市场中的表现与回测时一致。本章讨论了那些最可能让你策略表现下降的原因。截至目前的讨论,最可能的原因是在开发过程中的曲线拟合。因此在你的开发过程中,我强烈建议你问一下自己这个问题:开发过程中的这一步,是否会导致某种形式的曲线拟合?
附录D 提供了几个可能会让你吃惊的曲线拟合案例。我建议你仔细看一看。确保低程度的曲线拟合的最安全方法,是你在交易中找到某个感兴趣的策略时,对它进行BRAC 检验。