算法交易系统构建指南-一-

算法交易系统构建指南(一)

原文:/annas-archive.org/md5/1632e01f61a924bb6972dddbe75160e1

译者:飞龙

协议:CC BY-NC-SA 4.0

引言

我想呕吐。胃里的胆汁达到了无法承受的程度,但我周围没有洗手间。在高速公路上以 75 英里每小时的速度疾驰,看不到任何出口,我只能硬着头皮接受我的命运。我真的很想蜷缩起来去死。好吧,不完全是。我想先呕吐,然后再蜷缩起来去死。

是因为吃了没煮到“鞋皮”程度的猪肉而导致的旋虫病吗,正如我妈妈总是预言的那样?不对。是夹杂着大肠杆菌的生煎汉堡?也不完全是。罪魁祸首确实是肉,但它是以活牛的形式出现的。准确地说,是活牛期货。所有 40,000 磅的活牛让我突然感到恶心。具体来说,是牛海绵状脑病,更常被称为疯牛病。我并没有得这种病,但我那场不幸的投机投资确实得了。

这是在 2003 年 12 月的最后时刻,那是一个充满个人和职业希望的月份。我最近被提升为阿戈科技公司的质量保证副总裁,这是一家中型航天公司,我很幸运能够参与其中,直到它被一家没有灵魂的庞大企业收购。我还曾被《克里夫兰商业》杂志评选为“40 位 40 岁以下的杰出人才”——被认定为俄亥俄州克里夫兰新兴商业明星之一。我的期货交易账户表现良好,以至于我感觉自己知道自己在做什么(这种感觉往往在之后被市场狠狠打脸,不过我不想多说)。最后,我的第一个孩子将在几个月后出生。考虑到这一切,我的运势似乎很好。

然后,灾难来袭。三次。迅速。

在 2003 年 12 月 12 日,我美丽而了不起的妻子艾米和我迎来了我们的第一个儿子安东尼。他早产了两个月,而且是死胎。为我们第一个孩子的到来而进行的计划,突然间变成了为葬礼和埋葬做准备。失去孩子带来的撕心裂肺的痛苦几乎无法理解,直到它发生在你身上。我显然没有为此做好准备。那天,梦想被摧毁,生活突然变得不公,希望和快乐似乎变成了遥远的记忆。毫无疑问,艾米和我在精神上、身体上和情感上都遭受了巨大的打击。

不到一周后,12 月 17 日,第二场灾难降临。我的父亲在他 75 岁生日那天去世。讽刺的是,经过 30 年的三次心脏搭桥手术,并不是他的动脉堵塞了他,而是癌症——一种在烟囱清扫工中常见的可怕癌症。我想这也算合理,因为他是消防员,正值壮年时追赶过很多浣熊,作为一家害虫控制公司的共同老板。看着他躺在床上,生命慢慢离开他的身体,我的头开始像陀螺一样旋转。说我无法思考清楚,那简直是轻描淡写。

在一周内经历两次如此改变人生的事件,你可能会猜测我不会再进行交易或从事其他任何心理和情感任务。但你错了。我依然在交易。回首往事,我在交易时真是疯狂。然而,我还是这样做了。在 12 月 23 日,收盘前大约一个小时,我一时兴起决定买入活牛期货。我确信我有我的理由,但我同样确定那些理由是我脑中构造出来的,以证明这笔交易。我根本不在理智状态,根本不该交易。

我相信你知道这个故事的结局。在 12 月 23 日收盘后,美国农业部宣布在美国发现一起疯牛病病例。对市场的影响将是非常负面的。由于我持有活牛期货,而市场显然要急剧下跌,我的账户正经历缓慢的死亡,只有期货市场的每日限额暂时减缓了这种情况。每份合约我每天最多只能损失 600 美元,至少在交易所扩大每日下跌限制之前。对于我的账户规模来说,即使只有一份合约的“限价”下跌也是极其痛苦的。

images

图 0.1 疯牛病导致活牛期货崩溃

一周后,经过三天的限价跌停市场——我无法以任何价格退出——我终于能够清算,损失为 5400 美元。

这次的损失是我预期的最大损失的七倍,按我账户的百分比计算,真是惨痛。这并不是世界末日,但让我深思。过去一个月是否只是交易和生活长期亏损的开始?我在交易中究竟在做什么,经历了如此多的情感打击?仅凭一时冲动和直觉进行交易?我何时才能停止这种破坏性行为?我能否停止这种破坏性行为,最终成为一名成功的交易员?这一系列的不幸事件能否成为我涅槃重生的动力,扭转我的交易?有太多问题——我没有答案。

结果表明,这笔交易虽然糟糕,但疯牛病可能救了我的交易生涯。这本书记录了我的交易故事,包含了所有的缺陷。在这个过程中,我在开发机械交易系统方面越来越出色,稍后我会向你展示我用来开发成功算法交易系统的过程。

images 谁能从这本书中受益?

不论你是什么类型的交易员,或者你在交易方面的经验如何,我相信你会在这本书中找到与你产生共鸣的内容。

对于初学者,我希望这本书能为你们打开眼界。我不能,也不会,给你灌输交易利润像雨水一样从天而降的想法。任何告诉你交易很简单的人都是在欺骗你。当然,你可以通过交易赚很多钱,但你也需要准备面对大量的亏损、大幅的回撤和风险。每当有人告诉我交易轻而易举时,我总会怀疑他们的判断。我所讲述的故事,尽管有时痛苦,却是许多散户交易者的现实旅程。当然,正如我对所有初学者所说的,读完我写的内容后,也要阅读其他交易者的书籍。对所有事物保持开放的心态。经过大量阅读后,你将能够对什么是正确的、什么是胡说八道,以及你喜欢和不喜欢的内容做出明智的判断。关于交易的信息误导是惊人的,因此所有初学者都必须保持警惕。

对于中级或略有经验但仍在挣扎的交易者,也许你们至今的失败并不是心理或信心的问题。如今,许多交易书籍对心理方面非常强调,但如果你在错误地制定策略,即使有再多的心理准备也无济于事。如果你曾经在优化策略后立刻开始交易却亏了钱,那么你很可能意识到自己做错了什么。本书中详细描述的过程应该非常适合你,因为它将引导你走上正确的方向。

对于专业交易者,我在这里展示的大部分内容你们可能已经以某种方式见过。当然,有许多优秀的交易书籍讨论了我在这里提到的许多问题和难点。但总有新的东西可供学习,新的方法可以尝试,以及不同的思维方式。你可能会在本书中发现许多与你当前方法不同的内容,并且你很可能会通过将这些新想法融入交易中受益。

虽然本书是围绕算法或机械交易设计的,这是我主要的交易方式,但自由裁量交易者也可以从本书详细阐述的概念中受益。也许你自由裁量方法中的某些部分可以进行统计测试。例如,假设你的自由裁量入场是基于移动平均线交叉,结合你的直觉。测试你的直觉可能是不可能的,但移动平均线交叉可以进行前向测试并进行轻微优化。或者你可能想评估盈亏平衡或移动止损的退出方式。有许多错误的测试方法,但只有少数正确的方法。你将在本书中学到一种正确的方法。因此,利用本书中的概念,你可以大大改善你的自由裁量方法,因为你将知道如何正确设计和测试交易系统。无论是 100%机械策略,还是部分机械和部分自由裁量系统,将实际绩效数字应用于进出都只会给你信心,并形成更好的交易方法。

我将构建成功的算法交易系统分为七个部分。在书中的七个部分中,你会看到我交替使用某些术语:

  • 策略或交易系统——用于交易的方法。这可以是严格的规则、一般指导原则,或者完全随机的猜测。最终结果就是你的策略或交易系统。

  • 机械或基于规则的交易或算法交易——一种交易风格,其中所有规则都是 100%明确定义的。没有自由裁量,交易者不需做出决策。

  • 混合交易系统——一种交易风格,结合了算法交易与自由裁量交易的特点。一个例子是一个机械系统,它提供进出信号,但给交易者选择接受或拒绝信号的选项。

在第一部分,我带你回顾我的交易历史。我认为我早期的起起落落——主要是下跌——对于新手或初学交易者来说是相当典型的。我为市场支付了“学费”多年。但我能够坚持下来,在 2006 年赢得期货交易世界冠军^®,并在 2005 年和 2007 年获得第二名。在那些成功之后,我达到了所有兼职、爱好型、零售交易者梦想的境地:我能够离开一个有前途的职业,全职交易,实现我的梦想。

本书的第二部分,我会告诉你我目前是如何做事情的。从评估交易系统到设计新的交易系统,我详细阐述了我的过程。这个过程并不完美,而且不断演变,但它包含了我在刚开始时希望能够拥有的重要信息。即使你只是跟随我所做的一些片段,你也应该能够节省数千的市场学费。

在第三到第七部分,我构建了一个交易系统,从概念到实盘交易。它是一个好的交易系统,但绝不是终极解决方案(顺便说一下,这个是不存在的)。我还在这一部分讨论了我认为最接近终极解决方案的方式——多样化。最后,我讨论了如何实时监控我的策略,通过几个月的交易进展实时记录我的交易日记。

我希望通过阅读我的故事,你能够避免我的错误,并从中学习。相信我,因为你会看到,我犯了很多错误。

第一部分

一个交易者的旅程

第一章

交易者的诞生

那是 1989 年,我在加州追梦。其实我并不在做梦,我已经身处加州,过着年轻单身汉的梦想。大学毕业一年左右,我住在阳光明媚的曼哈顿海滩,加州,公寓距离柔软的白沙仅三个街区,那里的沙子如此美妙,以至于用于帮助创造夏威夷的威基基海滩。我在一年之前以优异的成绩毕业,获得密歇根大学的航空航天工程学士学位,这是一所顶尖的工程学校。随后,我拒绝了麻省理工学院、加州理工学院、斯坦福大学、普渡大学和密歇根州的航空航天硕士项目录取。我放弃了那些伟大的学校,以实现我在阳光明媚的加州生活和工作的终生梦想。

我仍然记得我做出那个决定的确切时刻。在密歇根州安阿伯的一个寒冷冬天,我正走在南大学大道上去上我的最后一个学期的课。风吹得如此猛烈,我甚至倾身迎向风,看看它是否能让我站稳。此时,面朝冰冻人行道摔倒并不会比脸上感受到刺骨的寒风更糟。那似乎像是狂风的气流让我保持直立,然后我知道——我不想,也不需要,生活在冬天寒冷的地方,而像我这样的航空航天工程毕业生都在涌向阳光明媚的南加州。我的决定已经做出。阳光和沙滩就是我的选择。

毕业几周后,我打包了我的 belongings,和我的姐姐凯伦一起,跨越全国开车去温暖阳光明媚的洛杉矶。

一年后,我安定下来了。我有一群亲密的朋友,他们大多数像我一样都是来自中西部的移民。我们周末常常玩海滩排球,通常在当地酒吧喝几杯来结束一天的活动。我喜欢海滩生活以及它提供的所有娱乐。开着我的小红色 T 顶跑车在海滩城市周围兜风,生活真不错。

但总觉得缺少了什么。

我无法确切说出原因,但我知道这并不是我想要的生活。海滩生活当然很适合我,但我选择的职业是错误的。设计未来的战斗机和参与秘密政府项目在某种程度上确实令人满足,但我就是感觉这不是我的未来。我无法想象自己做那种工作五年,更不用说三十或四十年的职业生涯了。我需要一剂兴奋剂来唤醒我。那剂兴奋剂出现在一天的垃圾邮件中,它改变了一切。

这本垃圾邮件小册子来自肯·罗伯茨,一位期货和商品交易者。至少他是这么自我介绍的。回想起来,他确实更像是一个推销员,而不是交易者。肯带着亲切的微笑和一顶牛仔帽,描述了等待任何勇敢交易期货或商品的人们的财富,那时人们更常称之为商品。

他在那本小册子里有一个引人入胜的故事,我承认我很快就被吸引住了。看着糖的图表,如图 1.1 所示,看到所有等待我的潜在利润,我怎么能不被吸引呢?

images

图 1.1 糖价暴涨 = 无限利润?

在那个时候,回撤、破产风险情绪控制这些词并不在我的词汇表中。但巨额利润、轻松赚钱简单交易突然出现了!而且还有退款保证,我怎么会出错呢?这是一张无风险进入无限利润潜力世界的通行证——或者说我的天真自我这么认为。所以我寄出了支票,那个晚上梦想着所有即将流向我的财富。

几周后,我收到了完整的交易课程。这是一本厚重的手册,里面充满了有利可图的示例图表。起初,我感到非常震撼。但随后我开始仔细查看细节。结果发现整个课程主要基于 1-2-3 头肩形态。如大多数交易者和投资者所知,这是一种经典的图表模式,如图 1.2 所示。在你查看的任何图表上都容易找到这个模式——你几乎可以在任何图表、任何工具和任何时间框架上找到一两个有利可图的例子。

images

图 1.2 好的头肩形态还是仅仅是错误信号?

问题在于,头肩形态给出了很多错误信号,通常在事后看起来才会显得不错。当然,我起初并不知道这一点。我只知道我可以查看图表,找出头肩形态,并观察它的效果。

我最终发现我错过了两个关键的拼图。首先,当你查看带有头肩形态或任何其他模式的图表时,很容易看到成功的交易,因为你同时在观察模式及其结果。如果你试着隐藏模式的结果,找到好的模式就会变得更加困难。

我错过的第二个关键是,仅仅存在一种模式并不一定意味着应该进行交易。如果你采取你看到的每一个头肩交易,你很快就会破产,如图 1.3 所示。当然,天真的渴望成为交易者的我对此事实毫无察觉。

images

图 1.3 许多头肩形态看起来不错,但最终都会失败

在认真跟踪并模拟交易所有头肩信号一个月后,发现大多数都是无利可图的,我将所有交易记录和手册寄回申请退款。罗伯茨先生兑现了他的承诺,退回了我的钱。

我对交易致富的梦想暂时破灭。好在,我现在看到期货是前进的方向——我刚意识到头肩形态并不是我的出路。一旦我放弃了通过 1-2-3 头肩形态快速致富的想法,我就做了许多科学的、以数字为导向的人常做的事:我寻求数学公式来帮助我做决策。我从许多人开始的地方入手:移动平均线。

images 我的移动平均灾难

我相信每个交易者或投资者在其交易生涯中某个时刻都见过或使用过移动平均线。移动平均是观察市场总体方向的好方法,简化了有时混乱的价格行为。但这也有代价——滞后。无论其计算基于什么,移动平均总是会滞后,这可能是一个主要问题。

有很多种利用移动平均线进行交易的方法。在最简单的方法中,当价格高于移动平均线时买入,当价格低于移动平均线时卖出(或做空)。这个方案在持续的趋势中效果很好,但在交易区间的价格走势中却表现糟糕(见 图 1.4)。

images

图 1.4 趋势中表现优秀的移动平均在交易区间失效

早期的市场技术先锋通过采用两个甚至三个移动平均线来纠正这一点。通过使用更多的移动平均线,目的是过滤掉一些交易区间的震荡交易,留下长期盈利的趋势交易。

在我对期货图表模式的失败尝试后,三重移动平均的明显出色和简单性让我印象深刻。查看图表时,轻易就能看到盈利交易,而不盈利的震荡交易则很难被察觉(见 图 1.5)。在震荡期,移动平均线非常接近,看到线的交叉极为困难。显然,我在头肩形态的经验中学到的东西并不多,图表上看到的东西欺骗了我。

images

图 1.5 三重移动平均交叉可能具有欺骗性

我很快就成为了移动平均概念的信徒,经过几次快速的成功测试(那时我并不理解为什么需要在数百次交易中进行测试,所以 10 或 20 次手动计算的交易对我来说已经足够!),我决定为我的第一个账户提供资金。尽管我最近在南加州买了一套昂贵的公寓,耗费了我大部分的积蓄,但我还是凑出了$5,000 来开一个账户。当然,我非常紧张。这是我的积蓄,完全依赖于移动平均线。从事后看来,这种疯狂显而易见,但那时我只看到利润。

我决定我的三重移动平均系统非常适合活猪(当时合约就是这样称呼的)。我不记得这是测试的结果,还是因为活猪的保证金要求相对较小。我怀疑是后者。我也喜欢活猪的低波动性,尤其是与大豆和猪腹肉等其他农产品相比。

我每天早晨在上班之前,都会带上我可靠的计算器、日报和一张有五列的纸,记录日期、收盘价,并计算 4 日、9 日和 13 日的移动平均线。然后,一到公司,我就会打电话给我的经纪人并进行必要的交易。

第一个交易系统的前几天和几周进行得相当顺利。我亏损的金额超过了盈利,我亲身体验了滑点、经纪人的错误以及打电话下单的低效。但我在生存,这让我认为是最重要的事情。

然后灾难降临。我持有活猪的多头头寸,有一天早晨,我盈利$400。我感觉非常好——这是我致富的机会!午餐时,我花了半个小时试图说服我的超保守、规避风险的工程同事戴夫,认为对技术型思维的人来说,投机商品是很简单的。只需做几次计算,一些简单的数学(不需要微积分),然后哗!钱就会在我的账户中增加。他并不相信,我开始想知道原因。

午餐后,我才明白原因。我在午餐后立刻查看了活猪价格。我的盈利从$400 变成了亏损$800。一个小时左右的时间里,损失了$1,200。我的账户在一瞬间蒸发了 25%。我感到麻木。而且由于我的系统还没有给出平仓信号,我依然持有这个头寸。

几天后,在经历了几次快速的亏损后,我总计了损失:$1,500——占我账户的 30%。我从未想过会出现这样的结果。恐慌开始蔓延。我暂时停止了交易。谢天谢地,我没有冲动地想要加倍或三倍下注来报复我的亏损(这种误入歧途的行为在我的交易旅程中后续会出现)。

我利用周末进行调整,想清楚接下来的步骤。显然,我错误地认为,在做了几笔交易后,很明显我的三重移动平均系统不好。如果那个系统糟糕,我那受到亏损困扰的头脑推理说,那么相反的系统肯定是答案,对吧?有点像《宋飞正传》中乔治·卡斯坦扎开始做与他过去完全相反的事情后成功的那一集。

对我来说,这是一个顿悟的时刻——如果我的第一个系统这么糟糕,那么相反的系统肯定也一样好!而且,我甚至不需要测试或评估这个计划。我所要做的就是在我的初始账户余额上再加 1500 美元,而不是减去它(出于某种原因,佣金和滑点损失在我扭曲的推理中变成了赚钱的理由,但那是另一个故事)。星期天晚上我上床睡觉,脑海中想着我用反向交易系统赚了 1500 美元,而实际上我用原始系统亏损了 1500 美元。我感到兴奋和快乐。星期一早上,我准备全力以赴地投入交易。

几周后,猪肉期货终于迎来了一个良好的趋势。这个趋势被一个三重移动平均系统完美捕捉到。如果我当时使用的是原始方法就好了!当然,对于“相反”的方法来说,大趋势是个致命打击,而市场正是提供了一个巨大的亏损交易。经过那次亏损交易后,我的账户余额下降了 3000 美元,相当于 60%的账户损失,这都是由于三重移动平均和反向三重移动平均系统造成的。我受够了。我举起白旗,暂时放弃,决定我需要更多的教育。

第二章

够了就是够了

在我继续讲述交易期货亏钱的故事之前,你可能会问自己:“这个家伙为什么这么难?我每天都能看到期货和外汇交易的广告,似乎任何一个半傻子都能轻松赚钱。这个凯文家伙怎么会这么失败?”好问题,但让我换个角度问:“假设交易真的那么简单——你可以每天花五分钟在电脑上输入订单,同时在加勒比海的白沙滩上放松——那为什么卖给你这个神奇系统的人要花 99 美元做这些事情?他为什么不花时间几乎把自己的秘密分享出去,而不是自己交易那越来越多的钱?”

这个答案应该不会让你感到惊讶:交易是艰难的,即使是所谓的高手,他们大多数在任何意义上都不是高手。我估计,市场上出售的交易系统中超过 90%都是垃圾(我这里算是宽容了——实际数字可能接近 99%),这些系统是由一些发现向新手交易者销售要比实际交易简单得多、利润丰厚得多的人所推广的。你听到的关于 80%或 90%的交易者亏损的统计数据并不是谎言,原因是交易确实非常非常困难。我希望通过阅读我的交易历程,以及后来了解我的交易过程,你能感受到这其中的挑战。同时,你会意识到交易成功是可能的,但没有任何捷径。

images 研究

在我快速且惨痛的期货交易初试之后,账户价值损失了 60%,我害怕再进行交易。我也意识到我还有很多不知道的东西,如果我想在交易“战争”中取得成功,我需要的不仅仅是一个简单的移动平均交叉。所以我潜心研究了几乎所有能找到的交易书籍。我阅读了经典作品,如《股票操盘手的回忆》(George H. Doran Company, 1923)和《市场巫师》(New York Institute of Finance, 1989),还有一些可能从未进行过交易的新书。但无论是哪本书,我都保持开放的心态,尽量吸收所有内容。在阅读了至少十几本书后,我非常困惑。这是我学到的一些东西:

  • 止损是必须的。止损只是给亏损的交易者的。

  • 进场是唯一重要的。出场是唯一重要的。

  • 激进的资金管理是致富的关键。激进的资金管理会导致账户失败。

  • 趋势跟随是交易的最佳方式。趋势跟随已经死了。

我可以继续说下去,但你明白我的意思。一本书中宣扬的每个交易“原则”,另一书籍都会声称正好相反。哪一个是对的?哪一个是错的?我的头脑感到眩晕。但我继续阅读,收集更多信息。最终,我得出结论:所有书籍都是对的,所有书籍都是错的。例如,对于某些交易风格,止损是个好主意。但对于其他方法,止损只会阻止你赚钱。这个概念让我豁然开朗:没有一种正确的交易方式。重要的是正确评估我想要的交易方式,无论那意味着什么。

在这个“恍然大悟”的时刻之后,我去购买了一个每日期货价格的数据库,并为自己找了一些编程软件。在 1990 年代早期,我决定不使用昂贵的交易软件(当时交易软件不太普及,且相对昂贵),而是自己创建一个回测软件,使用 Microsoft Excel 和 Visual Basic。我就不细说了,但可以说,我在开发出看起来很不错的交易系统时毫无困难。忽略佣金和滑点时,创建漂亮的收益曲线显得相当简单。当你的系统有 10 个变量并且运行 100 万次不同变量组合时,这也是很容易做到的。这都是典型的新手错误,而我一次又一次地犯着同样的错误。唯一拯救我的就是结果如此之好,利润高得令人难以置信,连我自己都不敢相信。我以为这是数据有问题或者我的软件有故障,但这并不是根本原因。主要问题是我测试的方法不正确。

因为我觉得自己制作的系统“好得令人难以置信”,所以我幸运地没有把任何钱投入到这些“圣杯”系统的实时交易中。谢天谢地我没有。相反,我决定放弃测试,朝另一个方向前进。这一切都是因为一本书告诉我,交易中我不会亏损。这真是天真到了极点!

images 你不会失去——或者你会吗?

那本暂时让我离开系统化测试交易系统的书是你不会在商品交易中亏损(R. F. Wiest,1988),作者是罗伯特·维斯特。当我在 1990 年代早期阅读这本书时,它已经出版超过五年,我记得它在当地书店显眼地展示着。我认为这意味着它一定是一个合法的赚钱书籍,能在五年后仍然存在。这本书主要讲的是规模交易。概念是找到一种接近多年低点的商品,寻找其在不久的将来会上涨的基本理由,然后分批买入,略微获利后再卖出。举个例子:假设小麦目前的价格为 300 美分,正处于 10 年来的低点。你还听到预测下一个小麦作物由于恶劣天气将大幅减产。你的分析表明,在接下来的六个月内,小麦可能会上涨。因此,你以 300 美分的价格买入小麦,希望在 305 美分时卖出(每份合约获利 250 美元)。如果价格跌至 290 美分,你再买入第二份合约,期望在 295 美分时卖出。你每跌 10 美分就增加持仓,利润目标是比相应的买入价高 5 美分。理想情况下,价格会稍微下跌,让你买入三份或更多的合约,然后在价格升至 305 时,获利退出每份合约。然后,如果价格再次下跌,你只需重复这个过程,逐步买入和卖出。

作者声称使用这种方法的胜率高达 90%到 95%,这完全是有可能的。但胜率实际上是没有意义的。重要的是账户的回报率和回撤。当操作得当时,规模交易的回报率相对较低(10%到 20%),但回撤相对较高(20%或更多)。这是因为你需要大量资金在下跌过程中不断买入。如果资金不足,你将无法继续买入,从而无法在价格的有利波动中获利。最终,如果情况变得足够严重,你将面临追加保证金的风险,规模交易可能会突然结束。

尽管这种方法存在缺陷,规模交易对我这个缺乏经验的交易者来说非常吸引。我只需找到接近多年低点的商品,并设置规模进行交易。我知道仅仅 10%到 20%的回报率不会让我满意,因此我必须做出一些调整,主要是以远低于推荐的账户规模进行交易。这在我第一次尝试时效果很好。我以约 90%的年回报率结束了这一年,全部来自规模交易。

人们常说,在任何领域的早期成功最终会导致灾难,这正是我在规模交易中经历的。在第一年获得 90%的年回报后,我以为我已经掌握了这种交易。损失会很小且不频繁,但随着我不断兑现规模交易的赢家,收银机会一直响个不停。当然,市场狠狠地给了我教训,让我意识到这种想法是错误的。我甚至不记得哪个商品带来了痛苦——可能是小麦、玉米、棉花或咖啡——但我第二年的一个规模交易出现了严重的问题。我损失了第一年的所有利润,以及账户中剩下的大部分。对我来说,书名你无法在商品交易中失败应该改为“当你忽视简单的指引时,你可能在商品交易中损失惨重!”不必说,我已经放弃了规模交易。

images 平均成本法——增加亏损

尽管我放弃了规模交易的方法,但我对在价格不利时增加持仓的想法产生了兴趣。当这种情况发生时(经常会发生),我可以以更低的价格买入更多!然后,当我的市场分析最终被证明是正确时,我会获得更多的利润。我已经通过定期投资在共同基金中做过同样的事情;当价格下跌时,我会买入更多的股份,从而以更好的价格获取资产。

整个方法听起来太好了,当然这是真的。增加亏损头寸在共同基金中有效,因为(1)随着时间推移,共同基金几乎总是会最终上涨,以及(2)共同基金没有杠杆。像小麦这样的期货(我个人喜欢的增加亏损策略)价格并不一定在 5 年或 10 年的时间内上涨。价格可能会长期低迷,导致你面临一堆未平仓的亏损交易。此外,每购买一份小麦合约,你都需要额外的保证金,最终即使是小幅价格波动也会在你的资产中造成巨大的影响。这正是我所经历的。

那是 1998 年。出于某种疯狂的原因,我坚信小麦会涨。在 1998 年中,小麦价格处于五年低点(见图 2.1)。

images

图 2.1 在 1998 年,小麦价格处于五年低点

基于这一事实,加上一些粗略的基本面分析,我决定小麦价格将回升至 1996 年中期的高点。所以我买了小麦。价格下跌了。我又买了更多小麦。价格又下跌了一些。从 5 月到 9 月,每次我买了另一个合约,我的损失就更大。

如果小麦价格持续下跌,我知道不久就会收到追加保证金的通知。心理上,我无法接受这一点,所以我每周午餐时会跑一两次银行,把$1,000 到$5,000 转入我的交易账户。以某种方式,我觉得这样比收到可怕的保证金通知要好。我这样做了很多次——跳过午餐,赶去银行,又急匆匆回到工作岗位——以至于我在银行有了自己的专属转账女士。她的名字叫 Cookie,在这些多次转账中,我了解到很多关于她的家庭、孙子孙女和她的生活的事。我甚至给她的小孙子孙女送了一些小礼物和玩具。此时,应该响起的警报声却静默无声——我觉得不断给一个濒临破产的交易账户转钱竟然是个好主意,这不是很奇怪吗?

幸运的是,从 1998 年 9 月初开始,小麦价格开始反弹。不再转账了!事实上,到 10 月中旬,我快要接近保本了。我开始在价格上涨的过程中购买更多合约,进一步加大杠杆。不过,我相信低点已经过去,如果真是这样,我不应该买入吗?总的来说,我现在的交易亏损约$20,000,这在我的账户规模中是巨大的。但价格在上涨,我看到了胜利的希望。然后,1998 年 10 月 13 日来了(见图 2.2)。

images

图 2.2 我最后一次在小麦中加仓的尝试

我记得 1998 年 10 月 13 日,有好有坏的原因。我在西雅图出差,市场关闭后,我看到小麦上涨了 6 点!再加上,我家乡的棒球队克利夫兰印第安人正在美国联盟冠军系列赛中对阵可怕的纽约扬基队。我在酒店房间观看第六场比赛,在第五局时,印第安人的吉姆·托米打出了一个满贯。我心想,事情有转机了。我的印第安人会赢,小麦也在上涨。不知为何,我的脑海将小麦和印第安人的命运联系在了一起。

当然,你可以猜到这个故事是如何结束的。下一局,扬基队得了三分,印第安人输掉了比赛,因此被淘汰出季后赛。小麦的价格也慢慢而稳地下跌,随着我在前一波上涨中购买的额外合约,即便是小幅修正也是致命的。到 12 月初,仅这笔交易我就损失了约 70,000 美元,而且我已没有资金可以转入我的账户。库基必须向其他人索要玩具给她的孙子孙女,因为我不再进行交易。至少一年或两年内都不再交易。

images 野人出现

在我的平均成本法惨败之后,我花了接下来的几年只进行小规模交易,专注于重建我的交易资金。当我有足够的闲置资本时,我转向我称之为“野人”方法。采用这种方法,我无需在用真金白银交易前测试或评估任何想法。如果我有个绝妙的主意,认为咖啡应该下跌,我就会卖出;如果石油输出国组织讨论更严格的配额,我就会买入原油。我的方法没有真实的逻辑依据,只是根据我听到的谣言或浮现在脑海中的想法进行疯狂交易。我努力保持小损失和大收益,但不知为何反其道而行之在心理上要容易得多。此外,我仍然采用一些早期交易的技巧,比如加仓亏损。我敢肯定我的经纪人喜欢我,但我的账户权益并不喜欢。这种无序的方法使我的账户趋于平稳,但过了一段时间我知道这种方式没有未来。然而,我仍然沿用这种方法,直到我之前提到的那笔灾难性的疯牛交易。那笔交易和所有相关的情境都是对我的冷酷一击。我迫切需要以不同的方式进行交易。

images 评估时间

2004 年开始时,我仍在舔着活牛/疯牛危机的伤口。我对自己的交易进行了深入而艰难的反思,发现我不喜欢自己看到的结果:

  • 移动平均交叉系统——亏损。

  • 反向移动平均交叉系统——亏损。

  • 测试了数千个系统——结果好得令人难以置信,从未交易。

  • 规模交易——亏损。

  • 平均成本法——亏损。

  • 野人方法——亏损。

几乎无论我做什么,我都在亏损。令人困惑的是,很多方法在一段时间内有效,让我在不可避免的下跌之前获得了一些不理性的信心。这种额外的信心实际上让随之而来的崩溃在情感上和经济上都变得更加艰难。

然而,当我查看自己的历史时,我看到了一个亮点:我确实成功开发了机械交易算法,但并未进行实际交易。问题在于,我不知道这是否是因为我确实拥有良好的系统,还是良好结果是由于测试过程中的缺陷(数据不良、过度优化、编程错误等)。我在 2004 年初决定,这是我成为持续盈利的机会——我必须开发和测试机械算法。

2004 年上半年的大部分时间都是在整理事务——调查交易思路,查看软件选项,确定如何手动进行逐步测试。对于我的策略,我决定采用简单的 X 日收盘突破;也就是说,如果今天的收盘是过去 X 根 K 线中最高的收盘价,那么就在下一根 K 线开盘时买入。对于短线入场,则正好相反。对于退出,我采用了基于平均真实波幅的简单止损,一个固定金额的止损,随着利润累积的移动止损,以及仅在出现较大未实现利润时应用的紧缩止损。这是一个相当简单的系统,但我最初的结果显示它运行良好。这个策略的入场和退出并没有什么惊天动地之处——我相信很多人之前也曾采用过这种方法。这只是一个简单的趋势跟随方法,只要出现了一些持续的趋势,整体系统就会盈利。

尽管到目前为止我一直使用自己开发的回测软件,但我决定并不完全信任这些结果。我获得了一份 TradeStation 软件的拷贝,当时它可能是最好的和最受欢迎的(许多人说它现在仍然是最好的,我也仍然将其作为我的主要工具,但今天市场上还有很多其他优秀的回测程序)。除了让测试更容易外,我对结果的信任也大大增加。唯一的问题是我想利用逐步测试(稍后会详细讨论),而当时 TradeStation 并不支持该功能。因此,我只能在 TradeStation 上进行优化,然后计算结果并手动执行逐步分析。这是一项繁琐的工作,但同时让我对逐步测试的实际运作有了扎实的理解(我建议你第一次逐步测试时手动进行,以提高理解)。

到 2004 年最后一个季度,我有了一个我觉得准备好的交易系统。我试探性地进行了几笔交易,发现结果与回测结果相当吻合。我的新系统将在 2005 年开始全规模交易。2004 年结束时,经过十多年的痛苦尝试,最终在大多数方法上失败,我终于看到了象征性的隧道尽头的光明。幸运的是,那不是一列朝我驶来的火车!我有了一个经过测试的、用真钱有效的方法,我想从山顶大喊:“我是个好交易员!”由于我住在俄亥俄州,那里山脉稀少,我做了下一个最好的选择:我参加了一个公开的全球交易比赛。实际上,我在 2004 年就参加了比赛,但当时我使用的是一个伪机械、主要依赖裁量的系统,起初表现不错,但最终崩溃了。但这一次,我将装备一个好的机械方法,希望不会让自己丢脸。怀着这个决定,我的交易冒险继续进行。

第三章

期货交易世界杯冠军^®胜利

基于我在 2004 年完成的工作,我认为我有一个可行的交易策略。当然,我想将我的“成功”与世界分享,但又不想透露我的策略。因此,我做了下一个最好的选择:我参加了一个公开交易比赛。

对于那些从未听说过的人,期货交易世界杯冠军由 Robbins 交易公司赞助,是全球首屈一指的真实资金、为期一年的期货交易比赛。它吸引了来自世界各地的一些最佳和最聪明的交易员,彼此较量,策略相互对抗。这是一个高压的比赛,结果不断更新供所有人查看(在旧时,结果每月在交易杂志上发布;现在它们每天在世界杯网站上更新:www.worldcupchampionships.com)。在 1987 年,传奇交易员拉里·威廉姆斯将 10,000 美元变成了超过 110 万美元。这让你对参赛交易员的水准有个了解。

一旦我决定参加交易比赛,就必须确保我的系统足够好。通过查看过去获胜者的表现,我得出结论,只要我的年回报率达到 100%或更高,我就有合理的机会进入前三名。这实际上是我的目标;并不是赢得比赛,因为我意识到在高水平的表现中,运气会起到一定作用。我不能指望靠运气赢得比赛;我能做的就是让自己尽量接近顶端。为了在一年内实现 100%的回报,我知道我必须接受非常大的最大回撤。我决定允许大约 75%的最大回撤,这对于任何普通交易者的账户来说都是荒谬的。但正如我稍后将详细讨论的,你的目标和期望应基于当前的情况。对于一个唯一成功标准是账户回报的交易比赛,允许较大的回撤是合理的。然而,如果比赛是基于回报和风险(例如,获胜者拥有最高的 Calmar 比率),我将以完全不同的方式参与比赛。这将在稍后详细讨论,但现在要明白,我在一开始设定的目标和目的决定了交易开发过程中的每一步。

如前所述,我在 2004 年开发了一个不错的交易策略。实际上,这个策略在 2004 年的比赛中足以获得第二或第三名,但当然,那时我还没有准备好参加。然而,我在 2005 年为以下系统做好了准备:

入场

  • 在 48 根 K 线高位收盘后买入下一根 K 线(对于做空则相反),只要 30 日 RSI 大于 50(做空交易时小于 50)。

出口

  • 根据以下计算止损:

    • 固定美元价值($1,000)

    • Y * 入场的平均真实波幅

    • Z * 入场的平均真实波幅(盈利目标)

其他规则(基于我的心理,我觉得我需要这些)

  • 如果上一次交易亏损,请等待 5 根 K 线再进行下一次交易(这可以最小化频繁交易)。

  • 如果上一次交易获利,请等待 20 根 K 线再进行下一次交易(在获胜后要耐心)。

该系统利用每日 K 线作为所有交易信号,这对像我这样有全职工作的人来说非常完美。每晚,我可以简单地查看我的图表,为第二天下单,然后不必担心日内的波动。这是理想的设置,因为我在白天检查持仓的时间有限。

我选择了九个期货市场进行交易:

  • 玉米

  • 棉花

  • 黄金

  • 5 年或 10 年期国债

  • 咖啡

  • 日元

  • 日经指数

我选择这些工具是基于它们过去的表现、相对较低的保证金要求以及它们之间的普遍缺乏相关性。然而,回顾这点,我意识到我犯了两个相当大的新手错误。首先,当我测试我的系统时,我测试了 20 到 25 种不同的工具。然后,在看到实际表现后,我简单地选择了表现最好的那些。换句话说,我是根据市场进行了优化!这是在良好的策略开发中绝对不能犯的错误。至于我的第二个错误,我在选择投资组合时没有进行任何详细的相关性研究。相反,我只是根据自己的猜测判断相关性应该是什么(“玉米和日经指数可能没有相关性,所以我可以同时交易这两者。”)。当时,这似乎是合理的,但我从那时起的经验告诉我,相关性有时与常识所指的不同,应该在投资组合中始终进行检查。即便如此,重要的是要意识到,即使是没有相关性的工具在市场恐慌期间也可能会变得相关。幸好,尽管我在开发过程中犯了新手错误,我的交易方法仍然取得了成功。

由于我的资本有限(每年我开始时的账户只有$15,000),我只能交易每种工具一个合约。偶尔,如果我没有足够的可用保证金,我不得不跳过一些信号。无论何时,我都尽量以“满负荷”的方式交易,尽可能利用我的购买力,同时避免追加保证金的要求。我的计划是在可用资本的限制内,尽量抓住每一个信号,并尽量遵循系统。

这是我在 2005 年至 2007 年每年的表现和一些想法。

images 2005

我的 2005 年权益图如图 3.1 所示。在 2005 年的第一个月结束后,我的情况略有下滑。怎么回事?我本想凭借这个策略征服交易世界,却在亏损?似乎这总是发生在我身上——一开始交易策略时,就开始亏钱。我感到精神崩溃。我只亏了 4 到 5 个百分比,但年初有个好的开端总是令人愉快的。幸好,到四月中旬,情况开始好转。到那时,我的年收益已超过 30%,这将转化为 120%的年回报。我如火如荼!一切都按计划进行。

images

图 3.1 我的权益图,2005 世界杯比赛账户

当然,就像任何好莱坞电影一样,故事必须有一个黑暗时期。对我来说,那是从四月中旬到八月中旬的四个月回撤。这不仅持续了很长时间,而且幅度也很大——超过 40%的回撤。在最低点时,我几乎放弃了赢得比赛甚至接近获胜的希望。但我坚持了自己的计划。我尽量按系统交易,但因为保证金问题不得不跳过几个交易。那个夏天对我的比赛账户来说绝对是“糟糕的一天”。

事情在六月中旬开始好转,尽管需要几个月才能达到新的权益高点,但到 12 月中旬,我的账户几乎翻了三倍。2005 年 9 月的日元和铜的几个良好趋势,以及 11 月的咖啡趋势,确实帮助账户腾飞。这就是趋势交易的真正运作方式——你可以经历几个月的平淡甚至下跌表现,但抓住几个趋势可以改变整年的结果。当然,问题在于,如果你错过了趋势交易——假设因为多次虚假突破的损失而在趋势显现之前放弃,或者账户里没有足够的钱去执行每个交易信号——你的表现将会很糟糕。因此,趋势交易并不适合每个人,因为跟随它在心理上可能非常困难。

当我在 2005 年 12 月中旬达到最高权益时,我知道自己在比赛中处于良好状态,可能能拿到第二或第三名。第一名根本不可能,因为比赛的领先者埃德·特瓦尔杜斯全年上涨超过 250%。在信心高涨的情况下,我确实在年底时违反了我的系统,在咖啡的亏损头寸上加仓。当时,我的目标是 200%的回报,显然旧习难改,因为我再次尝试了摊平(我到底能学到什么?)。所以在 12 月的最后两周,我损失了部分权益。再次吸取教训:不要对亏损头寸加仓!

images 2006

在我 2005 年取得成功后,我意识到自己有一个不错的策略,如果我能正确地、不带情绪地进行交易,2006 年可能会表现不错。当然,公开交易比赛的问题在于,有时候你一个月在前三名之内,下一月却跌出前三。更糟糕的是,当你发现自己恰好在领先交易者身后时,这会让人很想冒险去追赶。我在 2004 年就尝试过这种冒险,试图追赶最终获胜者库尔特·坂井。顺便说一下,我根本没有机会:库尔特全年上涨了 929%,表现非常出色。然而,他对自己的表现始终保持谦逊(这是一个伟大的交易者特质)。

2006 年交易开始时,我充满希望,有一个可靠的计划,头脑清晰。我的 2006 年表现如图 3.2 所示。与 2005 年不同,2006 年首月对我来说非常好。我上涨了约 30%,对自己的机会感到很不错。当然,每当我对交易感到不错时,回调就在眼前。二月和三月就发生了这种情况,把我拉回了盈亏平衡。几笔日元和 10 年期国债的亏损交易让我回到了现实。

images

图 3.2 我的第一名股权图,2006 年世界杯竞赛账户

但在这次回调中,二月中旬,我进入了改变一切的交易:我做多铜,如图 3.3 所示。我从 2006 年 2 月 17 日到 5 月 1 日持有这笔交易(实际上是两笔独立交易,考虑到展期),产生了每份合约净利润 28,875 美元。这是那种千载难逢的交易,市场突然起飞,而我则紧紧把握着。到 5 月 1 日,我的账户价值为 45,122 美元,这意味着一笔铜交易贡献了我全年利润的 95%以上。

images

图 3.3 铜价飙升,我在做多

在 2006 年 5 月初,比赛中已经上涨 200%让我感到欣快。然而,我不知道这就是我这一年的巅峰,接下来的日子将是缓慢的下滑。在 2006 年的其余时间里,我仍然按计划进行交易,并且每笔交易只做一份合约。我本该交易更大规模,因为我的账户已经翻了三倍,但我有一部分心里害怕会把利润回吐。这证明是个好决定,因为接下来七个月的大部分时间都是净亏损。

在比赛快结束时,我还要面对迈克尔·库克,一个值得尊敬的第二名对手。虽然我知道只需专注于自己的表现,不必担心其他交易者的指导方针,但我听说他是一位出色的交易者,因此我害怕落后于他,甚至在 12 月初就关闭了我的交易。这部分是有原因的(看看过去六个月的糟糕表现),但部分原因是我觉得我让迈克尔赢,而不是我输给他。

我停止在十二月份交易以保住最终胜利的讽刺在于,几年后我对比赛的记忆并非如此。在我心中,我全年都遵循系统,并按计划交易直到最后一天。我确信在公开的网络研讨会和写作中,我也说过同样的话——我从未停止交易,只为保持第一名。然而,这正是我所做的!这让我现在感到困扰。不,是我停止交易让我困扰,而是我记忆中的现实有所不同。当这种情况发生在交易中时,通常是个坏事。一个好的交易者会如实记住事情的发生,而不是美好却错误地回忆。

即使在最后的六个月出现亏损,我仍然能够在比赛中获得第一名。我感到得到了验证——这些年的努力终于得到了回报。现在的问题是:我能在 2007 年重复这样的表现吗?

images 2007

在 2005 年获得第二名和 2006 年获得第一名之后,我不知为何觉得自己已经突破,现在交易对我来说会变得更容易。当然,我学到的教训是,交易从来都不是轻松的,总是充满了斗争。确实是愉快的斗争,但依然是斗争。随着 2007 年的开始,我怀着满腔希望参加比赛。此外,我决定交易两个比赛账户(一个崩溃了),并尝试对我的核心策略做一些小修改。毕竟,我对 2006 年最后六个月的经历仍然有些心慌,想知道我的原始系统会遭受多长时间的折磨。

不幸的是,就像 2005 年一样,我一开始就走错了方向。我的 2007 年表现见于图 3.4。几乎每种工具的亏损交易困扰着我的努力,到三月底时我面临 50%的回撤。到五月中旬,由于橙汁和瘦猪肉(我作为修改的一部分添加的市场)的一些良好交易,我恢复到盈亏平衡,接下来几个月我都保持在这个水平。

images

图 3.4 我的权益图表,2007 年世界杯比赛账户

在 2007 年夏末和秋季,瑞士法郎和 30 年期国债出现了良好的趋势,我按照我系统的规则进行交易。到年底,我的收益再次超过 100%,这足够让我获得第二名。迈克尔·库克,这位我在 2006 年最后阶段一直关注的交易者,在 2007 年超越了我,年底时的收益高达 250%。

images 关于比赛的反思

在期货交易锦标赛中连续三年获得前两名,每次都超过 100%的回报率后,我对自己的交易感到非常满意。对我来说,这并不证明我是一个优秀的交易者,而是让我更加意识到设定目标和目的的重要性。由于我开发了自己的交易系统,使我有机会赢得比赛,我现在意识到,如果没有事先确立的目标和目的,这场比赛就只能被视为赌丨博。正如你在书中稍后会看到的,目标和目的在我的工作中是关键部分。

在 2005 年获得第二名后,我想让我的非正式导师,市场奇才范·萨普博士,知道我的成功。我与范有一种联系,因为我参加过他的许多自学课程,并且读过他大部分的书。他是我曾经拥有的最接近导师的人。我为自己感到骄傲,也想感谢他。他当然为我的成功感到自豪,但他也说了这句话:

“虽然凯文已经交易和学习了 15 年,但大多数在交易比赛中获胜的人都在做一些非常危险的头寸管理。所以注意你的反应。你是否对赢得比赛的人感到印象深刻?还是你的直觉反应是学习如何在任何市场中有效交易——并且只要继续参与就好!”

我花了很长时间才明白范所说的这句话,起初我的反应是愤怒(“怎么可能有人对我的成功不感到印象深刻?”)。但最终,我意识到范的话中蕴含的智慧。令人印象深刻的并不是赢得比赛——运气、鲁莽和许多其他因素都可能影响最终结果。令人印象深刻的是有效地进行比赛交易。对我而言,这意味着遵循我的系统,这个系统专门设计用于平均每年约 100%的回报率。所以不要被表现本身所打动。我当然不会。我所钦佩的是我在设定目标、追求目标并实现目标方面的纪律。对我来说,这才是真正的成功。

第四章

跃迁——转向全职交易

每个兼职零售交易者的梦想——一个热爱交易所有方面的人——都是全职交易,靠交易为生。至少这一直是我的目标,过上梦想的生活。交易者加里·史密斯写了一本书,标题正是这个:《通过有利可图的日间交易股票期货来实现梦想》(高级交易研讨会,1995 年)。当然,梦想是每天用你惊人的策略在市场上获得胜利,从市场中提取你所需的资金(想要一辆新车?简单——只需把你下次交易的规模加倍!),花费充足的空闲时间陪孩子玩或者做志愿者,或者进行典型的刻板印象行为:在海滩上悠闲地躺着,手中拿着玛格丽塔,身边走过的是穿着比基尼的女人(或者如果你喜欢的话,是壮汉),在你自己的私人岛屿上。

问题在于,梦想很少,甚至从不,成为现实。事实是,全职交易,正如我告诉许多人,依我看“是最艰难的轻松赚钱方式。”但这并不意味着不可能做到;这只是意味着非常困难。任何值得追求的伟大事物总是艰难的,对吗?

在大约 15 年的兼职交易和许多不成功的交易之后,我有了连续 3 年的比赛获胜表现。2007 年结束时,我开始认真考虑将交易作为全职职业。毕竟,如果我不能成功,经过我所经历的一切以及所取得的成就,谁能成功呢?所以在 2008 年初,我决定勇敢一跃,全职交易为生。我以为自己已经搞明白了全职交易的所有事情。天哪,我错得离谱!我跳入全职交易时做了一些事情,有些做错了,还有很多事情如果可以重来,我会选择不同的方式。

images 信心

尽管你需要许多东西来成功交易(资本、策略、计算机等),但自信会比大多数其他因素更影响你在全职交易中的长期成功。让我花了很长时间才明白,我的交易成功与失败并不是因为拥有最快的计算机或拥有完美策略,而是对自己交易能力的自信,对策略发展的自信,以及在面对严峻回撤时始终保持乐观的信心,这些都帮助我作为一名交易者生存下去。显然,仅凭自信是无法达到目标的——无论一些交易大师怎么说——但在某个时刻,你需要自信来应对交易风暴。不论是重大回撤、多次失败的策略,还是无法开发新方法,迟早你对自己能力的信心将是度过艰难时刻所必需的。在经历了三年的交易比赛获胜后,我感到自己有信心取得成功。毕竟,每天看着三个交易奖杯(图 4.1)让我觉得自己是无敌的。

images

图 4.1 我的比赛奖杯

我做对了什么

我有足够的信心认为我能在全职交易中成功。

我做错了什么

当我开始以交易为生时,我可能自信过头。毕竟,赢得交易比赛很不错,但这是否意味着我真的能全职交易?现在我当然明白这一点。那时,我把比赛的成功等同于全职的成功。这是一种危险的思维方式。

images 资本

我相信你听过那些从$1,000 开始并将其发展成丰厚全职交易职业的故事。我同样相信,对于每一个这样的成功者,可能有 999 个以同样金额起步并失败的人。毕竟,正如我在后面的章节中将展示的,资金不足是通向破产的最简单道路,无论你是否拥有优秀的交易策略。如果你的资金规模小于对手,即使是持平策略也会导致破产。迈克尔和艾伦·卡普兰的优秀书籍Chances Are … Adventures in Probability(维京企鹅出版社,2006 年)对此进行了很好的描述:

让我们想象一些佛教徒开了一家赌场。不愿意对任何人占不公平的便宜,管理层提供了一种完全公平赔率的游戏:与银行掷硬币,正面赢一美元,反面输一美元。随着时间的推移,会发生什么?这个游戏会永远进行下去,还是有一位玩家最终会将另一位玩家清空?

一种可视化的方法是想象赌徒手中只剩下最后一美元的瞬间。你同意他避免破产的机会微乎其微吗?现在增加你想象中他口袋里的金额,同时相应减少银行的资本;你认为在什么情况下赌徒破产的机会与银行相等?是的:当他们的资本相等时。严格计算证实了两个严酷的事实:游戏必然以一方的破产结束,而那一方会是最初资本较小的。即使生活是公平的,也并非如此。你在这个世界上的机会与口袋的深度成正比——赌场凭借其身份获胜。

当然,你可能会抗议:“但我有优势,因此我会长期获胜。”虽然这是真的,但请记住,你的优势可能很小,并且可能不会永远存在。随着时间的推移,它可能会回归到持平,这意味着你的账户规模变得至关重要。你能否比对手更持久?

我所做的对的事情

我以一个低六位数的账户开始全职交易,尽管我将其中一部分资金保持在交易账户之外,实际上是“留作备用”。我觉得我的资金状况相对合理。

我所做的错事

根据我的启动资金,我必须每年获得 50%到 100%的回报,才能支付生活费用、税款,并略微增加我的交易账户。哇!回想起来,我意识到我真是疯狂,开始时的资金大约比我应该有的少了 10 倍。另一位全职交易的朋友曾告诉我,他认识的每位成功交易员在开始全职交易之前都以 200 万到 300 万美元起步。尽管这个数字听起来很疯狂(六年前我开始全职时会对此嗤之以鼻),但现在我认为这是合理的。毕竟,你希望你的交易账户随着时间的推移而增长,并希望从中提取生活费用,同时还需要应对不可避免的回撤。在资金紧张的情况下,几乎不可能同时实现这三点。

images 生活费用

当我在 2008 年开始全职交易时,我很幸运地储蓄了三到五年的生活费用。这笔储蓄不属于退休金,也不属于我的交易资本。我认为这是全职交易时生活费用的关键问题。交易本身已经足够紧张,而不必担心下顿饭或按揭款从哪里来。你需要感到安全,知道你的费用是有保障的,即使你一开始就遇到回撤(对我来说这似乎总是如此!)。

我做对了什么

由于多年的储蓄,以及我在工作中获得的一项丰厚的股权转让协议,我能够轻松覆盖生活费用,甚至在家庭不断增长的情况下也是如此。知道这一点让我能够全心全意地专注于我的交易。

我做错了什么

没什么。我认为有三到五年的生活费用储备是个很好的决定。

images 家庭支持

我可能是少数派,但我有(并且仍然有)一位深爱我的配偶,她完全支持我全职交易的梦想。对我们来说,这意味着我放弃了在航空航天行业的高管职位,那里可谓是天高任鸟飞。但她意识到,我的心并不在向无情的公司牺牲我的灵魂上,我注定要追求更好的事物。我的孩子们也支持我的交易,因为他们还小,这实际上是他们见过的唯一的“工作”。他们知道什么时候是玩耍时间,什么时候爸爸需要工作。在他们眼中——对我来说也是——这似乎有很多工作,而玩乐的时间却不够。

我做对了什么

我嫁给了合适的人,她完全理解并支持我的交易。现在,经过六年的全职交易,她仍然全心投入我的旅程,我的三个孩子也是。

我做错了什么

我几乎完全做对了这一点。我不敢想象如果没有支持我的配偶和家庭,全职交易会有多困难。

images 家庭办公室设置

为了节省开支,我决定在家里的专用办公室进行交易。干扰很多,尤其是现在有三个小孩子在周围跑。有时候我的工作会被一堆蜡笔画埋没,有时候一个过于热情的孩子会不小心在没有保存的情况下关闭电子表格。此外,我的长子甚至在我的开放交易平台上进行了一些迷你标准普尔交易。至少他的交易是赚钱的!总的来说,我不能抱怨,因为对我来说,高峰时段的交通只是需要躲避楼梯上的几个乐高。

我做对了什么

我为我的交易业务创建了一个专用办公室。

我做错了什么

我可能应该设立更严格的界限,比如不碰爸爸的电脑。但大多数时候,孩子们的干扰并没有问题。

images 交易策略

当我开始全职交易时,我有大约三到五个我觉得可以实时使用的策略。不幸的是,我没有任何额外的策略在等待中,当我第一组策略失去表现优势时可以交易。那时,我天真地认为可以永远交易同样的策略。现在我意识到,有些策略像天空中的星星一样,长时间闪烁。而其他的,更像流星——在它们坠落到地球之前,你需要停止交易它们。

我做对了什么

我有多种策略可供交易。即使从一开始,我就知道只依赖某一种特定的方法是个坏主意。

我做错了什么

如果我今天开始全职交易,我会确保每个实时策略都有至少一个良好的策略准备替代。此外,我会确保有一长串潜在的策略可以测试和评估。

images 经纪商

就像交易的其他方面(电脑、互联网连接、策略等),确保你有一个备用经纪商至关重要。我并不是说要有备用的交易台电话号码(顺便说一句,你当然应该随时准备好)。我的意思是,在多个经纪商那里拥有多个账户,理想情况下有不同的清算公司。经纪商有时会失败(我曾是 Refco 破产和 PFG Best 腐败老板的受害者),通过拥有多个账户,即使一个经纪商出现问题,你仍然可以交易。由于我交易多种策略,这也使得记账稍微简单一些,因为我经常会将一个策略专门分配给一个特定的账户。

我做对了什么

我有多个经纪商,使用多个清算公司。所以我认为在这方面我还算聪明。

我做错了什么

在过去的 15 年里,我经历了两次经纪商破产,每次都有明显的警告信号——我错过或忽视了这些警告信号。我以为系统会让我得到补偿,确实在 Refco 的案例中发生了。但我仍在等待 PFG Best 案中大部分的钱。这让我很生气,你可以通过观看我在福克斯商业频道的采访亲自看到这一点(访问www.foxbusiness.com,搜索“davey”,你会看到我的采访)。

images 自由时间

啊,那段有空闲时间的工作日子。那大部分是我在企业世界的生活。但现在,作为全职在家工作的人,我感到随时需要查看市场。交易的想法不断涌入我的脑海,我立刻跑下楼去编程和测试它们。如今,我的大部分清醒时间都在思考或进行交易。我在追求全职交易的生活中变得过于单一。我想我的妻子认为我的交易电脑实际上是我身体的一部分,因为我似乎和它紧密相连。

当然,对于许多离职后开始交易的人来说,情况可能正好相反。所有的自由时间,没有老板和规则,导致许多潜在的交易者过上懒散的生活。有时保持动力并继续开发新的交易策略是很困难的,尤其是当你的交易账户出现亏损时。动力确实可能成为一个问题,尽管这今天可能不会影响表现,但未来可能会影响表现。

我做对了什么

我一直足够自律,持续工作,从未停止改进我的交易。

我做错了什么

我可能花太多时间在交易上,我敢打赌这些额外的小时中很多并没有一点成效。交易者,和任何其他自我驱动的工作者一样,需要平衡。我需要在这方面努力。

images 冒险一试

一旦我把前面的所有事项都安排到我当时认为可接受的程度,我就准备冒险一试。我在 2008 年 5 月全职投入交易,从那时起我再也没有回头。难吗?绝对不!有趣吗?肯定有!如果有机会我还会再做一次吗?当然,不过第二次我自然会更聪明。这里的主要点是我有一个目标,思考了所有的细节,并最终冒了险。如果我—一个在阅读了一些书籍并开始交易之前没有任何交易知识的人—能做到,我认为大多数人也能做到。如果你的心中有它,就像我一直以来那样,通往交易成功的道路就容易得多。如果你觉得讨论策略的开发令人厌烦,我的建议是:离开—交易可能不适合你。

随着我全职交易多年后回顾自己的交易日,我发现大部分交易活动并不是下单或查看账户报表。相反,我的日常活动主要包括开发策略、寻找创意、思考交易,以及当然,测试和评估潜在策略。书中大部分内容正是围绕这一点展开——我如何评估、设计和测试交易策略。

第二部分

你的交易系统

第五章

测试和评估交易系统

如果你打算设计交易系统,了解如何评估交易系统的性能指标至关重要。这并不总是像听起来那么简单。为了让你明白我的意思,看看图 5.1。这个权益曲线是一个期货交易系统的,典型地表现出如果你自己测试策略,或者你可能在互联网上找到的一个系统。这个曲线是使用 TradeStation 软件生成的,但其他流行程序的结果,如 MultiCharts 和 NinjaTrader,基本上是一样的。所有好的交易软件都提供多种重要的(在我看来,许多是不重要的)指标供你审查和检查。大多数时候,权益曲线和性能报告引发的问题比答案还要多。结果是好是坏?结果可信么?结果有任何预测价值吗?最后,如何将好与坏区分开来?我将在本章中回答这些问题和更多内容。

images

图 5.1 交易系统结果——这可信么?

在查看性能报告、权益曲线或交易数据时,首先要意识到并理解的一点是那句老话:“如果听起来好得令人难以置信,那可能真的不可信。”一般来说,交易系统的未来表现几乎从来都没有其历史表现那么好。事实上,一个交易系统在历史测试中表现越好,未来表现如此优秀的可能性就越小。当然,这条规则也有例外,经过一段时间的交易策略开发,这些例外会变得更容易发现。

为什么历史测试结果通常看起来比未来结果更好?部分原因与存活偏差有关,这意味着通常只展示表现良好的历史交易系统。为什么供应商会出售历史表现不佳的系统?为什么你会交易自己创建的糟糕系统?简单的答案是,在这两种情况下,糟糕的结果会被丢弃,只留下剩余的良好结果。

也有可能历史测试结果确实有效,系统开发者在市场中发现了真实的优势。然而,随着时间的推移,这种优势可能会消失,原因可能是其他人发现了它、市场变化或其他各种原因。然后,交易系统会回归均值,这将是一个在扣除佣金和交易成本之前的盈亏平衡策略。

历史测试结果看起来可能比未来结果更好,这与历史测试的方法有关。大多数人错误地测试和评估系统。稍后在书中,你将学习一种正确的测试和评估系统的方法,但现在只需意识到,公认的测试标准是错误的。这种错误的测试导致过于乐观的结果和一定会让最终用户失望的交易系统。当然,经验丰富的交易者知道如何测试系统。问题是:在查看历史结果时,你如何知道该相信什么?

图 5.2 描绘了我所称的性能结果“废话”计量器。它给你提供了一个想法,让你知道如果有人提供交易结果,你可以相信谁。

图片

图 5.2 交易系统结果的“废话”计量器

在这个等级的最顶部——拥有最多“废话”的群体——是交易系统供应商。我将这个群体放在最上面,尽管我曾是这个群体的一部分(虽然我用自己的钱进行交易,不像这个群体中的大多数人)。一般来说,任何你从想要向你出售信号、黑箱系统、订阅、交易室等的人那里获得的业绩信息都值得信任。一个优秀的通用规则是:不要相信任何这些。

我意识到这种方法很极端,但考虑到供应商出售优秀交易系统的概率,相比于供应商向你出售看起来不错但实际上糟糕的系统,这是合理的建议。通过避免任何向你提供绝佳交易系统的人,你将节省很多钱。任何仅以少量钱提供优秀交易系统的人,都不能通过我的“嗅觉”测试——供应商应该自己进行交易,赚取丰厚的利润,而不是在互联网上低价兜售系统。这就是为什么交易系统供应商位居“废话”榜首的原因。

由于交易系统供应商通常提供毫无价值的垃圾,你可能会倾向于走“自己动手”(DIY)的路线。对于那些 DIY 者,有数十种交易平台可以帮助你分析、测试和优化你想要创建的任何类型的交易系统。从表面上看,这似乎是一个很好的方法,仅依靠自己、自己的想法和交易软件。问题在于,稍后将详细讨论,开发交易系统并不像软件供应商所声称的那么简单。事实上,遵循软件建议的方法的新开发者不可避免地会创建一个过度优化、曲线拟合的交易系统。这种系统会产生很好的回测,但在实时未来中几乎从未表现良好。因此,初学者 DIY 开发者在“废话”等级上排在交易系统供应商之下。

如果从供应商那里购买充满风险,而初学者的 DIY 开发者也没好到哪里去,那么还有什么选择呢?如果你坚信必须让其他人提供交易系统或信号,使用经纪商提供的系统或商品交易顾问(CTA)系统将是一个更好的选择。让我们快速看看他们提供的内容,以及其优缺点。

许多期货经纪商现在提供他们所称的“经纪人协助”或“跟随信号”类型的服务。提供这些服务的两个机构是 Striker Securities (www.striker.com) 和 World Cup Advisor (www.worldcupadvisor.com)。(完全披露:我过去曾经或将来计划通过这两家经纪商提供信号。根据我的个人经验,我认为他们是值得信赖的。)支付月费后,你可以“跟随”信号提供者的交易信号。信号提供者通常会在经纪商那里有一个账户,并会进行实时交易。因此,所显示的结果通常是真实结果,远远高于大多数交易系统供应商所展示的“真实”内容。

当然,仅仅因为这些服务提供的结果来自于一个交易账户,并不意味着你会获得相同的结果。即使是真实结果也应被视为假设性结果。事实上,我的一般原则是,除非结果确实发生在你的账户中,否则你必须将这些结果视为假设性的。正如你所知,假设性结果给实际结果的变化留出了很多空间,你应对此做好准备。这是经纪服务的一个缺点。

经纪商提供的信号服务的另一个可能缺点是,提供信号的开发者或经纪商本身可能会出现问题。例如,如果开发者采用自由裁量的交易方式,个人危机可能会影响他的交易,而曾经有效的交易方法现在可能变得无效。在经纪商方面,像 2012 年 PFG Best 公司的腐败和破产那样的迅速和突发的欺诈,可能会使你的账户处于风险之中。

如果你选择跟随商品交易顾问(CTA),知道该组织接受监管机构和会计师事务所的审计,并且交易结果通常是准确的,这令人感到安慰。当然,总有一些不道德的坏分子混入其中,他们可能会在许多年内产生出色的结果,然后在欺诈和欺骗的爆炸中被摧毁。伯尼·麦道夫和他的公司虽然不是 CTA,但却是一个值得信赖的投资公司实际上是一个彻底的欺诈的好例子。

如果你不能相信交易系统供应商,而经验不足的 DIY 交易系统开发者也没好到哪里去,经纪商和 CTA 虽然更好但也有风险,那么你该怎么办?在这个 BS 图腾柱上,最低的层级是什么?

我的观点是,经验丰富的 DIY 交易系统开发者最不容易受到虚假信息或其他无效表现报告的影响。我这样说有几个理由。首先,经验丰富的开发者了解自己的交易回测软件,并且知道如何欺骗它。他知道如何避免这些软件的限制,而许多交易系统供应商则积极利用这些限制,制作出虚假的、看似非常优秀的表现报告。

另一原因是,经验丰富的开发者在创建自己系统时掌控整个过程。他可以消除许多潜在问题,例如错误或缺失的市场数据、不正确的前瞻性规则,以及过度优化和曲线拟合。掌控整个过程是一项巨大的责任,但经验丰富的开发者能迅速解决问题,因为最终他对自己的结果负全责。

当然,单靠多年的交易系统开发并不能使人变成专家。关键在于开发系统并实时验证其表现。在几年的过程中,一位优秀的开发者会越来越擅长为交易系统生成历史结果,这些结果在未来的有效性也会越来越高。当然,如果操作得当,一位经验丰富的 DIY 开发者在虚假信息的比例上可以相当低。

此时,一些读者可能会问:“为什么还要测试呢?这只证明过去某些事情有效,和未来表现无关。”这个论点在某种程度上是有一定道理的。确实,“过去的表现并不能预示未来的结果”,这也是为什么美国政府在讨论交易系统表现时要求使用这个免责声明。但是,这是否意味着历史测试没有任何有效性呢?我并不这样认为。

这里有一个例子。假设你想建立一个关于太阳升起的模型。一个月的时间里,你每天黎明前起床,等待太阳出现。每天,太阳都是从东方升起的。那么,你构建了模型,运行明天的预测,它“预测”太阳将从东方升起。那会是真的吗?谁能确定呢?某种奇怪的轴切换或地球自转反转可能会在夜间发生,太阳可能会从北方、南方或西方升起。这种可能性非常小,没错,但 2010 年的闪电崩盘和 2008 年的金融危机也同样出人意料。极端和意外事件确实可能发生。

如果这样的灾难发生,这是否意味着模型毫无用处,永远不应该被构建?不,但你必须考虑到你建模的世界发生了巨大变化。交易系统也是如此。全新的市场条件可能会在明天、下周或下个月使你的交易策略变得无用,或者根本不会。但我认为,基于历史的模型比完全猜测要好得多。通过猜测,你很可能在明天早上太阳升起时朝错误的方向看。

在评估交易系统及其表现报告和权益曲线时,区分如何获得结果非常重要。有四种主要方法来产生结果:

  • 历史回测

  • 超出样本测试

  • 向前走测试

  • 实时测试

接下来将逐一讨论每种方法。

images 历史回测

历史回测是最常见的测试方法。这也是最容易执行的,也是最容易滥用和误用的。开发者只需输入开始日期和结束日期(通常是今天的日期),包括任何要优化的参数,然后让策略引擎进行所有计算。最终结果将是该时间段内的最佳参数集,可以用于真实交易。

不幸的是,以这种方式进行回测时存在一个主要问题。假设结果不是由于过度优化造成的——规则过多、参数过多和/或参数值过多——历史结果在定义上看起来会非常好。毕竟,这些结果来自于优化!未来的结果几乎没有可能接近优化结果。这些结果对测试中使用的数据过于“调谐”了。

一个很好的例子在图 5.3 中展示。仅仅看一个简单交易系统的优化结果,似乎这是一个可行的系统。但这只是因为你看到的是优化后的结果。换一组参数,系统的表现就会更糟。往前看,你认为哪种结果更可能——那个优化过的良好结果还是许多糟糕的结果?我希望答案非常清晰:糟糕的结果更真实地反映了实际系统性能。令人误解的是,这些系统在优化后有时会在一段时间内表现良好。然而,通常来说,优化越多,系统在未来表现良好的可能性就越小。

images

图 5.3 优化结果在测试后常常崩溃

images 超出样本测试

只有最缺乏经验和天真的开发者才会在整个历史数据集上测试和优化他们的交易系统。如果你一直以来都是这样做的,这句话可能会让你感到愤怒。但很可能你的实时交易结果并不好,或者至少不是一直都好。很多原因都可以归结为在与优化时相同的数据上评估策略的表现。这并不是一个很好的做法。相信我,我知道——在市场通过从我的账户中取钱告诉我我做错了之前,我一直在这样做!

一些开发者通过包括一个超出样本的时期来规避这个问题。这在图 5.4 中有所展示。超出样本的时期将是 10%到 20%的数据,这部分数据在优化后保留供复审。通常,留作超出样本测试的数据是最新的数据。然而,我见过有人将其应用于他们优化数据之前的数据。这种替代方法的理论是,优化应包括最新的数据,以便策略“调优”到当前市场条件。

images

图 5.4 超出样本的测试结果

在超出样本数据上进行测试比在所有数据上优化要好得多,尤其是当超出样本的时期有大量交易时。如果优化后的结果在超出样本数据上表现良好,那么对这些优化结果的信心就会更大。这可能在实时中表现得更好。

超出样本方法的一个问题是,优化参数是永久设定的。因此,例如,如果你优化了交易系统并得到 X、Y 和 Z 作为系统的最佳输入,这些输入就不应改变。但也许由于市场条件的变化,你确实希望能够更改输入参数,或者至少在持续的基础上检查它们。通过这种方式,超出样本测试的想法可以更进一步。结果分析,向前走分析,要好得多,并且更接近现实。

images 向前走分析

向前走分析比传统的回测要复杂得多,但结果通常值得付出这些努力。向前走分析可以手动进行,并结合交易软件的优化。这是我曾经在世界杯比赛中取得优异成绩所使用的方法,我鼓励你手动尝试几次,以充分理解这个过程。之后,许多交易软件包现在都在其可用工具中包括向前走分析。

向前走分析背后的想法很简单:表现结果和优化结果基于两个不同的数据集。这可以在图 5.5 中看到。向前走分析就是将许多超出样本的时期汇总在一起。

images

图 5.5 前向分析

正确进行的前向分析结果,往往比简单的优化测试更接近现实。这个样本在图 5.6 中展示,显示前向分析和实时结果相当可比。实时与前向结果之间的绩效没有显著的差异。

images

图 5.6 前向测试结果

当有大量历史数据可供分析时,前向分析是一个很好的工具。这是我推荐的方法。但在历史数据不多的情况下,最佳的方式可能是在实时中测试和评估交易系统。

images 实时分析

一些非常成功的交易者由于这种测试固有的冲突和问题,避免所有形式的回测。这些人只是实时测试策略,甚至可能使用真实资金。这种方法的明显优势是,不可能将规则适配于过去数据并利用后见之明。一个重大缺点是,你只能以市场速度收集数据。直到你在实时中测试多年,才有可能在多年内收集统计数据。大多数人没有耐心等待这样的测试完成。另一个缺点是,每当策略更改时,时钟就会回到零,评估重新开始。这可能会真正延长测试周期。

出于上述原因,大多数人并不认为实时测试,即使有其优势,也是一个可行的解决方案。然而,在本书后面展示的交易系统开发方法中,实时分析被使用,并为交易系统提供了有用的验证。

第六章

初步分析

现在我们已经检查了测试交易策略和生成交易绩效报告的主要方法,我将分享我认为这些报告中重要的内容。典型的总结绩效报告如图 6.1 所示。完整的 TradeStation 生成的绩效报告至少有七页,并包括数百个计算参数、交易列表和绩效图表。提供的信息量实在令人不知所措。结果显示,很多结果在评估交易系统时并不那么重要。“回撤—变异系数”的绩效指标可能对某些人重要,但对我来说却并非如此。

images

图 6.1 样本绩效报告

和交易的多数方面一样,我试图保持我的绩效报告分析简单。通常我只需要几个数字就能进行对任何交易系统的粗略审查。一旦我找到我喜欢的东西,我就会深入探讨。

首先,必须设定一些基本规则。绩效报告应基于实时数据或前向测试。优化的回测结果甚至不应被分析,因为它们的结果是虚假的且具有误导性。接下来,应有多年的数据,并有大量的交易。一个好的经验法则是 5 到 10 年的数据,以及每个交易规则 30 到 100 笔交易。第三,我通常会审查未应用头寸大小的绩效报告。在审查许多绩效报告时,比较“苹果与苹果”将非常重要。如果你查看一个基于单合约交易的绩效报告,并试图与另一个使用多合约头寸大小的报告进行比较,公平比较几乎是不可能的。此外,糟糕的策略通过头寸大小可能看起来吸引人。为了简单起见,我只有在对策略的可行性感到自信后,才考虑头寸大小。

最后,报告中必须包含佣金和滑点的准确假设。许多时候,我看到的业绩报告没有这些值,创作者却轻描淡写地回应:“这些成本可以稍后添加,没问题。”不包括佣金和滑点,不仅极不道德——如果不是不道德——因为这些成本对交易系统的影响,暗示开发者并不真正理解适当的策略开发。很容易证明,未考虑佣金和滑点的测试会导致选择交易频率更高、每笔交易平均利润更低的交易系统。例如,如果你基于净利润或类似的东西进行优化,优化器通常会给出一组最佳参数,使你交易过于频繁。这里有一个例子:

无滑点或佣金

  • 参数设置 1:每笔交易毛利 = $25,1,000 笔交易,毛利 = $25,000

  • 参数设置 2:每笔交易毛利 = $50,300 笔交易,毛利 = $15,000

优化器将选择设置 1 作为更优选择。

带有 $25 滑点和佣金

  • 参数设置 1:每笔交易净利 = $0,1,000 笔交易,毛利 = $0

  • 参数设置 2:每笔交易净利 = $25,300 笔交易,净利 = $7,500

优化器将选择设置 2 作为更优选择。

哪种方法更好?在第一种情况下,这样的系统在现实世界中将使平均交易者耗尽账户。绝非“你可以稍后加入佣金和滑点”那么简单。然而,第二种情况产生的结果要现实得多。因此,其他条件相同的情况下,考虑滑点和佣金的优化方法更接近现实,应该始终使用。

在这些基本规则到位后,我首先查看的数字是总净利润。这似乎是不言自明的,因为如果没有利润,为什么还要继续查看报告呢?可能显示的净利润并不值得,可能是由于涉及的时间段或必须忍受的回撤,但无论如何应该有利润。在我的经验中,经过前瞻性回测,每份合约的年净利润至少应为 $5,000,最好是 $10,000 或更多。任何低于这个数额的收益在风险调整基础上可能都不值得,或者交易次数不够,无法具有统计意义。

利润因子是我接下来审核的数字。显然,这里的数字越高越好。很多人说,只有利润因子大于 2.0 的系统才是可以接受的,但我并不认同这个观点。在我看来,任何超过 1.0 的利润因子至少都有一些价值,所以我不会仅仅基于这个数字而排除介于 1.0 和 2.0 之间的系统。不过,我确实发现利润因子低于 1.5 的系统通常很难通过开发过程中的其余步骤。

我总是审查交易总数,以确保在测试期间进行的交易足够多。例如,如果报告中仅包含 5 笔交易,那么结果到底有多有效呢?我通常会使用每个策略规则至少 30 到 100 笔交易的粗略指南。因此,例如,如果我有四个策略规则,我希望在报告中看到至少 120 到 400 笔交易。显然,交易越多越好。

平均交易净利润是我查看的下一个绩效数字。由于这个数字是扣除佣金和滑点后的,所以这是比较交易系统的一个好且简单的方法。我通常希望看到每笔交易的平均值在 $50 或以上,基于交易一份合约。对于平均交易值低于 $50 的系统,可能仍然可行,但你越接近 $0 的盈亏平衡线,允许错误、失误和轻微表现变化的余地就越小。

我接下来审核的数字是平均亏损交易,我将其与平均交易净利润结合起来计算期望值。关于期望值及其计算方式有很多困惑,所以我将在这里解释。

许多交易者以这种方式计算期望值:

期望值 = 平均 $ 胜利者 * 胜率 + 平均 $ 输家 * 失败率 = 平均交易

其中平均 $ 输家是一个负数。

注意,这也是平均交易净利润。因此,使用这个方程计算期望值并没有提供超出平均交易净利润已知信息的任何额外信息。

替代期望值可以按如下方式计算:

期望值 = (平均 $ 胜利者 * 胜率 + 平均 $ 输家 * 失败率) / (-平均 $ 输家)

这个指标是有用的,因为它是一个风险调整后的值。它基本上说明了你每冒险一美元,预期回报是多少?因此,若期望值为 0.2,你可以预期每冒险$1 会获得 20 美分的收益。这个期望值受到了交易心理学家和教育者 Dr. Van Tharp 的高度推崇,为了避免将来的混淆,我将这一计算称为“Tharp 期望”。对我来说,它比计算期望的第一种方法更有价值。

对于 Tharp 期望值,我通常寻找大于 0.1 的值。低于这个阈值的交易将很难进行,并且可能需要承受过大的风险以换取太少的回报。

我在绩效报告中查看的下一个数字是总滑点和总佣金。如果这些数字为$0,我会立即丢弃报告,并忽略我可能看到的所有其他结果。没有无成本交易,因此任何显示这种情况的绩效报告都是虚假的。一般来说,我需要每合约每个回合的交易佣金为$5。毕竟,这是折扣券商在加上所有交易所费用、全国期货协会费用等后收取的典型值。佣金可以低于这个数字,特别是如果你进行大量交易或是交易所会员,但$5 的数字对大多数零售交易者来说是合适的。

总滑点比总佣金更为关键。许多开发者,尤其是那些从未交易过的人,始终低估了现实世界中经历的滑点量。我将滑点定义为软件策略回测引擎给出的成交价格与实际成交价格之间的差异。例如,许多策略引擎假设在买入时按买价成交,而在实际交易中你会按卖价成交。这种差异就是我认为的滑点。根据我的经验,我假设重度交易市场的滑点值如下:

  • 市场订单:每个回合 1 到 2 个点的滑点。

  • 停止订单:每个回合 1 到 2 个点的滑点。

  • 限价订单:0 个点的滑点。

棘手的部分在于,典型的交易策略将混合使用市场、限价和停止订单。在这种情况下,如果你只能对每笔交易应用一个滑点值,那应该是什么呢?我发现在这种情况下采取保守态度是有帮助的。对于这些混合订单类型策略,我通常会每个回合交易应用 1.5 到 2.0 个点的滑点。我发现这通常有点悲观,但总比低估滑点成本而对现实结果感到失望要好。

我在表现报告中查看的最后一个数字是最大回撤。我没有设定回撤限制的具体标准,但如果我看到某个策略的最大回撤为$10,000,而净利润仅为$15,000,就会引起警觉。在我心里,我会考虑回撤,知道在实时交易中我可能会看到更大的回撤。如果我无法承受这种回撤,我会立即放弃该系统。否则,我知道高风险、低回报的策略会在后面的步骤中被淘汰,因此我不会立即排除该策略。

无疑,表现报告中还有其他重要数字。例如,许多人对胜率、夏普比率或数百种其他指标非常信任。事实是,所有指标在一定程度上都是重要的,开发者应该尽量找到自己熟悉的指标。最终,任何依赖的指标都应通过导致成功的实时策略来证明自己。

一旦我完成了对表现报告的审查,我通常会查看一些交易图表。我对一张图表特别感兴趣:已平仓交易的权益图。如果你是一个视觉学习者,仅仅查看一个权益曲线——无论是已平仓交易的权益曲线还是每日权益曲线(如图 6.2 所示)——可能就能告诉你所有你需要知道的内容。以下是我在权益图中关注的主要事项。

images

图 6.2 示例权益曲线

我在权益曲线中寻找的第一件事是斜率。如果图表没有稳步从左下角上升到右上角,可能不是一个很好的策略。问题在于,图表可能会因为使用的缩放而扭曲。因此,查看最终权益也很重要,然后将其除以曲线中的年数。这将给你一个年均利润的好指示,判断该策略是否值得投资。

在斜率之后,我喜欢寻找平坦的时期。显然,平坦的时期比回撤时期要好,但许多被快速上涨穿插的时期应引起关注。这样的权益曲线表明,该策略可能只抓住了一些好的交易,这可能是由于曲线拟合或过度优化所致。平坦的时期也可能是由于政府干预造成的,例如 2009 年至 2013 年间美国的量化宽松计划(QE、QE2、QE3)。在这种情况下,可以假设政府干预结束时表现会改善。当然,何时以及是否会结束某种形式的政府干预,谁能预测呢?

我关注的第三个主要项目是回撤期。回撤的严重程度如何,策略需要多长时间才能从这些回撤中恢复?这些问题的答案将让你对如果实际交易这个策略时应该期待什么有一个大致的了解。未来的回撤可能更严重,持续时间可能更长——你的仓位规模和资金管理应该假设这两种情况都会发生——但至少你可以对预期有一个大致的了解。

权益曲线上没有任何回撤的情况也应引起关注。我知道除了存入储蓄账户的钱,没有任何真正的系统仅有小幅或没有回撤。同样,曲线必须“看起来”真实。没有风险的回报是不现实的。

我在权益图表上检查的最后一项是曲线的“模糊性”。这在封闭的权益图表上无法看到,但在每日权益图表上可以看到。曲线越模糊,每日结果的波动就越大,即使长期趋势向上,短期内也会上下波动。非常模糊的曲线更难交易,更难进行仓位规模调整,也更难情感上应对。想想看:如果系统 A 在第一天获得$200,第二天损失$200,第三天获得$75,这是否比系统 B(每天稳定获得$25)更可取?两者的最终结果相同,但系统 A 的模糊性使其不如系统 B 有吸引力。

显然,仅仅查看权益曲线并不是评估交易系统的科学或严格的方法。但这对于初步分析是有用的。如果你对权益曲线的表现不满意,就没有必要查看绩效报告的详细信息。在这种情况下,你可以节省很多时间,只需花几秒钟盯着权益曲线,然后拒绝一个你不喜欢的系统。

到目前为止的讨论集中在简单、快速的数字和方法上,以评估交易系统的绩效。这种分析在开发的早期阶段非常有用,因为大多数策略都不靠谱,快速的初步审查可以排除它们,从而为你作为开发者创造新系统腾出更多时间。但最终,你将需要对绩效结果进行深入分析。这是一个完全不同的层面。

第七章

详细分析

随着交易策略的发展,分析也在不断进步,策略必须满足的绩效障碍变得越来越严格。在后期阶段,我主要采用蒙特卡罗分析方法。但在我解释如何进行分析以及我关注结果中的哪些内容之前,我首先简要描述一下这个过程。

images 什么是蒙特卡罗分析?

蒙特卡洛分析或模拟听起来是一个艰巨的话题,但实际上并非如此。使用我创建的蒙特卡洛电子表格,你可以免费下载(www.wiley.com/go/algotradingsystems),分析过程相当简单。那么,它实际上是什么呢?

想想你策略中的个别交易。这些交易按发生顺序依次进行,形成策略的权益曲线。但如果这些交易的顺序不同呢?回撤是否会变得更严重?最终权益是否会不同?这些都是蒙特卡洛分析可以回答的问题。

在最简单的形式下,你可以这样理解:首先,准备一些小纸片,每个纸片对应你策略中的一个交易。然后,在每个纸片上写下一个交易结果。当你记录完所有交易后,把所有纸片放进一个帽子里。随机选择一张。这就是你的第一次交易。记录它,将其加入你的初始权益中,然后把纸片放回帽子里(这称为有放回的随机抽样)。然后,选另一张纸片,记录它的值,并将其加入你正在构建的现有权益曲线中。

如果你对多个交易进行这种分析,你将会得到一个可能的权益曲线。如果你多次执行整个分析,你将得到一系列的权益曲线。每一条曲线代表着在你的策略中交易可能发生的方式。利用这系列可能的曲线,你可以获取有关交易系统的统计数据。这些统计数据可以帮助你评估策略,确定头寸大小方法,并为你在实际交易中可能面临的情况提供现实的场景。当然,这一切都假设历史交易将与未来的交易相同。如果你的历史交易基于有缺陷的开发,未来的结果将毫无价值。

显然,这种分析存在一些潜在的严重缺陷。首先,分析假设你的绩效报告中的交易是唯一可能发生的交易。这显然是错误的,因为当你开始实时交易时,任何结果都是可能的。但如果交易的分布(总体均值和标准差)是准确的,那么蒙特卡洛方法可以产生有意义的结果。

第二个缺点是该分析假设每笔交易与前一笔交易是独立的,这种情况通常称为序列或自相关。对于大多数交易策略来说,这不是问题。然而,如果你的策略中交易结果相互依赖,简单的蒙特卡洛分析就不适用了。比如,交易 B 信号依赖于前一笔交易 A 的结果。在使用蒙特卡洛分析之前,最好先检查这种情况。检查序列相关性的一种方法是 Durbin Watson 统计量。尽管超出了本书的范围,但你可以在网上找到有关此计算的详细信息、示例和电子表格。

如果你发现交易确实表现出序列相关性,那么简单的蒙特卡洛分析可能不适用。在这种情况下,你可以尝试使用包含序列相关性影响的蒙特卡洛模拟,或者可以收集一种称为“开始交易分析”或“移动开始分析”的方法的统计数据。在此分析中,你在每笔交易开始时进行模拟,并收集回报和回撤的统计数据。例如,如果你的样本中有 10 笔交易,i, i + 1, … i + 9,你首先从交易 i 开始创建一个权益曲线。从生成的曲线中,你可以获得回撤 d[i]。然后,从交易 i + 1 开始这条权益曲线。这条曲线将给你回撤 d[i][+1]。如果你继续遍历所有交易,可以分析回撤集合 d。这种方法可能比蒙特卡洛更复杂,但在存在序列相关时,它是分析数据的更好方法,因为交易顺序大部分会被保留。

假设你能接受列出的缺点,蒙特卡洛方法可以帮助你回答以下问题:

  • 对于给定账户规模,我的破产风险是多少?

  • 我的系统发生最大回撤 X 百分比的几率有多大?

  • 我可以期望从这个交易系统获得什么样的年回报?

  • 我为交易这个策略所承担的风险是否与我所获得的回报相符?

这些问题将在接下来的讨论中逐一解决。为了简化叙述,我将假设读者使用我的蒙特卡洛电子表格。任何可公开使用的蒙特卡洛模拟器都应该能够给出相同的结果,尽管使用的术语和假设可能会有所不同。因此,无论你是否使用模拟器,讨论仍然对你有用。

images 蒙特卡洛模拟器的输入

执行蒙特卡洛模拟只需要少量输入。这些输入如下所列,并显示在图 7.1 中。

images

图 7.1 蒙特卡洛模拟器输入

  • 基础起始权益。 这是你账户的起始金额,以美元计。

  • 如果权益低于 $,则停止交易。 这是指低于该金额时你将停止交易的资本。例如,如果你在这里输入 $3,500,一旦你的权益在平仓基础上低于 $3,500,你将不再被允许进行交易。你的账户将被视为“破产”。至少,该值必须大于你的系统所交易工具的一个合约的初始保证金。在前面的例子中,你只能交易初始保证金低于 $3,500 的产品。如果你想交易更高保证金的工具,如黄金(当前初始保证金为 $8,800),你将必须增加这个最低金额。通常,我从不推荐只用足够满足保证金要求的资本进行交易,但对于这个模拟,假设是可以接受的。

  • # 交易次数,1 年。 这仅仅是你的系统在一年内进行的交易数量。我的模拟器设计为仅交易一年,因此生成的每条权益曲线将由此交易次数组成。当然,这是假设破产点未先触及。

  • 单个交易结果。 这一列数据包含所有交易数据,每行一笔交易。所有交易应基于相同的参考点,即每合约、每天等。你不能将一些基于一个合约的交易与多个合约的交易混合在一起。

images 模拟器的局限性

为了简化问题,模拟器做了一些假设。首先,假设每次交易只交易一个合约。模拟器中没有包含仓位规模。其次,模拟器假设交易时间为一年。这两个假设可以由任何了解宏编程语言的人在 Excel 宏代码中进行更改。

在接下来的讨论中,“运行”或迭代被定义为生成一条单一的权益曲线。在一次“模拟”中,将有多个运行——在讨论的模拟器中,这为 2,500 次运行。为了生成风险破产或中位回报等统计数据,将使用一次模拟的结果(2,500 次单独运行)。

images 模拟器输出

一旦模拟器运行,将生成一个输出值表和相应的曲线,如图 7.2 所示。以下是对每个输出值的解释,包括如何解读它,以及我认为适合可交易系统的值。

images

图 7.2 蒙特卡洛模拟器输出

起始权益

这是你在蒙特卡洛分析开始时的账户规模。所有的回报率都是基于这个数字计算的,破产风险和最大回撤都受到它的强烈影响。模拟器使用不同的起始权益范围来生成表格和输出曲线。

破产风险

这个统计数据告诉你,在一年内,你的账户被清零(即,低于“如果股本低于$,则停止交易”)的几率(概率)。例如,如果破产风险为 12%,这意味着在系统的第一个交易年内,你有 12%的机会必须停止交易。

破产风险是一个极其重要的统计数据,特别是对于小账户的交易者。即使系统是一个成功的系统,小账户的破产风险也可能很高!这里有一个例子可以说明这一点:

假设你有一个非常好的日间交易系统。它每天交易两次。盈利交易每次在扣除所有成本后能赚$200,发生的概率为 50%。当它在另外 50%的时间内亏损时,每次净亏损$175。

平均而言,你每天可以赚取$25。一年内,每个合约你可以赚取$6,300。如果你用$10,000 的账户进行交易,始终保持一个合约,你的年回报率将为 63%,最大回撤大约为 15%。按大多数标准,这真的很不错。

现在,假设你用一个小账户($5,000 及以下)来交易这个积极预期的系统。假设你的经纪商允许$500 的日间交易保证金,所以这是你的“破产”点——如果你的账户低于$500,你就破产了,停止交易。

在一年交易中,你破产(跌破$500 并停止交易)的可能性有多大?结果在图 7.3 中展示,可能会让你感到惊讶。

images

图 7.3 账户规模与破产风险

问题是:你在这条曲线上感觉最舒适的位置在哪里?拥有$1,500 的人在每次损失后可能会感到恐慌,因为他没有太多的灵活空间。但拥有$5,000 的交易者——仍然是一个小账户,仅为第一位交易者账户的 3.3 倍——破产的可能性低 20 倍。

结论是,资金不足可能是灾难性的,即使有一个成功的系统。因此,我非常关注模拟器输出的破产风险值。任何超过 10%的值对我而言意味着,我试图以过少的资本进行交易,应该增加资本以降低到 10%以下。显然,破产概率在 0 到 1%的系统是最好的,但与交易中的任何事物一样,这都是收益率的权衡。在我的经验中,我发现破产风险低于 10%的模拟结果相对安全,同时仍能提供可接受的收益率。

中位数回撤

这个统计数据一开始可能会有点困惑。它实际上是最大回撤的中位数值。你现在困惑了吗?也许将其拆分会有所帮助。

首先,最大回撤是账户规模从股本峰值的最大百分比下降。它应始终从前一个股本峰值进行测量。图 7.4 给出了三种不同回撤的例子:

  • 回撤 1:$5,000 回撤,在最高权益 $20,000 后 = $5,000/ $20,000 = 25% 回撤

  • 回撤 2:$10,000 回撤,在最高权益 $30,000 后 = $10,000/ $30,000 = 33% 回撤

  • 回撤 3:$15,000 回撤,在最高权益 $60,000 后 = $15,000/ $60,000 = 25% 回撤

images

图 7.4 最大回撤解释

在这个例子中,最大百分比回撤发生在回撤 2 中,为 33%。有趣的是,这是最大百分比回撤,而不是绝对美元最大回撤(回撤 3 的美元金额高于回撤 2)。

对于每次模拟运行,都会有一个相应的最大百分比回撤。在大量模拟运行中,会有一个最大回撤的分布,范围从 0%(完全没有回撤,完全不切实际的情况)到 100%(从最高权益点完全崩溃到 $0 权益)。这个分布将有一个中位数值,这意味着 50% 的回撤值超过中位数,50% 在其以下。因此,在“中位数最大回撤”这个术语中,最大一词指的是特定模拟运行中的最大回撤,而中位数指的是大量模拟运行中最大回撤的中点。

在选择中位数最大回撤作为模拟的输出值时,并没有什么魔法。它也可以轻易是 30%、60%、90% 等百分位值。我选择中位数值只是为了与其他系统进行比较。如果我想要一个最坏情况值,我可以使用回撤的第 95 百分位值,这意味着只有 5% 的最大回撤会比这个值更糟。

根据我个人的偏好,我一般接受最多 40% 的中位数最大回撤。也就是说,在 1 年内,我有 50% 的机会达到 40% 的最大回撤。这对于大多数人来说可能太极端,但它符合我的目标和个性。

需要记住的一件事是,交易者,尤其是新交易者,往往会大大高估自己承受回撤的能力。根据我与不同交易者的对话,我发现交易者通常只能承受他们认为可以承受的最大回撤的一半。例如,如果一个交易者在交易系统之前决定他可以承受 30% 的最大回撤,当真实资金面临风险时,他会开始恐慌,可能会在 15% 回撤时退出或更改系统。我为这种现象创造了一个短语:“你认为的只有一半。”当你建立个人最大允许回撤时,请记得牢记这一点。

中位数 $ 利润,中位数回报

与回撤类似,在 2,500 次完整模拟中,结果会有一个分布。这种分布用于计算中位数利润和中位数回报。中位数 $ 利润就是经过一年的交易后,最终股本减去初始股本。在 2,500 次运行过程中,可以计算出一个中位数水平。这就是中位数 $ 利润。中位数回报以类似方式计算,但它是最终股本除以初始股本,以百分比形式表示。

对于我个人的交易,我没有设定中位数 $ 利润的目标。我确实希望看到中位数回报超过 50%,特别是因为我之前提到过我会允许高达 40% 的中位数回撤值。如果我将回报阈值设定为 20%,而回撤为 40%,那就不明智。为了让我意识到风险与回报之间的关系,我还会计算回报/回撤比率。

回报/回撤

在蒙特卡洛分析生成的所有统计数据中,我认为这个数字是最重要的。当它在三年期间计算时,金融文献中称其为卡尔马比率。由于我仅模拟一年表现,因此模拟器结果并不完全是卡尔马比率。电子表格生成的数字只是中位数年百分比回报除以中位数最大百分比回撤。

一种思考这个比率的方法是“需要 Y 的风险来获得 X。”在这种情况下,Y 是回撤,X 是利润回报。显然,这个比率的高值更好。我通常寻找回报/回撤比率在 2.0 以上,尽管在特殊情况下我会接受较低的值。在我的经验中,我发现超过 2.0 的比率通常能在实际交易中产生可接受的结果。

概率 > 0

这给你提供了系统在第一年交易中盈利的概率,以百分比表示。例如,如果概率 > 0 等于 89%,这意味着你在第一年有 89% 的机会实现盈利。当然,这一切都基于你的历史测试结果,因此如果它们不准确,这个结果也不会准确。

images 摘要

现在我们已经讨论了性能报告、股本曲线和蒙特卡洛模拟器,我们可以总结所有数值及其可接受性阈值的用途 (表 7.1)。

表 7.1 重要性能参数

参数 来源 使用期间 阈值
总净利润 性能报告 初步审查 ∼每合同每年$10K
利润因子 性能报告 初步审查 >1.0 可接受, >1.5 理想
平均交易净利润 性能报告 初步审查 每合同 >$50
Tharp 期望值 性能报告 初步审查 >0.10
滑点和佣金 绩效报告 初步审查 如果$0 则丢弃,其他情况下每次交易$5 佣金,1-2 个点的滑点
最大回撤 绩效报告 初步审查 应远小于总净利润
资金曲线斜率 资金曲线 初步审查 理想情况下以 45 度角上升
资金曲线平坦期 资金曲线 初步审查 持续时间短
资金曲线回撤、深度和持续时间 资金曲线 初步审查 与整体曲线成比例
资金曲线模糊度 资金曲线 初步审查 较小为佳
破产风险 蒙特卡洛模拟 详细审查 <10%
中位数最大回撤 蒙特卡洛模拟 详细审查 <40%
中位数 % 回报 蒙特卡洛模拟 详细审查 >40%
回报/回撤比 蒙特卡洛模拟 详细审查 >2.0

第八章

设计与开发系统

随着现在可用的交易系统软件包数量庞大,设计自己的交易系统从未如此简单。当然,像 TradeStation、NinjaTrader 和 MultiCharts 这样的软件包的流行既是福音也是诅咒。这些易于使用的软件程序使将想法转化为策略变得比以往任何时候都更容易。以前在 Microsoft Excel 或硬核编程语言(如 C、C++、Visual Basic,或者对于那些年长程序员而言,Fortran)中完成的工作,现在只需几分钟甚至几秒钟。生活在这方面确实轻松了很多。

这种现代软件的缺点在于——除了许多人每天测试数百万个交易想法,并最终可能发现你找到的任何“优势”,从而使其变得无用——就是交易软件使一切变得太简单。只需查看图表,插入策略——可能是软件附带的许多标准策略之一——你就可以快速分析和优化,尽情享受。

不幸的是,正是这种简单性也成为了该软件的致命弱点。以交易软件产品所描述的简单方式创建可行策略几乎是不可能的。走捷径确实可能让你得到一个回测结果看起来很不错的策略,但当策略开始在实盘中运行时,所有统计数据都会变得糟糕。也许这曾经发生在你身上,就像我在早期开发阶段所经历的一样。我擅长生成看起来像图 5.3 左侧的回测,但将它们放到实时市场上后,却体验到了资金曲线的右侧,最终不可避免地亏损。

这些“零售”交易软件包简单易用的另一个缺点是,许多专业交易者无法或不愿使用它们。这应该让每个认为知名商业软件包是最佳选择的零售交易者有所警惕。事实上,许多专业人士通常使用更复杂的编程和分析工具,如 R、Python、Matlab 等等。或者,他们从头开始开发自己的平台,利用互联网上可用的开源代码。我并不是想暗示只有专业软件工具才好;而是想提醒交易者,所有交易软件都有局限性和不足之处。如果某些工具在分析、策略开发或自动化方面无法满足你的需求,那么很有可能另一个可能更昂贵的软件工具能够提供这些功能。

多年来,我从手动评估系统逐步转变为通过电子表格分析,再到使用 Fortran(我作为工程师的一面)和 Visual Basic 创建策略评估器,如今主要使用 TradeStation 和 NinjaTrader。在这个过程中,我在开发交易系统时犯了许多错误,并不得不以交易亏损的形式支付市场的“学费”。最终,我终于聪明地改进了我的交易系统开发方法。现在,我遵循多步骤的方法,如 图 8.1 所示。在每个过程的节点上都有一个“关卡”——策略必须满足的标准,以便进入下一步。对于在过程中失败的策略,可以在适当时对其进行小的调整。然而在大多数情况下,最好将策略放到废弃堆上,然后继续下一想法。为什么?很多时候,当一个策略在第一次过程中不起作用时,对其的更改可能会无意中引入曲线拟合、事后偏见或其他数百万个策略禁忌中的一种。欺骗性的部分在于,回测看起来会更好——可能好得多。但请记住,目标不是创建一个出色的回测;而是创建一个能够反映策略未来表现的回测。通过水刑或其他方式折磨你的策略直到其给出优秀结果并不是成功的方法。

images

图 8.1 我的策略开发过程

在我开发现在使用的过程之前,早期的日子里,我做的和大多数人一样:我选择一个市场,设定一个时间段和条形间隔,制定一些规则,然后进行优化。无论最终表现最佳的是什么,我就用它开始进行实盘交易。计算机的魔力在于能够迅速进行数百万次迭代,揭示我确信将会带来财富的东西。哦,我真是失望透顶!

这些早期的失败让我得以建立一个更复杂、稳健,并理想上无故障的开发过程。我不能为任何单独的概念归功——当然,许多交易者在我之前早就开发了我过程中的大部分步骤。关于系统开发的一个经典参考是系统设计的“圣经”:《交易策略的评估与优化》,作者是罗伯特·帕多(John Wiley and Sons, 1992)。我只是将我所学到和阅读的内容进行了调整,创造出让我觉得合适的东西,总体上它在实时中取得了不错的结果。

这并不是说策略通过的过程很简单。当我第一次开始使用我今天所用的基本过程时(多年来我对其进行了增强和完善,如果说有什么不同的话,如今的标准比几年前更严格),我大约需要 100 到 200 个交易想法用于进出交易,才找到值得交易的策略。随着时间和经验的积累,这个数字显著减少,但提出可交易策略并不是一件容易的事情。

对于新手交易者来说,使用前向分析、蒙特卡洛分析等方法时,经常会因为发现策略的困难而感到沮丧。我对这种困境的回答通常是:“但这就是应该如此!”想一想,如果找到策略是容易的,你不觉得其他人早就找到了并加以利用吗?每天都有成千上万的交易者和研究者在寻找优势、挖掘数据和进行测试。我可以保证,所有简单的策略要么不再有效,要么早已被发现。

我的一位好交易朋友,他是一名商品交易顾问(CTA),曾告诉我,如果他每年能找到一个新策略进行交易,他就会感到高兴。他确实应该如此,因为即使一个策略,只要管理得当,也能让你致富。但要每年找到一个策略需要付出大量的努力。我常常把策略开发过程视为一个工厂。在工厂的接收门口是你的交易想法和策略,这些是你不断需要运行工厂的原材料。你的分析工具、回测软件和前向算法就是工厂中的机器。你当然是操作这些机器的熟练工人,监控产品的质量。可惜的是,输出的产品通常装满了工厂外的大垃圾桶。但未被丢弃的垃圾却是纯金:你的可交易策略。

工厂的比喻恰当,因为策略开发是一项艰巨的工作。工厂工人是我认识的最坚韧的人之一,而你需要具备这样的品质来开发策略。我总是对那些忽视策略开发的教育者感到惊讶。他们往往专注于诸如感受的联系或写日记等无意义的事情。别误会——这些方面在交易中有其时间和地点,但不能替代拥有一个具有优势的策略。如果你没有一个好的策略,再多的记录也无法拯救你。不过,讽刺的是,许多时候,心理学或记录等“软”技能对拥有优势的交易者是不可或缺的。成功确实需要两者。

既然策略开发是一座工厂,你需要时刻保持工厂运转。以下是一些我使用或曾经使用过的保持运转的建议:

  • 每当你看到一个吸引你的交易想法时,写下来。保持一个想要测试的想法列表。

  • 在任何地方寻找想法。交易书籍、杂志和网络论坛都是很好的原始想法来源。不过,我不建议完全照搬一个想法来交易。我会先考虑修改它,并加入你独特的见解。

  • 没有任何想法是太傻、太愚蠢或太笨的。唯一愚蠢的想法是你从未测试过的想法。

  • 如果你在编码中犯了一个大错误,还是要进行测试。我是“意外”错误的大力支持者。也许它们真的是你潜意识的偶然创造。我意识到这听起来很疯狂,但我确实用真实资金成功交易过不止一个我的编程错误。

  • 如果情况不佳,尝试相反的方法。在你认为应该卖出时买入,反之亦然。也许你的相反想法会带来一些有趣的结果。

  • 如果你设定目标,尽量每周测试一到五个策略,至少。可能需要六个月到一年的严格测试,但最终你会找到一些有效的东西。

  • 如果你没有想法,就随机挑选一些图表盯着看。你甚至可以添加一两个指标。盯着一段时间,但不思考,然后离开这些图表,几天或一周后再回来看。然后开始思考:你在指标与图表的关系或图表本身中看到什么吗?写下你看到的,编程实现并测试。

  • 找到与你技能水平相近的其他交易者,提出交换想法或策略的建议。借鉴这些交易者的观点,然后围绕他们的想法构建策略。我经常这样做,和一些我的期货交易世界冠军同事们交流。

  • 改变你的标准。也许你对可接受的标准要求过于严格。稍微放宽一下标准,以便接受那些符合大部分但不是全部标准的策略。你的工厂开始生产后,你可以随时收紧标准。如果你放宽了标准,不一定要交易第一个通过的策略。这样做的真正目的是为了让你在开发“通过”系统时获得更多经验和信心。然后,慢慢收紧标准,理想情况下到那时你将能够改善你的系统以满足更严格的挑战。不断重复这个过程,最终你会有一个符合你原始标准的策略。

images 这难道不只是优化吗?

在阅读接下来的几章关于我的过程后,你可能会想,“策略开发难道不就是优化吗?”这是个合理的问题,从某种意义上来说,所有的策略开发确实都是这样。如果你一开始就有一千万个策略待测试,那么至少有几个策略会在你设置的绩效门槛中脱颖而出,经过孵化后成为潜在的获胜策略。在这一点上,关于策略有几种可能性出现:

  • 你确实有一个真正的优势,你将至少在一段时间内通过交易获得盈利,直到这个优势消失。

  • 你过度优化并过度拟合了策略,以便通过所有测试,但实际上没有任何能够在实时中有效的策略(这在缺乏经验的开发者中很常见)。

  • 你测试了这么多策略,迟早会有一个能够通过你所有的测试。你认为这个策略有优势,但实际上并没有。你只是碰巧尝试了这个特定的策略。就像盲目松鼠偶尔找到一个坚果一样,你只是运气好!

显然,你在寻找适合情景 1 的策略。我的过程将帮助你避免情景 2 中的策略(虽然你可以放宽我给出的指导方针,从而导致过度优化)。在我看来,情景 3 是可怕的替代选择。在这种情况下,你认为自己有优势,但实际上只是非常幸运。你永远无法确定这个情景是否适用。你可能会用一个幸运策略成功交易多年,或者从第一天起就亏损。你永远不知道会发生什么。

我的建议是避免情景 3——找到一个“幸运”策略:

  • 为你的策略有一个逻辑基础。考虑一下你的进出场时机,以及它们如何给你带来优势。运用你的头脑来利用你在市场中看到的情况。

  • 尽量保持事情简单。通常,更多的规则和条件会导致策略在未来不太可能有效。

  • 不要随意将随机指标拼凑在一起,直到找到真正有效的东西。如果你进行足够多的测试,你最终会找到一些东西,但这可能只是一次幸运的捕获。市场上确实存在使用这种技术的产品,如果使用得当,它们可以非常有用。只是不要指望电脑为你完成所有的策略思考。

  • 温和地优化你所做的任何事情。

有时候,我将战略开发过程比作钓鱼。如果你想抓住一条鲶鱼,一种方法是用一个巨大的渔网捕捉成千上万条鱼,然后从被网困住的鱼堆中挑出你的鲶鱼。这相当于随机测试一百万种策略,然后找到几种看似不错的。更好的方法可能是考虑鲶鱼喜欢什么,并根据你认为能够钓到鲶鱼的方式来调整你的饵料和钓鱼方法。这类似于发展一个优势,然后制定规则来利用这个优势。其他条件相同的情况下,后者方法可能更有利于你获得长期成功。

在接下来的章节中,我将详细介绍我目前用于设计和开发交易系统的过程。你可以完全按照这个过程进行,也可以提取适合你情况的部分。无论哪种方式,跟随适合我的方法,你的开发技能都将得到提升。

第三部分

制定策略

第九章

策略开发–目标与任务

当你开车进行一次长途旅行时,你是否有地图或全球定位系统来引导你?还是仅凭直觉和路标希望找到目的地?当然,大多数人会带上地图。这让旅程变得更容易。在开发交易系统时也是如此。你应该在开始之前就知道自己想要达到什么。这一切都始于目标。

你可能一辈子听过无数次:如果你想要实现某件事,必须有目标。不幸的是,听过这么多次后,许多人只是列出目标以表明他们做到了,或者列出无法测量或实现的模糊目标。

要开发一个好的交易系统,你绝对需要目标。为此,我采用 SMART 技巧(图 9.1)。SMART 是一个小记忆技巧,帮助记住目标的重要部分。以下是我在交易中应用的方法:

images

图 9.1 SMART 目标

  • 具体性。 目标必须具体,而不是模糊。例如,仅仅说“我想要一个能让我赚钱的交易系统”或“我想要一个没有风险的交易系统”是不够的。这种模糊的目标不仅不现实,而且过于宽泛。你怎么能知道何时达成如此模糊的目标呢?简单的事实是,你根本不知道自己是否达到了这个目标。

  • 可测量性。 如果目标无法测量,你怎么知道自己是否创建了一个符合目标的交易系统呢?这是一个坚实目标的第二个关键。在开发过程结束时,你希望拥有一个具有特定性能指标的交易系统,并将其与最初设定的目标进行比较。这是一个非常简单的概念,但你会惊讶于有多少人制定了无法测量的目标,例如“我想创建一个让我的家人骄傲的交易系统”。这无疑是一个值得赞赏的质量,但你怎么衡量这个呢?也许如果你的青少年孩子在公共场合与你并肩走,而不是在你前面或后面 10 英尺的地方,你就会知道他们为你感到骄傲。但是如果你没有青少年呢?

  • 可实现性。 SMART 中的“A”代表可实现性。说“我需要开发一个能提供 500%年回报且最大回撤低于 2%的交易系统”是完全没有意义的。这不符合现实。你需要追求一个可实现的目标。否则,你只会一次又一次地感到失望,因为你无法创建出符合如此高目标的交易系统。最终,大多数有不切实际目标的人最终会通过作弊来达成目标。他们会生成一个超优化的回测,极度曲线拟合,显示他们达到了不现实的目标。但正如我之前所说,“如果听起来好得令人难以置信,那很可能就是不可信的。”

  • 相关性。 如果你设定的交易系统开发目标与当前主题无关,那么整个目标设定过程都是浪费时间。例如,假设你讨厌创建交易系统并厌恶整个开发过程。追求创建交易系统对你来说真的有价值吗?换句话说,整个过程对你来说值得吗?如果不值得,你可能现在就该放弃。要在这个领域取得成功,你的心和脑必须完全投入。相信我,有成千上万的专业交易者致力于这个事业。在投入与不投入的交易者之间的竞争中,你觉得谁会赢?

  • 时间限制。 创建交易系统需要时间,占用你的自由和工作时间,因此将时间作为目标的一个方面是个好主意。你可能会给自己设定一个创建策略的时间,或者设定评估单个想法的时间限制。这个想法是始终保持过程的推进。正如你将发现的那样,找到时间和动力来测试新的策略想法真的很难,特别是当之前的 100 个想法都失败时。

现在我们有了目标的框架,让我们看看一些例子:

  • “我将创建一个满足我绩效目标的交易系统。”

    具体吗?不。可衡量吗?按现有写法不行。可达成吗?可能。相关吗?是的。时间有限吗?不。这种目标需要很多工作。

  • “我将在六个月内创建一个满足我绩效目标的交易系统。”

  • 这是一个 SMART 目标吗?是的和不是。第一部分具体且可衡量(“在六个月内创建一个交易系统”),但“满足绩效目标”这一短语过于模糊,无法衡量。目标的开头是非常可达成的——六个月的努力应该能产生一个不错的交易系统,后续系统的开发会更快。这也是相关且有时间限制的。总的来说这是一个好目标,除了最后几句话。让我们试着改进一下。

  • “我将在六个月内创建一个交易系统,该系统交易欧元货币,年均回报率为 50%,最大回撤为 30%,胜率为 45%或更高,并遵循明确定义的开发过程中的所有步骤。”

    太好了!这个目标符合 SMART 目标的所有要求。你可以轻松地将你创建的任何系统与这些目标进行比较。

一旦你有了 SMART 目标,并尝试开发几个交易系统,你可能会发现你认为可达成的目标其实并不那么可达成。通常,当人们在目标中列出年回报率和最大回撤时,便会意识到这一点。确实,100%的年回报是可能的(我就是活生生的例证!),但如果你还想要 10%的最大回撤,这样的回报就不切实际。有时很容易提前看到一个目标不可达成,但其他时候你只有通过开发过程才能发现这一点。

在这种情况下,你会希望将 SMART 目标转化为 SMARTER 目标。这意味着在你尝试实现目标之后,如有必要,你需要评估和重新评估你的目标。你要根据当下的情况调整它们。这对某些人来说可能看起来像是放弃——如果你的目标无法实现,那就降低目标——但这也可以提高你成功和找到良好交易系统的机会。如果你发现自己处于一个永远无法满足目标的情况中,你可以选择离开这个过程,寻找新的爱好或职业,或者评估并调整你的目标,使其更相关和可实现。

开发交易系统的目标应该只有一两句话,足够 SMART。但是对于你对交易系统的一些期望和愿望呢?你该如何处理它们?它们可能不容易融入你的目标,但无论如何它们仍然重要。这方面的例子可能是你交易的市场、你交易的时间,或任何其他你认为重要的特征。

为了适应我在交易系统中想要的特征和特性,但这些特征并不足以包含在 SMART 目标中,我创建了一个我称之为“愿望清单”的东西。这就像它听起来那么简单;它是我希望在交易系统中具备的功能清单。

愿望清单中可以包含哪些项目?图 9.2 展示了我曾经创建的一个清单示例。这是我尝试开发的迷你标准普尔期货(符号 ES)策略。人们说策略必须符合你的个性,而这正是我在这里努力的方向。通过详细列出我的喜好和厌恶,并将其记录下来,我可以轻松勾画出我的交易系统应该是什么样子。

images

图 9.2 示例交易系统“愿望清单”

当然,愿望清单越长,创建交易系统就越困难。你很可能无法满足所有的愿望。不过没关系——就像生活中的一切都是妥协,交易开发也是如此。对愿望清单的妥协迫使你确定什么是真正重要的,然后只保留那些项目。你认为重要的东西可能并不真的那么重要。不过,最终,你能满足的愿望越多,你就越有可能以信心和决心进行交易。这种信心和决心,迟早会对你有价值。

第十章

交易想法

一旦你明确设定了目标,就可以开始开发交易系统。在整个过程中,你将拥有一个准备测试的交易系统。然而,要达到这一点,你首先必须解决以下主题:

  • 进入规则

  • 退出规则

  • 市场选择

  • 时间框架/条形图大小

  • 编程

  • 数据考虑

每个领域的重要点将在接下来的两章中讨论。

images 你将如何进入市场?

对于大多数人来说,入场规则是设计交易系统中最简单的部分。想想您最近看到的所有交易文章、广告和信息。通常的重点是什么?“80%的获胜信号!”“独特的神经网络入场技术!”“绝对不失败的指标!”“一位前火箭科学家开发出无懈可击的寻找盈利股票的技术!”这类的例子不胜枚举。大多数交易者痴迷于获得正确的入场。解决了这个问题,其他一切就简单了,或者他们这么认为。入场爱好者喜欢指着股市说:“看看如果您在那时买入微软会发生什么。”这些人往往忽视了交易中的回撤,只要入场是正确的。

我认为,入场成为大多数交易者关注焦点的原因还有一个更根本的因素。在入场前的时间真的是您感到完全掌控的唯一时刻。您对市场说:“市场先生,在我下单之前,您必须做这个、那个和其他事情。如果您不遵循我的规则,市场先生,我就不会下单。我掌控这里。”这感觉很好,相比于交易期间,您常常希望并祈祷市场的过山车会朝您的方向发展!

当然,入场只是交易策略拼图中的一部分。多年来,人们争论入场是系统中最重要的方面,或者说入场是最不重要的部分。范·萨普博士多年前做了一项随机入场的研究,通过仔细设计退出策略创建了成功的交易系统。然而,我相信也有人通过随机退出创造了良好的系统。

根据我的经验,入场的重要性与您在交易中花费的时间直接相关。如果您是长期波段交易者,交易持续数周到数月,您并不需要精确的入场时机。提前或延迟几天的入场可能不会破坏您策略的盈利能力。然而,如果您是日内交易者,那么入场就显得非常重要。偏差一两个点的入场可能会将一个盈利系统变成一堆废物。在设计系统时,请牢记这一点。在开发之前,了解您的入场需要多么精确。

许多人在开发入场想法上遇到困难,这实在可惜,因为入场的想法无处不在。我有一个很好的交易朋友,他在决策过程中使用杂志封面。例如,当他看到几本杂志封面讨论即将到来的干旱或实物黄金短缺时,他知道这可能是进入受影响市场的好时机——当然是朝相反的方向!

我在早期的章节中提供了一些入场的来源,建议你在灵感枯竭时随时查阅这份清单。一旦你有了这个创意清单,关键在于将它们转化为可以进行回测的可靠入场。这是判断力没有立足之地的地方。算法策略的定义是由算法组成,即定义行为的一组规则。如果你的入场规则无法被严格定义,那么创建一个算法系统就不合适。

一旦你有了入场想法,你需要将其转换为计算机语言。如果你不知道如何在交易回测软件中编程,你可能需要雇人来为你完成这项工作。在你这样做之前,最好将规则写成所谓的伪代码。这只是用简单英语给出的入场指令。这里有一个例子:

  • 如果本条的收盘价是过去 X 条中的最高收盘价,则在下条以市场价买入。

转换为像 TradeStation 的 Easy Language 这样的语言会得到以下内容:

  • 如果收盘价 = 最高(收盘价,X),则在下条以市场价买入。

创建伪代码是一个非常重要的步骤,因为它将帮助你理清入场规则,并帮助你识别出你想要优化的任何重要变量(前面的例子中的“X”)。

创建良好入场的一些提示:

  • 保持简单。 如果你无法用简单的英语解释规则,你在将其转换为计算机代码时将会很困难,且你所编写的代码可能并不是你真正想要的。

  • 限制输入参数的数量。 如果你的入场有两个或三个条件,容易导致你觉得应该优化 5、10 甚至更多的参数。然而,请记住,对于每个你优化的参数,你就越有可能使模型过拟合。保持简单。我个人喜欢为我的入场使用 1 或 2 个可优化的参数。

  • 尝试不同的思维方式。 移动平均交叉已被专业人士和业余爱好者反复测试。尝试开发一个与你见过的任何入场都不同的入场——一个很少有人尝试过的。

  • 初始时使用单一规则。 如果你想要一个有多个条件的入场,首先只从一个条件开始。然后,只有在这些条件显著改善性能时,才慢慢添加新的条件。你可能会发现,许多你认为重要的入场条件其实并不重要。

images 你将如何退出市场?

与入场相比,退出在交易策略中就像红发继子一样。大多数人,包括我自己,有时对退出几乎不予关注。我想这与之前提到的控制缺乏有关,因为在交易中,市场先生掌控着局面。对于许多人来说,想到不同的方式来逃离亏损交易可能也会让人感到不安,因为交易的全部意义就是赚钱的交易,对吧?

简单来说,退出对整体盈利能力有巨大的影响,交易者确实需要花费大量时间准备适当的退出方式。与进场一样,退出的方式也有很多种。最常见的方式列举如下:

  • 停止并反转。 你进入新仓位的信号也成为你现有仓位的退出信号。许多人喜欢随时参与市场,这种方法正好实现了这一点。

  • 基于技术的退出。 支撑/阻力线、移动平均线、蜡烛图形态等都可以形成可行的退出规则。使用这些规则的关键是确保它们与进入规则相协调。否则,退出可能会在进入信号触发后立即触发。

  • 保本止损。 许多人坚信保本止损,尽可能快地将止损位移至保本水平。这对于注重心理的自由交易者或那些执着于“获胜”的人来说可能确实有用,他们不想看到盈利交易变为亏损。但根据我的经验,保本止损似乎总是限制了利润潜力,因为它们通常在市场回调时退出,而市场随后又恢复早期趋势。

  • 止损。 有些人坚信止损,而有些人则对止损嗤之以鼻。我是这样看的:如果一个止损,即使远离你的入场点,显著降低了你的策略表现,也许你的入场信号才是真正的问题。当止损与良好的入场结合时,可以帮助防止灾难。你能想象在恐怖袭击前交易迷你标普而没有止损吗?确实,你可能会在止损时遇到过大的滑点,但除非市场停摆,至少你可以退出,并继续交易。止损可以基于美元、图表(即,靠近支撑/阻力位退出),或基于平均真实波幅等参数。一个简单的止损可能确实会变得非常复杂。

  • 利润目标。 “让你的利润奔跑”这句老话是经过验证的交易错误。但是,让利润奔跑并不总是最佳的交易方式。有时,更好的是达到一个目标,无论是基于利润还是基于图表,然后再为下一个入场信号做准备。我倾向于测试利润目标,但我也允许上方有巨大的利润空间。很多时候,这成为最佳选择。

  • 跟踪止损。 当市场向有利方向上涨时,你保留一定比例的利润。这实际上是一个移动止损,但与其导致亏损,不如让利润减少。跟踪止损的一个问题是,它们可能有很多需要优化的参数。在实际交易中,这些额外的参数可能不值得付出努力,尽管它们会让回测看起来更好。

images 你将交易哪些市场?

设计系统时你面临的最艰难决定之一是选择哪个市场或多个市场进行交易。在这个领域实际上有两种不同的观点,我将描述每种观点的优缺点。

第一种方法是为所有市场设计一个系统。这将是一个“统一标准”的方法,系统的规则在不同市场间不会改变。然而,参数可以为每个市场进行调整(或不调整)。这种方法的优点是,如果一种策略在所有市场上表现良好,那么它可能具有较高的稳健性。这可能使系统对市场变化的脆弱性降低,因为该系统可能已经经历了测试历史中许多不同类型的市场。这种方法的一个大缺点是,开发变得无比困难。为一个市场设计系统已经足够困难。如果你现在要求系统适用于多个市场,你将很难找到一个可接受的策略。在这种情况下,开发者通常会采取两种做法中的一种:(1)放宽接受标准,或(2)在所有市场上进行测试,然后选择表现最好的 5 到 10 个进行交易。

意识到这两种妥协,虽然在创建多市场系统时可能是必要的,但都是非常糟糕的。放宽接受标准会导致你早期放弃系统,因为你会在用真钱操作时意识到该策略并未满足你最初的目标。在多个市场上测试,然后“挑选”最佳表现者进行交易,只是另一种方式,尽管隐秘,却是在优化。

为特定市场创建策略是另一种流行的方法。这种方法的一个优点是可以根据市场的特点进行定制。例如,众所周知,货币市场的趋势表现良好,因此可能适合使用突破型系统。或者,对于股票市场,可能采用长期偏向的均值回归策略是最佳选择。另一个优点是,如前所述,为单一市场创建系统总是比为多个市场创建系统更容易。但这并不意味着它是更好的系统,它只是意味着创建起来更简单。创建单一市场系统的缺点是,当你在了解市场特征的情况下创建系统时,你假设这些特征将永远保持不变。虽然这可能是正确的,但如果不是呢?当货币因某种原因变为均值回归市场时,你的趋势跟随货币系统将如何表现?

如你所见,市场选择的每种方法都有有效的优缺点。我个人这些年来都使用过这两种方法。当我在期货交易世界杯中连续三年获得第一或第二名时,我使用了一个“适合所有人”的系统,在大约六到十二个市场上交易。这效果很好。目前,我交易的系统中大约一半是这种类型。我也喜欢单市场系统,不仅因为它们更容易创建,还因为我可以将它们混合搭配以实现多样化。在任何给定的一年中,这些系统中的一些会表现不佳,一些接近盈亏平衡,一些会表现优异。拥有众多单市场方法使这更易于管理,特别是在策略需要退休时。

images 你想要什么类型的系统?

每当我开始考虑一个新策略时,我几乎总是会看看它是否可以变成日内交易策略。我将“日内交易”定义为在一个交易时段内进出交易,或进行多次交易。这种策略有一些不错的好处:

  • 没有由于意外事件导致的隔夜风险,因为你是平仓状态。

  • 降低的保证金要求,使得用大规模交易变得更容易(尽管大多数人不应该这样做,因为高杠杆可能导致更大的灾难风险)。

  • 一种“工作型”的感觉。你早上启动电脑,交易一段时间,赚到每日所需,关掉电脑,回家和孩子们玩一整天——这是一种非常令人满意的生活方式。

通常,当我开始开发时,我会选择短时间框架的线(1 到 5 分钟),加入“在收盘时设定退出”的声明,在一天结束时退出,然后开始开发。然而,十次中有九次,策略失败。无论是进入思路(趋势、逆势等)还是退出方案(固定止损、移动止损、盈亏平衡止损、利润目标等),似乎没有任何策略能始终如一地有效。

不可避免地,如果我喜欢这个策略思路,我会将时间框架扩大到 60 分钟、240 分钟和日线。我想看看我的想法是否有任何有效性。几乎总是会发生什么?表现会更好!也许表现仍然达不到我的目标,但日线图上的表现几乎总是比 1 分钟图好。我已经看到足够多的案例,意识到这不仅仅是巧合。那么问题就变成了:我为什么会看到这种行为?以下是我的一些想法:

  • 交易数量和交易成本。假设我有一个每日线策略,每月交易 1 次,或每 20 根线交易 1 次。这将大约花费我 25 美元的交易成本。如果我改为 1 分钟线,采用相同的策略可能每天交易 10 次(每 120 根线交易 1 次),导致 250 美元的交易成本。这是一个必须克服的巨大成本差异。再加上 1 分钟的波动小于日线的波动,这使得情况更加困难。

  • 当你使用更小的时间框架柱时,数据似乎有更多的随机性。查看迷你标准普尔期货(符号 ES)的 1 分钟图表,发现大多数日子的波动范围很窄。随机噪声水平很高时,找到真实的价格路径变得更加困难。作为替代,日线似乎有更多的趋势。当然,我在数据中看到的随机噪声可能只是因为我脑中存在的其他偏见。

  • 当你有小止损和目标时,进出场成为系统中更重要的部分,因为大多数日内交易系统都是这样设置的。所以我必须有非常优秀的进出场,具备很好的优势。但进场越好,在开发过程中找到的难度就越大。此外,如果你错过了一个点,可能会损失很大一部分利润。如果你使用日线进行波段交易,进场时的一两个点相对整个交易的平均规模可能不会那么重要。

  • 使用点图或 1 到 5 分钟的图表时,要考虑你是在和谁交易。很多时候,对手是高频交易公司,他们的进场可能比你更好,并且在速度上也有优势。我感觉在更高的时间框架上,专业交易者的影响不那么明显,尽管我知道很多专业交易者也会交易日线。

  • 对于大多数策略,正如我之前提到的,我发现交易越少越好。这可能与交易成本有关,但也可能是一个非常糟糕的原因:也许你认为自己有优势,但交易越少,你对自己拥有优势的统计置信度就越低。换句话说,如果我有两个策略,每笔交易的平均利润为 50 美元,其中一个在过去 10 年中有 100 笔交易,另一个有 1,000 笔,我总是会选择 1,000 笔交易的策略(每个理性的人都会如此)。但现实是,100 笔交易的策略更容易找到——也许因为它们根本不是优势,而只是暂时幸运的策略?

我真的希望我所有的策略都是日内交易类型的策略。实际上,可能有 9 成的策略正好相反。在过去四到五年中,我最好的策略持仓时间为数周到数月——绝对不是日内交易的方法。

images 你将交易什么时间框架/柱大小?

选择的时间框架几乎和你将要交易的市场一样重要。对于大多数查看柱状图的人来说,这只是每个柱的时间长度。当然,策略在不同时间框架上表现截然不同,所以最好选择一个符合你目标的时间框架。你想快速进出吗?也许 1 分钟或基于点的图表最合适。你更喜欢长期波段交易吗?如果是这样,可能日线甚至周线是你所需要的。关键是选择一个与你兴趣匹配的时间框架。

一个需要意识到的重要因素是,通常较短的时间框架会导致更多的交易。如果你的交易成本较小,进行许多快速交易,那就太好了——只需看看所有高频交易公司的成功。即使是微小的优势,在重复足够多次后也能带来可观的利润。然而,对于大多数散户交易者来说,更高的交易成本只是游戏的一部分,使得快速策略更难以成功。

在确定柱子的时间大小时,许多开发者使用的方法是我所称的时间框架收缩和扩张。这个概念是用 10 分钟的时间框架测试策略。如果成功,接下来测试 9 分钟和 11 分钟的柱子也应该是盈利的。无论往哪一边变化一分钟都不应该摧毁策略,而在这些收缩和扩张期的良好表现则表明其稳健性。

我个人在这种方法上很少成功,我认为有两个原因。首先,通过改变柱子的时间长度,在一天的过程中,现在要评估的柱子数量发生了变化。在之前的例子中,将 10 分钟的柱子改变 1 分钟会导致 9%的柱子增多或减少。这可能严重影响你可能使用的指标表现。另一个我对这种方法的疑虑是,许多交易者在标准周期柱的收盘时做出决策。想想所有基于图表交易的人,他们中的大多数使用标准的时间周期,如 5、10、15 分钟或更多。如果你的系统在不同的时间交易,你的结果可能会与标准(即 10 分钟)柱的结果相差甚远。

抛开我个人的反对意见,如果你在 9 分钟、10 分钟和 11 分钟的图表上取得成功,那么我会同意你的系统是稳健的。这会给我额外的信心。不过,另一方面,如果 10 分钟的表现很好,而 9 分钟和 11 分钟的表现糟糕,我也不会因此而全盘否定。

如果你决定使用点图进行测试,一个关于柱子大小和时间框架的重要考虑是可用的历史数据量。我在后面的章节中会讨论“使用多少数据”的问题,但现在要意识到,许多数据供应商仅提供六个月的数据。这在短时间框架的柱子(1 到 5 分钟)中也可能是一个问题,因为订单在柱内被触发。点数据对特殊柱子(如点和图表、Kase 柱、Renko 柱等)也很重要。关键是,如果你依赖点图或点数据,在测试之前,要仔细考虑有限历史数据的影响。

还有一个重要考虑因素涉及每日结算价格和每日最后交易价格,这在你使用日线数据时非常重要。“有什么问题,”你会问,“收盘/结算价格和最后交易价格不是同一回事吗?”在某些市场是的,在某些市场则不是。此外,随着 24 小时交易的出现,这些术语的含义也发生了变化。黄金市场就是一个很好的例子。早在黄金仅在交易大厅内交易的时期(这可能很容易是你的历史测试期间的一部分),市场在东部时间下午 1:30 关闭,通常当天的最后交易价格非常接近,但不一定与交易所公布的结算价格相同。然而,现在,黄金市场进行电子交易,交易持续到东部时间下午 5:00。不幸的是,交易所的结算价格是从下午 1:28 到 1:30 的交易中得出的。你可以想象,下午 1:29 的结算时间价格与下午 5:00 的最后交易价格可能会有很大差异。2013 年 9 月 18 日星期三的价格波动就是一个很好的例子,如图 10.1 所示。美联储在下午 2:00 的公告,在结算价格确定后,搅动了市场。结算价格和最后交易价格之间的差异非常显著!

images

图 10.1 不要假设结算价格 = 最后交易价格

数据供应商在如何处理结算价格和最后交易价格上存在差异。截至本文写作时,TradeStation 例如,将交易所结算价格用作日线和周线的收盘价格。对于 X 分钟的 K 线,日线最后一根 K 线的收盘价格也是最后交易价格。NinjaTrader 的供应商 Kinetick 采用相同的方法。然而,另一个受欢迎的数据供应商 CQG 则将最后交易价格作为其日线的收盘价格。

这在你的测试中可能会造成什么问题?例如,假设你正在使用日线数据进行测试,而你的策略使用指令“在收盘时卖出该日线”。你的策略在下午 4:59 准时执行命令,你被成交了。但是,当后续应用交易所结算价格到数据时,策略会认为你是以结算价格(现在是日线的收盘价格)成交的,但实际上你是在接近最后交易价格时被成交的。这只是回测结果可能欺骗你的方式之一。

images 你将如何编程策略?

一旦你想出了基本的进出场规则;选择了测试的市场、时间框架和柱大小;并获得了所需的历史数据,就该准备你的测试策略了。此时大多数人会问:“我能自己编程这个策略吗?”对于真正的自助型学习者来说,答案无疑是“可以”。但如果你从未在策略测试软件的语言中编程,可能会觉得这是一个令人畏惧的任务。以下是一些可能对你有帮助的建议。

如果你对计算机编程完全无知,且没有学习的愿望,编程任务最好交给专业人士。你可以按小时雇佣专家,甚至可以雇佣一支专家团队,这样没有一个开发者会知道你所有的交易秘密。缺点是每次你需要代码更改,即使是小的更改,也需要等待开发者来完成,而且你可能还要为此支付额外费用。与更改、更新、增强等相关的额外时间和费用会迅速增加。如果你仍然觉得程序员是合适的选择,可以在各种交易论坛上找到他们,或通过联系你的软件供应商。

另一种选择是与编程专家合作,理想情况下是一个对交易完成项目感兴趣的人。你无需担心合作伙伴会窃取你的想法,合作可能会导致更有利可图的系统。我以前这样做过,通常担任编程专家,当一切顺利时,这真的很令人满意。问题在于找到值得信任的人来帮助你。

我推荐的最佳方法是你应该自己编程。所有的交易软件包都有类、书籍、在线教程和示例策略来帮助你提升技能。通过这种方式,你无需担心有人窃取你的“秘密武器”。此外,随着你学习编程方面的内容,你会对回测引擎的特性更加熟悉。当结果看起来好得令人难以置信时,这点尤其重要。一旦你足够了解软件和编程,你就不必担心自己只是欺骗了回测引擎,而不是现实世界。

第十一章

让我们谈谈数据

在决定进场、出场、市场和时间框架/条形长度后,接下来就是测试中最重要、最被低估但又最不被理解的方面之一:市场数据。人们往往对数据掉以轻心,这可能是一个大错误。我见过因为不同数据来源而导致策略表现的巨大差异。我会大胆假设你的数据是干净的,没有错误数据点、缺失数据等等。当然,这并不是实际情况,几乎无论供应商如何。但大多数人都明白数据可能会出错;而大多数人不理解的是与这些数据相关问题的答案背后的影响:

  • 你应该使用多少数据?

  • 你应该使用交易所数据还是电子数据?

  • 你应该使用连续合约数据吗?

  • 电子交易的出现对市场数据产生了影响吗?

  • 你如何使用外汇(forex)数据进行测试?

现在,在你开始测试之前,是审视所有这些问题并做出一些决策的时刻。返回并使用不同的数据结构进行重新测试通常意味着你将使用受污染的数据,这并不好。

images 多少?

如果你像我一样,可能已经进行过多次“目测”测试。你查看一个图表,知道你的进场和出场标准,快速测试过去几天或几周的数据。在几次交易后,如果看到大量利润,你会感到兴奋,并冒险进行更深入的测试。如果出现亏损,你要么放弃策略,要么稍微调整一下再试一次。

希望你意识到这种简单测试的徒劳。不够多的交易,不够多的市场条件,根本没有足够的任何东西来做出明智的决定——就是这样。要实现长期成功,你必须查看比这更多的数据。

那么,什么是可以接受的数据量呢?当我被问到这个问题时,我几乎总是回答:“尽可能多。”更多的数据提供了更多的市场条件——更多的牛市,更多的熊市,更多的平稳市场。它还提供了更多的平静期和更多的波动期。随着你进行更多的交易,且系统保持盈利,结果是仅仅由于偶然的可能性就会越来越小。想想抛硬币。如果你抛一次,出现正面的概率是 50/50。如果你抛 10 次,至少出现一次正面的概率就很高。抛 100 次,你几乎可以保证至少会出现一次正面。更多的抛掷意味着更多的确定性,就像更多的交易带来更多的信心一样。

对于日线系统,这通常是波段系统(交易持续数天到数周),我发现 10 年的数据是一个不错的折中。它允许你的策略看到许多不同的市场条件,并且与前向测试(需要一些初始化时间)配合得很好。

对于日内或短期系统,我也喜欢使用 10 年的数据。然而,实际考虑因素如电子数据的引入,可能使这一任务变得困难。因此,在许多情况下,我将仅使用 5 年的数据,意识到我的结果可能不如 10 年测试的系统那么稳健。

对于一些人来说,5 到 10 年的数据测试时间太长,或者数据不可用。在这种情况下,我建议以下经验法则:对于策略中的每个规则和参数,至少有 30 到 100 笔交易。作为例子,考虑一个有两个入场条件和两个出场条件的策略。对于这样的系统,我希望看到 120 到 400 笔交易。少于这个数量可能是可以接受的,但也存在策略与数据“匹配”或拟合的风险。

使用尽可能多的数据的缺点是,这使得开发变得更加困难。说实话,最好的情况下,大多数交易系统在扣除佣金和滑点之前可能只是收支平衡。这意味着你测试的时间越长,总利润回归零的可能性就越大。我相信你以前见过这种情况,当一个策略在一个、三个月或六个月的期间表现出色,结果在下一个期间又全数回吐。所以,最后,问问自己你想要一个长时间正收益的系统,还是想要一个短期内表现优秀的策略?前者更难找到,而后者更可能导致实时损失。

images 交易所数据还是电子数据?

在交易所交易的早期,知道使用什么数据很简单——只需使用交易所数据,因为那时只有这些数据!如今,电子数据占主导地位,有多种选择:

  • 仅限交易所数据

  • 仅限电子数据

  • 交易所和电子数据结合

  • 仅限传统交易所时段的数据

  • 全天候数据

  • 白天/晚上交易时段的数据

向前选择数据可能很简单——电子数据是最好的,因为目前交易量集中在这里,但当你历史测试策略时该怎么做呢?

我给你一个简单的例子来突显这一困境。假设你在交易黄金,想使用 20 年的数据(优秀选择!),以 60 分钟的 K 线为单位。20 年前,交易所是唯一的数据来源,因此你必须使用这些数据。在日交易所时段,可能大约有六到八根 K 线(由于交易时段多年来的变化,每天的 60 分钟 K 线数量也会变化)。对于你的策略,假设你使用 14 期移动平均线。这通常代表两个交易日。

现在,快进到今天的电子市场。今天的市场每天大约交易 23 小时。如果你仍然使用 14 期移动平均线,这仅相当于半个交易日,而不是之前的两个交易日。你认为这会对你的历史测试产生根本影响吗?肯定会的!

你是如何处理这个问题的?通常,我非常依赖每日数据,特别是每日结算价格。场内和电子结算是相同的。我不喜欢使用每日最高和最低价格,因为场内高低之间的平均范围通常会小于电子日高和低。如果这听起来令人困惑,只需想象一个持续一个小时的隔夜价格冲击,然后恢复到之前的价格水平。在旧的场内交易时代,这样的冲击在数据中根本不会出现,因为它发生在隔夜。然而,对于电子数据,日高会包括这个价格冲击。因此,你的策略在旧时代与今天的市场表现可能会有很大不同。

一个帮助使所有数据保持一致的技巧是选择一个标准的每日交易时段,并将其应用于你的完整历史数据库。例如,对于货币,场内交易的时间是东部时间早上 8:20 到下午 3:00。为了在电子时代保持这一时间不变,我简单地为所有历史数据创建一个特殊的“货币场”交易时段,从早上 8:20 到下午 3:00。这样我的所有数据就保持一致了。

在所有可用的数据选项中,我强烈建议你花时间考虑你使用的数据。确保它在你的测试历史中保持一致无疑是测试的最佳方式。然而,创建这些数据可能并不容易。

images 连续合约

一个让大多数初级系统开发人员困惑的概念是期货市场测试中的连续合约。连续合约是必要的,因为每个期货合约都有有限的生命周期,而连续合约则创造了一个源源不断的数据流。这个概念很简单——只是将即将到期的期货合约人为地拼接在一起,形成一个连续的数据流——但实施路径充满了陷阱,等待着那些不谨慎的人。我将讨论期货数据选择的三种主要技术中的这些陷阱。

测试期货数据最纯粹的方法就是使用原始合约数据。这样你就不需要担心连续合约的问题。问题在于大多数交易软件并没有设置成可以轻松实现这一点。比如说,如果你想测试欧元货币的策略。在 2013 年进行测试时,从 1 月 1 日到大约 3 月 15 日,你会使用 3 月合约 6EH13。从 3 月 15 日到 6 月 15 日,你会使用 6 月合约 6EM13。这样,你可以逐年推进你的数据。但这种测试方法会遇到一些问题。首先,你需要设定逻辑来(1)确定每个合约的适当结束日期(即,在首次通知日或最后交易日之前,以先到者为准)和(2)“滚动”当前头寸,从当前合约转到新合约。当然,这可以实现,但需要一些详细的编程。更大的问题是,如果你想优化所有这些合约上的策略。大多数交易软件要求在一张数据图表上进行优化。对于多份合约的数据,无法不手动进行优化,这是一个繁琐且耗时的过程。

为了克服单个合约测试的这些局限性,许多人将合约数据拼接在一起形成连续合约。创建连续合约主要有两种方式(还有许多不太流行的方法),当然,这两种方法都有一些严重的缺陷。第一种连续合约是未经调整的连续合约。以之前的例子为例,在 3 月 15 日,合约数据将从 3 月切换到 6 月。这种方法的好处在于原始数据得以保留——没有对数据进行调整。这些数据的缺陷在于,在滚动时,两份合约的价格几乎从未完全相同。通常,前一个月的合约会有显著的折扣或溢价。例如,图 11.1 展示了这一点。直接使用这些数据将产生错误的信号和虚假的利润与损失。假设你持有 11 月大豆的多头头寸,然后你转为 5 月大豆。若存在 38 个点的价差,使用未经调整的连续合约,交易策略会认为这个差距是真实的,并认为你从中获利。然而,现实是你并不会真正从这个差距中受益。这个差距的存在仅仅是因为合约月份发生了变化。

images

图 11.1 不同月份的合约价格将会不同

许多人通过使用所谓的回调调整合约来解决这个人为差距。通过这种类型的合约,差距被扣除,所有之前的数据都得到了适当的调整。一个例子如下:假设在 3 月 15 日,6 月欧元的收盘价为 1.3512,而 3 月欧元的收盘价为 1.3516,两者相差 0.0004。要消除这个 0.0004 的差距,必须将所有 3 月及之前的数据加上 0.0004。这将消除所有数据中的差距,并提供一个良好的连续数据流。看起来这是理想的解决方案。

当然,没有任何方法是完美的,这种技术有几个问题,其中一个几乎没有人谈论,至少我从未见过。第一个问题是,在每次换手时不断考虑差距会导致历史数据实际上变为负值。这一例子在图 11.2 中有所体现。显然,原油的价格从未出现负值,但连续合约显示的就是这一点,而你的策略将会以此进行测试。尽管连续数据可能看起来奇怪(不要向你的朋友展示你用这些市场数据得到的“圣杯”交易系统,因为他们会认为你在用负价格进行测试而发疯!),只要你不陷入第二个陷阱,结果就是准确的。

images

图 11.2 回调调整的连续合约可能会有负价格

连续回调调整合约的第二个陷阱也是最可能导致无效交易结果的问题。简单来说,当使用回调调整合约时,不能有任何指示器对价格进行除法或乘法运算。一个例子最能说明这一点:

假设你有一个策略,使用日常收盘价的百分比变化,close[i]/close[i-1]。在 3 月 10 日,你使用的是 3 月合约,收盘价是 1.3500。前一天的收盘价是 1.3420。因此,百分比变化的计算为 1.3500/1.3420 = 1.00596。

快进到 3 月 20 日,此时 6 月合约为前端合约。当你进行了连续合约的回调调整时,加了 0.0030。这是一个极大的换手调整数值,只是为了证明我的观点。因此,现在 3 月 10 日的收盘价是 1.353,前一天的收盘价是 1.345,比例现在是 1.353/1.345 = 1.00595。相同日期的比例已经发生变化!此外,它将在未来每次换手时再次变化。这意味着,当你用比例进行策略回测时,回测信号将与实时信号不同。差异可能不大,但一定会存在。接下来的问题是:“你能否依赖于你知道将来会变化的表现历史?”

如果这看起来像是一个微妙的区别,只需想象一下当价格数据接近零时会发生什么,这也是后调整数据的另一个已知陷阱。除以零或接近零的数字会导致巨大的结果!显然,这在实时情况下永远不会发生——除非,当然,相关工具的实际价格降至零。不要指望那种情况会发生!

避免这个陷阱的唯一方法是特别注意,在后调整的连续合约中不要使用价格数据进行除法或乘法。价格比率和价格百分比变化都是不可行的。如果你选择不遵循这个规则,不要感到惊讶,当(1)你的历史表现结果随时间变化,以及(2)你的历史结果与未来结果不匹配时。

images 电子市场的影响

许多交易系统开发者只在电子数据上测试策略。他们忽略任何交易大厅数据,因此他们的策略通常只测试过去几年的数据。他们的理由是,电子市场出现后,市场从根本上发生了变化,因此现在有效的策略不一定在早已被遗忘的交易大厅时代也能有效。对此论点,我既同意又不同意。

电子市场无疑改变了期货市场。没有一堆交易者在交易大厅,定价的整个动态发生了变化。事实上,许多曾经在交易大厅获得良好收入的交易者,在转向电子交易时遭遇了巨大的困难。他们大多数人试图像在交易大厅那样进行交易,而市场的变化使得这些技巧不再盈利。加上今天的高频交易公司,短期市场显然与旧的交易大厅时代不同。

然而,从长期来看,几乎所有商品都受到供需法则的支配。交易场所——电子交易、交易大厅,或两者的结合——对长期影响不大。认为高频交易者在交易中只花费几秒钟,但会对两三个月后的价格产生影响是没有意义的。

考虑到这些对立的观点,我仍然使用交易大厅的数据以及它们提供的历史数据,用于我的长期波段交易开发。这样,我的策略能够经历更多的市场条件。如果我为大豆开发的策略在 1990 年代、2000 年代和 2010 年代表现良好,我会对该系统更加自信和印象深刻。有些人甚至会追溯到 1970 年代和 1980 年代!对于短期系统,尤其是日内系统,仅使用电子数据可能是有意义的。如果它在交易大厅数据上也有效,那就更好了,但我可能不会将其作为一个要求。

images 使用外汇数据进行测试

如果你正在测试外汇系统,有两个主要问题需要注意。第一个问题是,并不是所有的外汇数据都是相同的。事实上,由于外汇市场是去中心化的,并没有像期货市场那样的官方价格流。这意味着每个经纪商都会有自己独特的价格数据集。当然,如果你使用与未来交易相同的数据源进行回测,那么就没有问题。但如果你用经纪商 A 的数据进行测试,然后想要用经纪商 B 进行实时交易,系统现在将面临不同的数据。在这种情况下,你基本上可以将所有的回测结果抛到窗外,因为它们不再有效。根据数据的差异,你的结果可能会更好,也可能会更差。关键是,通过更改数据源,你使得所有测试失效了。

测试外汇数据的第二个问题是你使用的订单类型。如果你在外汇数据上测试你的系统,确实需要对策略如何下单非常谨慎。由于我稍后提到的问题,我只使用市价单进行进场和出场。我的外汇策略中从不包含限价单或止损单。当然,我始终会将点差成本计算到每笔交易的最终利润/损失中,但通过使用市价单,我不必担心“虚假”成交。

使用限价单和/或止损单与外汇数据的陷阱是什么?在期货市场中,只有一个价格数据流,这总是代表交易价格。然而,在外汇市场中,存在买价数据流和卖价数据流。这两个数据流之间的差异就是当前的点差,通常为几点。根据定义,你只能在卖价买入,在买价卖出。

使用外汇数据测试交易策略的问题在于,图表上显示的数据流通常是买价数据流。虽然你可以选择显示卖价数据流(如果可用),但大多数交易软件的回测引擎只能使用一种数据流来计算交易结果。如果你的交易软件能够同时使用买价和卖价数据进行计算,你可能不会遇到这个问题。例如,非面向对象的 TradeStation 只能使用买价卖价数据进行测试。而 MultiCharts 则可以同时使用买价卖价数据。不过,在假设这不会对你构成潜在问题之前,最好先检查一下你的软件。如果这对你是一个潜在问题,以下是一个可能出现问题的例子:

假设你正在交易 EURUSD 外汇对。当前价格是 1.3502/1.3505(为了这个例子,我使用了一个不现实的三点点差,但这个原则适用于更小的点差)。这意味着买价是 1.3502,而卖价是 1.3505。记住,你可以在卖价买入,但不能低于这个价格;你可以在买价卖出,但不能高于这个价格。还假设你的交易软件显示的是买价数据,所以目前显示的是 1.3502。

在这个例子中,你的策略在 1.3500 下单买入。就在你的订单之后,价格下跌到 1.3499/1.3502。由于图表上的价格现在是 1.3499,而你的买入价格是 1.3500,因此软件策略引擎认为你在 1.3500 成交。它认为你当前是多头,但卖出价仅达到 1.3502,因此在现实中你根本无法成交。

“这有什么大不了!”你可能会说。“这种情况发生的频率有多高?”好吧,对于亏损交易来说,这种情况是永远不会发生的,因为对于亏损,价格会持续下跌,你将在现实中成交,就像你的回测引擎成交一样。但对于在卖出价达到 1.3500 之前就变得盈利的交易,你将永远无法成交。根据你的交易方法,这可能导致回测引擎结果与现实结果之间出现巨大差异。至少,你的回测报告将始终偏向乐观。由于你使用这些信息来制定策略,你可能会根据一些非常可疑的结果做出交易决策。尽管我所提供的例子是针对限价单的,但止损单也会发生同样的情况。你的止损会在从未出现在买价数据图上的价格被成交。

为了解决这个问题,你不能像期货那样在每笔交易中简单地增加滑点。这是因为买卖差价问题并不是轻微劣质成交的情况,而是成交与否的问题。或者你的软件平台可能提供先进的订单技术和方法(TradeStation 将该方法称为“价格系列提供者”)。关键在于能够以与你实际交易相同的方式进行回测。这正是我对所有外汇策略使用市价单的原因。由于我使用诸如“在市场上卖出下一根 K 线”的订单,我可能会面临一些远大于止损的损失,这就是市价单的一个重大缺点。想象一下,例如,在美联储公告发布后的五分钟 K 线中,价格可能会发生多大的变化。然而,从长远来看,我知道市价单始终会被成交,并且在考虑点差后,其回测结果与真实账户交易相同。因此,我发现这种情况是可以接受的,因为它提供的回测结果与真实市场成交结果相当吻合。

images 摘要

如你所见,市场数据背后的问题比交易软件让你相信的要复杂得多。你需要投入时间和精力,仔细审查和理解你所使用的市场数据。使用错误的数据,或者不正确地使用正确的数据,可能会导致完全虚假的测试结果。不幸的是,在大多数情况下,你甚至不会意识到存在问题。我建议你在开始时花费与制定进出场标准相同的时间来审查你的市场数据。

第十二章

限制测试

此时,我假设你已经编写、调试并准备好测试策略。不幸的是,当他们到达这一步时,许多交易者会在他们感兴趣的整个市场历史上测试策略,并看看策略的盈利能力。有些人会更进一步,实际上进行数千甚至数百万次的优化迭代。还有什么比将策略运行到极限更好的方法来了解策略的优劣呢?

如你所猜测,我坚决反对进行这种全面的测试。这些测试可能会导致一些看起来很不错的优化回测,但在实时交易中几乎总是会失败。既然成功的实时交易才是目标,那我们成功的标准应该是实时交易,而不是漂亮的回测吗?

测试所有数据的另一个主要问题是,一旦你测试了数据,你就“烧掉”了它。这意味着任何后续的重新测试都会更加曲线拟合,更加优化。想想看:你在所有数据上运行策略 A。结果不错,但不是很棒。你对策略做了一些小的调整和规则更改,然后测试新的策略 B。现在,它产生了更好的结果。你非常兴奋。但你意识到你刚刚进行了优化吗?不,你并没有以优化参数的方式运行策略 A,这是大多数交易软件描述优化的方式。但你确实进行了优化,因为你测试了策略 A 和策略 B,并选择了表现最好的一个。尽管在这种情况下策略 B 的回测优于策略 A,但我更相信策略 A 的结果(除非策略 B 比 A 好得多),因为 A 是在未受影响的数据上运行的。

理论上,你应该只在一组数据上运行策略一次。如果有效,那就太好了;如果无效,你应该转向下一个数据集或工具。原始数据在一定程度上被你的测试污染了。这就是理论与实践偏离的地方。在实际操作中,你最终会在相同数据上测试多个策略,也许不是立刻,但最终这是不可避免的。这就是为什么你需要小心。在我的测试中,我喜欢遵循《伊特克兰之旅:唐·胡安的教训》(西蒙与舒斯特,1972)中唐·胡安的教导:“他轻轻敲击,停留所需的时间,然后迅速离开,几乎不留痕迹。”

如果你把数据视为脆弱的,你更有可能避免这个问题。请以极大的谨慎对待你的数据!

由于使用所有数据进行测试是不合适的,合理且可接受的策略测试方法是什么?一方面,你想验证你开发的核心思想是否有其价值;另一方面,你希望能够添加或更改策略规则,而不被曲线拟合或事后偏差所困扰。此外,你希望尽可能保留数据集中的大量数据不被触碰,因为这将创建一个更好和更现实的前向测试(前向测试将在下一章讨论)。

考虑到所有这些竞争力量,我发现最好在一段历史数据上进行初步测试,但不是在整个数据集上。例如,如果我有 10 年的数据进行完整测试,我将在以下描述的一个或两年的数据上进行初步有限测试。我会尽量使用尽可能少的数据,同时确保交易足够多以具有统计意义。我会尽量随机选择两年的数据,不使用相同的数据或偏向任何特定年份。

一些交易者主张首先在“最有趣”的数据上进行测试。对于大多数商品和期货而言,那将是 2007 年至 2009 年期间,世界市场几乎崩溃。 他们的观点是,如果一个系统在这个时期表现不佳,那么在下一个市场冲击中也可能表现不佳。虽然我理解他们的方法,但我尊重地不同意。我会尽量避免在金融危机期间进行初步测试,因为这可能会让我陷入一个只在严重冲击和恐慌中表现良好的系统。虽然这样的系统在这些时候可能不错,但我担心在更普遍的“正常”时期它会损失更多。

如果我把两年的数据分段并遵循以下流程,我会相当确定我的想法是否有价值。在有限测试阶段的目标并不是确定一个系统是否可交易;而是作为一个门槛,看看交易系统是否有潜力。通常,我会有交易策略在有限的两年测试中存活下来,但在之后更严格的测试中失败。只有极少数情况下,会出现相反的情况,我因为有限的结果而否定一个策略,后来却发现它是一个绝佳的策略。

images 进入测试

测试交易系统时,我通常想知道的第一件事是进入点是否有用。许多时候,看起来好的进入点之所以如此,往往是因为退出点。整体系统测试时,通常很难知道进入点的真实影响。

当我单独评估条目时,通常会采用三种方式进行分析:

  • 固定止损和目标退出

  • 固定栏退出

  • 随机退出

固定止损和目标退出

对于固定止损和目标退出测试,我只是选择适合我交易的工具和时间框架的固定止损和利润目标。对于持续几天的摆动型系统,500 到 1500 美元是合理的止损金额。同样,我设置适当的利润目标。在其他条件相同的情况下,如果你将止损和目标设置为相同的金额,在扣除佣金和滑点之前,你应该在 50%的交易中获胜,假设你的入场不比随机入场更好。使用固定金额作为止损和利润,我只是创建一个带有入场信号、固定止损和设定利润目标的策略。

固定柱退出

对于固定柱退出测试,我创建一个退出条件,在经过 X 个柱后关闭交易。这背后的想法是,大多数好的交易会立刻显示利润,几乎可以立即退出。如果你的入场在 10 个或更多柱之前不显示利润,或许你的入场太早,应该延迟。这个测试确实有助于检查入场信号是否能让你朝正确的方向前进。

随机退出

对于随机退出测试,我通常将其作为“猴子测试”过程的一部分,如后文所述。然而,有时我在测试开始时就使用它。这个概念是基于消除任何退出的影响,仅仅查看入场产生盈利交易的能力。如果一个入场在随机生成的退出情况下总是盈利,那么很可能存在优势。

入场评估标准

对于刚描述的三种测试技术,有几种方法可以查看和分析结果。例如,胜率是比较入场的有效方式。如果你在没有滑点和佣金的情况下测试,你的入场应该能获胜超过 50%的时间,因为这就是随机入场所带来的结果。根据我的经验,我发现 52%到 60%是可实现的,这样高的值表明存在值得的入场技术。

使用胜率的反对论点是,虽然正确很重要,但赚钱更重要。60%的胜率可能比 40%的胜率赚得更少,尤其是当入场是趋势跟随时。趋势跟随入场,如突破和移动平均交叉,通常是胜率较低的系统。它们通过产生少量大赢家和许多小输家来报复高胜率系统,胜利金额很容易超过损失金额。因此,在这些情况下,平均每笔交易的利润变得有用。

由于胜率和平均利润都提供有意义的信息,我同时使用它们。因为这是初步测试,我不担心回撤或其他任何指标。我此时只想知道我的入场是否有任何优势。这两个指标可以帮助我判断这一点。

此时你可能会对优化感到好奇。你应该使用它吗?我会,但当我查看结果时,不仅仅关注最佳的迭代,而是会查看所有迭代。例如,假设我运行 100 次迭代,使用不同的入场输入参数。如果只有少数几次迭代是盈利的或胜率超过 50%,我可能会放弃那个系统。但如果 70%或更多的迭代是有利的,那么我会认为该入场成功通过了测试。

images 出场测试

与入场测试类似,测试出场有几种不同的方法。当出场与入场以某种方式相关联时,它就变得复杂了。这的一个例子可能是在入场时使用支撑线,而在出场时使用阻力线。很难将两者分开。在这些情况下,我可能选择不独立测试出场,而是进行全面的系统测试,这将在后面讨论。

当我独立评估出场时,我通常有两种分析方式:

  • 类似策略入场

  • 随机入场

类似策略入场

独立测试出场的核心思想是看它们是否能帮助你获得优势。大多数人认为优势只在入场时适用,但实际上,出场对最终结果的影响同样重要,甚至更大。研究表明,一个设计良好的出场策略,能够使即使是糟糕的入场系统也能盈利!

因为我稍后会测试实际的入场和出场,所以在这一点上,我想看看出场的表现。为此,我创建一个类似于我想使用的入场的入场。这通常分为两个主要类别:趋势跟随和逆趋势跟随。因为我知道我有什么类型的入场,所以我只是创建一个类似的通用入场。例如,对于趋势跟随的方法,我可能只会采用 X-bar 突破策略。对于逆趋势策略,也许我会使用基于相对强弱指数(RSI)的入场。在任何情况下,我都会创建一个可与我的实际入场相比较的入场。然后,我用我的出场策略测试它。一个对我的类似策略入场有效的稳健出场策略,可能在我的实际入场中也会盈利。这是一种在不涉及入场的情况下测试出场的方法。

随机入场

在后面的章节中讨论,如果你有一个与随机入场配合良好的出场策略,当你将其与一个可靠的入场技术结合时,你可能会拥有一个非常好的系统。我不再像以前那样常用这种方法,但偶尔我也想看看新的出场技术如何与随机的、没有优势的入场配合。

images 出场评估标准

当我单独测试退出时,我通常不看获胜百分比,而是专注于整体盈利能力。此外,我会使用最大有利波动(MFE)和最大不利波动(MAE)作为衡量标准。使用这些指标的目的是避免退出带来过多麻烦(不利波动),并且不希望它回吐过多潜在利润(通过比较实际利润与有利波动)。我发现这些指标的问题在于,设计时过于容易只针对这些数值,而根据我的经验,这并不一定能导致更好的系统。不过,它们确实可以帮助你看到系统的潜力。

images 核心系统测试

虽然单独测试进出信号有其好处(其中一个是你可以随时保存良好的进出点,以便用于其他系统),但如前所述,进出点之间的相互作用通常是相当重要的。无论我是否单独测试进出点,我始终会在初步阶段测试完整的核心系统。

我测试整个系统的目标是查看在有限的数据历史下,策略是否表现良好。此时我使用的主要标准是净利润,我希望在广泛的变量范围内和大多数迭代中看到盈利结果。例如,如果我有一个简单的突破,突破量有 10 个可能值,止损/利润值有 10 个,那就创建了 10 × 10 = 100 个迭代。我希望一个好的策略在这个小数据集中能够在 70 个或更多的迭代中盈利。如果我确实看到这种行为,我通常会运行后面显示的猴子测试,然后继续更深入的测试。

大多数情况下,盈利迭代的数量大约占总案例的 30%到 70%。这使我处于一种“无人区”——显然,该策略本身并不够好,但可能还有可以利用的东西。在这种情况下,我可能会决定添加规则、过滤器,或者以其他方式更改进出点。不幸的是,进行此操作没有固定的协议。很多时候,我会使用之前成功的额外规则或条件。一旦我进行了一些小改动,我会重新评估我的样本结果。

这种修改规则的迭代过程的缺点是你有可能将系统调整到历史数据上。一两个修改可能还可以,但如果你花很多时间修改策略以获得更好的结果,你很可能会陷入“创建一个看起来很好的回测,但实际表现却不佳”的情景。大多数情况下,如果第一次或第二次修改没有显著改善情况,那么这个策略最好就留在废料堆上。

正如我所说,当我进行初步测试并进行有限优化时,我希望看到 70%或更高的案例有净利润,我会稍微调整 30%到 70%的案例,看看是否能改进它们。但是,针对那些糟糕的策略,迭代中产生任何利润的比例不足 30%怎么办?在这些情况下,我采用乔治·科斯坦扎的方法:如果我构建的所有东西都很糟糕,那么相反的东西一定是好的!我会反转信号,在我卖出时买入,反之亦然。根据策略逻辑,这并不总是产生完全相反的结果,但在许多情况下是接近的。不过,毫无疑问,这种相反的效果在加入佣金和滑点之前是非常明显的。为什么会这样?好吧,假设一个交易系统每笔交易平均亏损 50 美元,在 30 美元的佣金和滑点之后。这可能是一个不错的反向策略候选,因为很多人会认为它的平均每笔交易收益是 50 美元 - 30 美元 = 20 美元。但实际上,反向交易的结果会是亏损 10 美元。反转系统时,您必须将佣金和滑点加倍。这里是计算过程:

  • 平均每笔交易-50 美元,在滑点和佣金之后

  • +30 美元的佣金和滑点

  • 平均每笔交易-20 美元,没有滑点或佣金

现在反转系统以产生相反的结果,然后再加上佣金和滑点

  • 平均每笔交易 20 美元,没有滑点或佣金

  • -30 美元的佣金和滑点

  • 平均每笔交易-10 美元,反向系统,加上滑点和佣金

我相信当人们考虑交易相反系统时,他们忽略了正确加上佣金和滑点。这就是为什么大多数“相反”系统表面上看起来很吸引,但在现实世界中很少成功的原因。

在这个过程中,如果我的策略表现成功,我将测试入场、出场和核心系统,所有结果都表明可能实现可交易系统(请记住,我们还有很多步骤要走才能确定系统确实可交易)。这只是初步测试,第一道障碍,但即使我能走到这一步,我也感到有些鼓舞。此时,进入初步流程的最后一步。这个步骤涉及动物,至少在比喻层面上是如此。

images 猴子看,猴子做

我喜欢进行的最后一个测试是我所称的“猴子看,猴子做”。测试的本质是看我的策略是否比扔飞镖的猴子表现得更好。1973 年,巴顿·马尔基尔的一本书声称,“向报纸的财务页面扔飞镖可以选择一个与专家精心挑选的投资组合一样好的组合。”这本书,《华尔街的随机漫步》(W. W. Norton, 1973),是投资者和交易者的经典之作,猴子的想法引起了许多人的共鸣。毕竟,没有人想表现得比猴子还差!我个人并不认同市场随机的所有说法——如果我认同,我真的就没必要寻找交易优势。由于在随机市场中不会存在持续的优势,我发现猴子测试是一个非常有用的测试。

对于我创建的任何策略,其表现必须明显优于任何猴子仅通过扔飞镖所能做到的。如果没有,那么我就没有兴趣交易这样的策略。我使用三种不同的猴子测试和两个不同的时间框架进行测试。通过所有测试让我有信心我拥有比随机更好的东西。

测试 1:“猴子入场”

我进行的第一个测试是看看我开发的入场是否比随机更好。我只是将策略中的入场替换为一个随机生成的入场。我运行这个随机入场,保持其他策略不变,进行了 8,000 次。这生成了 8,000 个独特的性能报告,因为每次运行都会有不同的随机生成入场。通过调整入场信号的频率,我确保获得与我的前行历史相近的交易数量。此外,我还试图匹配多头和空头交易的比例。这两个条件意味着“猴子”交易的频率与我的系统大致相同,并且多头和空头交易的比例大致相同。

通常,一个好的策略在净利润和最大回撤方面会在 10 次中击败猴子 9 次。对于我的 8,000 次猴子测试,这意味着大约 7,200 次的净利润必须低于我的结果,且同样数量的运行的最大回撤要高于我的前行结果。如果我达不到这些目标,我真的要怀疑我的入场是否真的比随机更好。

测试 2:“猴子退出”

我进行的第二个测试是看看我开发的退出策略是否比随机退出更好。显然,它与入场测试类似,只是这次猴子随机退出头寸。我主要通过保持每笔交易的条数与我的前行历史相同来控制随机退出。例如,如果我的前行历史每笔交易平均有四个条,且总是在一天结束时退出,我会调节随机退出,使其平均保持相同。此外,如果这是我的标准,它总是在一天结束时退出。

与猴子入场一样,我希望我的前行结果比 90%的猴子退出表现得更好。

测试 3:“猴子进,猴子出”

在确定我的策略比猴子入场和猴子出场更优之后,我希望看到我的策略优于猴子入场出场。我这样做是因为有时候我的优势在于入场和出场的互动。例如,可能我的入场仅在我将出场设置在支撑或阻力区附近时才有效。单独的入场或单独的出场可能都不足以产生效果。

在这个测试中,我用随机的猴子代码替换所有入场和出场代码。我调整随机入场和出场的参数,使其符合我的策略,具体如下:

  • 交易次数

  • 多头交易与空头交易的比例

  • 平均每笔交易所花费的时间

请注意,这些条件与我应用于其他猴子测试的是相同的。然后,我像其他测试一样运行猴子入场和猴子出场策略 8,000 次,并以相同的方式比较结果。

时间框架

我第一次运行猴子测试是在开发阶段,作为策略需要克服的又一个障碍。不过,大多数情况下,在前进回测的时间框架内运行这些测试几乎总能得到良好的结果。这是因为糟糕的策略很可能在开发过程中不会走到这一步。然而,我还是希望看到我的策略通过这个测试。这让我有信心我的确可能有优势。

另一个我用来运行猴子测试的时间框架是策略实盘运行时。我会参考过去 6 到 12 个月的结果(3 个月也可能是一个不错的数字,尽管如果交易数量较少,有效性可能会受到质疑)。如果在那 6 到 12 个月的时间段内,猴子的表现大幅提升,我就知道我假设的优势可能已经减弱或完全消失。这时,我可能需要考虑停止交易该系统。

猴子测试—示例

为了让你了解猴子测试是如何工作的,在前进回测历史和实时历史中,我将提供一个示例。

图 12.1 显示了该开发系统的前进回测表现,以及初步开发后的表现。该系统在一段时间内表现相当不错,但最终经历了一些显著的回撤。问题是:6 个月的猴子测试是否能显示该系统的优势已不复存在,交易是否应该停止?为了回答这个问题,我将在图中显示的点进行猴子测试。

images

图 12.1 样本系统前进回测性能

基准策略及三种猴子策略的代码,均在附录 A 中展示。

创建可与基准策略相比较的随机策略的第一步是收集基准策略的相关统计数据。这些数据在表 12.1 中展示。

表 12.1 基准性能

参数
时间段 2007 年 3 月 19 日–2011 年 11 月 1 日
净利润 $72,650
最大日内回撤 -$22,270
交易数量 430
多头交易的百分比 40%
平均每笔交易的条形数 2.5
交易天数 1,165
交易数量/交易天数 0.37

所有信息都可以从表 12.1 的性能报告中获取。我将用来与随机策略进行比较的两个参数是净利润和最大日内回撤。所有其他列出的参数将用于“调优”随机策略。调优的目标是使随机策略的交易数量、长短交易的百分比以及每笔交易的平均时间与基准策略大致相同。这样可以实现这两种策略的公平比较。

一旦随机策略的交易数量与基准策略大致相同,我可以将每个随机策略运行 8,000 次。然后我可以比较结果。这些结果在表 12.2 中显示。

表 12.2 随机“猴子”测试 1

测试周期:2007 年 3 月 19 日至 2011 年 11 月 1 日 净利润低于基准案例的案例百分比 最大日内回撤低于基准案例的案例百分比
随机进入,基准退出 100% 99%
基准进入,随机退出 99% 94%
随机进入,随机退出 99% 99%

结果非常明显——基准策略远远好于任何随机策略。这是人类对猴子的胜利!根据这些信息,基准策略显然通过了随机测试。

那么基准策略与随机策略在几个月后相比如何呢?参考图 12.1,基准策略在 2012 年 2 月至 3 月间遇到了一些困难。假设结束日期为 2012 年 3 月 1 日,在过去的 12 个月中,该策略的净利润为$780,最大日内回撤为-$15,680。与随机策略相比如何?经过 8,000 次运行,这里是结果(见表 12.3)。

表 12.3 随机“猴子”测试 2

测试周期:2011 年 3 月 1 日至 2012 年 3 月 1 日 净利润低于基准案例的随机案例百分比 ($780) 最大日内回撤低于基准案例的随机案例百分比 (–$15,680)
随机进入,基准退出 49% 73%
基准进入,随机退出 99% 100%
随机进入,随机退出 60% 95%

这些结果应该引起一些关注。显然,基准策略的表现仅比随机策略稍好,这取决于你关注的数字。就个人而言,我会将所有数字作为一个整体来看,如果大多数数字在 60%到 70%之间或更低,我会感到担忧。如果大多数数字低于 50%,我会非常担忧,因为在所有指标下,我的策略并没有比猴子表现得更好。

在这种特殊情况下,仅有一个值低于 50%,两个值低于 70%,我可能会让策略继续交易。更保守的交易者可能会在此时决定停止交易,这也是一个合理的决定。

基准策略引起关注的下一次是在 2013 年 5 月。在截至 2013 年 5 月 1 年的一年中,基准策略亏损- $1,105,最大日内回撤为- $15,100。这与随机猴子系统相比如何?见表 12.4。

表 12.4 随机“猴子”测试 3

测试周期:2012 年 5 月 1 日至 2012 年 5 月 1 日 净利润低于基准案例的随机案例百分比(–$1,105) 最大日内回撤低于基准案例的随机案例百分比(–$15,100)
随机进场,基准出场 50% 64%
基准进场,随机出场 1% 1%
随机进场,随机出场 49% 72%

结果现在更清晰了。平均而言,猴子系统与基准策略相当或更好。这表明该策略原本的优势消失了,或至少是暂时休眠。明智的交易者会在 2013 年 5 月初停止交易该系统。在这种情况下,从 2013 年 5 月 1 日后基准策略的表现来看,那是一个明智的决定。

将你的策略与随机生成的策略进行比较也可能是有用的。在前面的示例系统中,分析能够显示所开发的策略显著优于随机的猴子掷飞镖系统。这是值得知道的,因为它给了你在开始交易时的信心。

不幸的是,在你制定策略时进行此分析并不能告诉你该策略在未来的表现如何。策略本身可能存在缺陷,导致实时损失。或者市场的特性可能发生了变化,而你的策略无法适应。在这两种情况下,定期将基准策略结果与随机猴子结果进行比较可以帮助你判断策略是否损坏。正如早期分析所示,随机测试可以是一种早期预警检测方法,并可以建议你停止交易该策略,直到其表现好于随机交易。因此,它可以是决定何时停止交易策略的有用工具。

第十三章

深入测试/向前分析

一旦我拥有一个我认为具有某种优势的交易系统,并且它通过了我所有的初步测试,我就会觉得可以进行更深入的测试。如前所述,有四种主要的测试方法:

  • 历史回测——全为样本内

  • 超出样本测试

  • 向前回测

  • 实时测试

多年来,我成功和不成功地使用了每一种方法。目前,我认为逐步前进分析提供了可以测试的历史量、历史与实时结果之间的匹配程度以及对市场变化的敏感性之间的最佳组合。在本章描述的深入测试阶段,我将只使用逐步前进测试。但在我们讨论逐步前进测试之前,如果你没有任何参数需要优化呢?

images 无参数

偶尔,你可能会开发出没有任何参数需要优化的系统。例如,你的进场可能基于特定的蜡烛图形态,而出场可能是设定的止损金额和盈利目标。出于某种原因,你可能决定从不想更改这些止损和目标值,也不想更改进场。你的理念可能是“永不优化”,这无疑是一种避免曲线拟合或过拟合的方法。

在这种情况下,你的深入分析将仅仅是对数据进行一次历史测试。如果结果符合你的目标,你可以直接进入下一步。如果不符合,你应该放弃该策略并继续下一个想法。

一个重要的观点是,如果你的无优化策略不奏效,你不应该回过头来调整策略,然后重新运行。例如,如果你第一次运行后对结果不满意,不应该将进场更改为不同的蜡烛图形态然后再试。这只是另一种方式的进场优化,但仍然是优化。

如果你认为这个技巧可能适用于你,你可以将这两个独特的策略合并为一个可优化的策略,遵循下面展示的伪代码技巧:

策略 1

  • 以蜡烛图形态 A 进场做多

  • 止损 $X,盈利目标 $Y

策略 2

  • 以蜡烛图形态 B 进场做多

  • 止损 $X,盈利目标 $Y

策略 3——策略 1 和 2 的组合

  • 对于 i = 1 到 2

  • 如果 i = 1,以蜡烛图形态 A 进场做多

  • 如果 i = 2,以蜡烛图形态 B 进场做多

  • 止损 $X,盈利目标 $Y

这种方法的好处在于你可以事先知道你正在优化(没有隐藏或遗忘的优化影响你的结果),而且不同策略的组合(例如,策略 1 在第一年可能更好,但策略 2 在第二年可能更好)可能会比单独使用任何一个策略更有效。

如果你真的决定没有参数需要优化,简单地用后面展示的逐步前进分析替代单次历史分析。如果结果有利,则可以继续下一步。不过在大多数情况下,你至少会有一个参数需要优化,对于这些情况,逐步前进分析是最佳选择。

images 前进分析入门

许多人对前进测试感到困惑,不知道它与传统优化有什么真正不同。我认为大多数交易软件包中引入的前进概念使其更难以理解。在“旧”时代,没有专门的软件或电子表格,前进测试必须通过手动或自定义计算机编程进行。实际上,当我在世界杯交易比赛中取得成功时,我依赖于手动进行前进测试开发的策略。这很困难且繁琐,但让我清楚地理解了该过程是如何运作的。

为了使这个概念更容易理解,我将首先在一个简单的突破交易系统上演示该过程。通过这种方式,你可以逐步看到前进分析是如何进行的。

首先,有必要对前进分析做一些简单定义:

  • 在此期间。 这是将要优化的历史数据片段。

  • 样本外期间。 这是将使用来自相邻样本内的优化结果评估的历史数据片段。

  • 适应度因子。 这是用于确定“最佳”结果的标准,使我们能够选择优化的参数。

  • 锚定/非锚定测试。 这告诉我们在此期间的开始日期是否随着时间的推移而变化,或者开始日期是否始终相同。

尽管我稍后会讨论如何选择这些参数的细节,但对于我们的测试案例,我们将使用 5 年的样本内期、1 年的样本外期、净利润的适应度因子和非锚定测试。

我们的策略将是一个非常简单的反趋势突破型系统:

  • 如果收盘价是“X”日的最高收盘价,则进入短仓

  • 如果收盘价是“Y”日的最低收盘价,则进入长仓

  • 止损为“Z”

  • 在 TradeStation Easy Language 中,系统代码变为:


input: X(5), Y(5), Z(200);

if close=highest(close,X) then buy next bar at market;

if close=lowest(close,Y) then sellshort next bar at market;

SetStopLoss(Z);

在这个例子中,我们将使用迷你标准普尔(ES)的连续合约,并使用 10 年的数据,从 2000 年 1 月 1 日到 2010 年 1 月 1 日。我们将使用日线,并在每笔交易中包含$25 的滑点和佣金。

为了比较目的,首先我们将在 2000 年至 2010 年的所有数据上进行优化。使用净利润作为我们的适应度函数标准,我们得到了最优值:

  • X = 9

  • Y = 5

  • Z = $600

这次完整优化在 10 年期间产生了净利润$55,162。

现在,我们将运行前进分析。由于我们正在进行 5 年的优化期,我们将首先优化从 2000 年 1 月 1 日到 2005 年 1 月 1 日。当我们这样做时,我们得到以下最高净利润案例的参数:

  • X = 7

  • Y = 17

  • Z = $600

这完成了我们的第一次样本内评估。现在我们将前述参数应用于我们的第一次样本外期,即 2005 年 1 月 1 日至 2006 年 1 月 1 日。请注意,它被视为样本外,因为它不在第一次优化期间。这个第一次样本外的结果产生了$3,138 的损失。

以类似方式,我们随后对表 13.1 中显示的每一行进行样本内优化和样本外性能运行。

表 13.1 样本向前走测试结果

样本内测试周期 最佳参数 X, Y, Z 样本外周期 样本外结果
2000 年 1 月 1 日–2005 年 1 月 1 日 7,17,600 2005 年 1 月 1 日–2006 年 1 月 1 日 -$3,138
2001 年 1 月 1 日–2006 年 1 月 1 日 7,45,100 2006 年 1 月 1 日–2007 年 1 月 1 日 -$2,325
2002 年 1 月 1 日–2007 年 1 月 1 日 49,7,600 2007 年 1 月 1 日–2008 年 1 月 1 日 +$5,963
2003 年 1 月 1 日–2008 年 1 月 1 日 21,11,1000 2008 年 1 月 1 日–2009 年 1 月 1 日 -$19,113
2004 年 1 月 1 日–2009 年 1 月 1 日 9,5,600 2009 年 1 月 1 日–2010 年 1 月 1 日 +$8,675

一旦完成,我们就得到了向前走分析。为了创建完整的向前走数据性能报告,我们可以创建一个策略,使得每次向前走周期改变时,数值都变化。这样的策略如下:


var: X(5), Y(5), Z(200);
If date>1050101 and date<1060101 then begin
    x=7; y=17; z=600;
end;
If date>1060101 and date<1070101 then begin
    x=7; y=45; z=100;
end;
If date>1070101 and date<1080101 then begin
    x=49; y=7; z=600;
end;
If date>1080101 and date<1090101 then begin
    x=21; y=11; z=1000;
end;
If date>1090101 and date<1100101 then begin
    x=9; y=5; z=600;
end;
If date>1100101 and date<1110101 then begin
    x=9; y=5; z=600;
end;
If date>1110101 and date<1120101 then begin
    x=9; y=5; z=700;
end;
If date>1120101 and date<1130101 then begin
    x=9; y=5; z=700;
end;

If date>1130101 and date<1140101 then begin
    x=9; y=5; z=700;
end;

if close=highest(close,X) then sellshort next bar at market;
if close=lowest(close,Y) then buy next bar at market;
SetStopLoss(Z); 

这将使我们能够比较向前走的结果与优化结果。这在图 13.1 中显示。此比较的有趣之处在于:

  • 优化后的收益曲线远远好于向前走的曲线。这是意料之中的,因为优化曲线是优化的结果。这应该告诉你,几乎任何策略只要优化其参数,就可以看起来很好。

  • 向前走的结果并不好。向前走分析是对策略的“通过”进行严格测试。大多数策略在此分析中失败。但由于这更能模拟现实生活,相较于完全优化的结果,它是一种更准确的分析方法。

images

图 13.1 向前走的结果与优化结果,按开发而成

我提到过几次,但你可能仍在想,“你怎么知道向前走分析更能代表未来的表现,而不是完全优化的测试?”我根据我的经验声称这一点。当前系统就是这种性能差异的一个好例子。对于刚刚完成的分析,优化与向前走分析在 2010 年 1 月 1 日至 2013 年 11 月 14 日的表现如下。在图 13.2 中可以看到,对于优化情况,2010–2013 年样本外周期的表现是平坦的。它与 2005 到 2009 年优化部分的曲线毫无相似之处,后者的年均收益大约为$10,000。向前走分析的情况则大为不同,如图 13.2 所示。2010–2013 年的向前走收益曲线同样是平坦的,但它模仿了 2005–2009 年的向前走结果。换句话说,向前走系统的表现多年来并没有改变——大多数年份都是稳定的平坦或下滑。

images

图 13.2 向前走的结果与优化结果,开发前后

虽然一个例子并不能成为规则,但一般来说,这就是你可以期待的优化回测和向前推进回测的表现。优化结果在应用于样本外数据时,通常会降低。这就是为什么许多人对那些不道德供应商出售的系统感到沮丧的原因。这些供应商展示优化结果,而未来的表现几乎从未与回测一样好。然而,向前推进的结果在整个测试期间应该保持大致相同。这就是许多交易者更喜欢向前推进结果的原因。向前推进分析往往会产生更稳定的权益曲线。再次强调,这不是规则,但根据我的经验,这通常是正确的。

images 向前推进输入

如果我们手动进行分析,如上所述,我们必须在开始分析之前知道以下参数:

  • 在期间

  • 出期间

  • 适应度函数

  • 方法:有锚或无锚

如果你使用软件进行分析(就像我现在所做的那样),你不一定需要提前知道这些值。这既是一个祝福也是一个诅咒。好处在于你只需运行一次优化,而不必反复进行向前推进分析。坏处在于这些参数可以被优化,就像你策略中的任何传统输入参数一样。这可能看起来不像传统意义上的优化,但例如,如果你查看在期间的两个值,并选择结果更好的那个,这仍然是优化。你希望在进行分析之前做出决定。

假设你会提前选择向前推进输入(稍后我们将检查一种替代方法),那么我们该如何为每个输入选择值呢?以下描述了一种确定每个值的方法。

在期间

对于在期间,目标是获得足够的交易,以便对每个期间使用的最佳参数得出有意义的结论。因此,在你的在期间中,每个输入变量应该有一定数量的交易。例如,如果你有四个需要优化的输入,那么你可能希望在在期间获得 100 到 200 笔交易,这相当于每个输入 25 到 50 笔交易。不幸的是,并没有固定的每个输入的“最佳”交易数量,尽管许多人认为 30 是一个具有统计显著性的好数字。

出期间

听起来很疯狂,但我知道有人每天都进行前向分析,这意味着他们的外部周期是一天。就我个人而言,我认为这是极端的,但如果他们成功,我又有什么资格去争辩呢?在选择外部周期时,有几个因素在起作用。首先,如果你设置的外部周期太大,你可能只有一两个外部周期进行前向分析,这意味着测试类似于单周期的样本外测试。其次,如果你设置的外部周期太小,你将每天或每周进行重新优化。如果你有很多系统需要重新优化,这可能在有限的时间内是不可持续的。知道外部周期是有界限的,我通常将我的外部周期设置为内部周期的 10%到 50%之间。因此,如果我的内部周期是 1000 天,那么我的外部周期可能在 100 到 500 天之间。这是一个非常广泛的范围,但对于健壮的系统,你通常会看到最终结果对外部周期并不是特别敏感。100 天的外部周期可能与 500 天的外部周期表现相似。

images 健身函数

在所有的前向分析参数中,健身函数是最具争议的。我相信,两个开发者关于健身函数的激烈争论曾经导致过身体冲突(如此投入的态度!)。我不想通过讨论各种健身函数的利弊来激起争论,但我会告诉你我最成功的几种。

净利润

对许多人来说,这是默认选择,而且这个选择相当不错。毕竟,如果测试结束时没有利润,所有其他参数都是无意义的。我个人使用这个健身因子最多,因为它易于理解和实施。但它没有考虑另一个重要结果:回撤。不过,根据我的经验,通常高净利润与低最大回撤是相辅相成的。如果你决定回撤是必须考虑的,那么下面的某个健身函数应该适合你。

资本曲线的线性

想象一下你理想的权益曲线。权益每天都在上升,而且非常稳定。一个现实的例子是银行或货币市场账户的利息。获得的利息可能很小,但在银行账户中,你每天都能赚钱,永远不会有亏损的日子。如果你能设计一个每天都赚钱的期货系统,且从不出现回撤,那该多好!线性上升的权益曲线是理想的,也是一个很好的优化参数。问题是,除非你的软件将这个适应度函数作为选择之一,否则在实际操作中可能很难真正进行优化。此外,在没有锚定的前向测试中实现这一点可能也很困难。最后,这种优化方法可能会选择低净利润的迭代作为最佳,因为它们可能表现出最线性的特征。低利润案例存在两个潜在问题:首先,由于利润不多,如果你低估了滑点和佣金,可能会选择一个实时亏损的策略。其次,如果最终结果是每笔交易的平均利润非常小,市场的细微变化可能会使你的有效性受到影响。

使用线性权益曲线作为优化标准的一个大优点是,它非常适合头寸规模的设定。想想一个策略,其中你的回撤很小,而利润则缓慢而稳定。这种方法对于积极的头寸规模设定是理想的。

账户回报

如果你在适应度函数中明确使用最大回撤,那么账户回报是一个不错的选择。虽然一些软件包的定义有所不同,账户回报通常被定义为:

账户回报 = 净利润 / (最大回撤 + 所需保证金)

由于所需保证金随着时间变化,许多人只是假设它等于零或某个其他任意值,从而将其从计算中排除。作为适应度函数,账户回报很好用,因为它考虑了利润和获取该利润所需的风险。使用它的最大缺点是,在使用非锚定的前向分析时,结果可能会在不同的时期产生巨大差异。

images 锚定/非锚定

前向分析的一个微妙方面是优化窗口。你可以选择两种方式来处理这个窗口:你可以随时间移动它,或者可以保持起点不变。图 13.3 展示了这两种方法的区别。

images

图 13.3 锚定与非锚定的前向分析

一般来说,这两种方法会给出相似的结果,特别是在分析开始时。但随着时间的推移,结果会趋向分歧。这是因为锚定的前行分析始终考虑整个数据集的结果,而无锚结果仅包括最近窗口的结果。某些情况下,一个方法可能比另一个更合适,但我更倾向于使用无锚方法。我喜欢这种方法,因为它确保优化只包含最近的数据。我并不希望十年前的结果仍然影响我今天的优化结果。

使用无锚数据时,有些适应度函数需要谨慎,结果可能会有误,具体取决于你的前行分析软件。如果你使用手动方法,这不应该是问题,但如果使用软件,请确保计算是基于相关的开始和结束日期,而不是在此期间适应度函数的差异。

一个简单的例子很好地解释了这一点。假设你有在表 13.2 中展示的优化结果。

表 13.2 许多绩效指标不是可加的

优化周期 净利润 最大回撤 账户收益率 = 净利润/最大回撤
年 1 $12,000 | $6,000 2.0
年份 2 $6,000 | $4,000 1.5
年 1– 年 2 $18,000 | $6,000 3.0

在这个例子中请注意,虽然净利润是可加的(第一年和第二年的净利润之和等于第一年加第二年的总净利润),但最大回撤和账户收益率却不是。有些前行分析软件可能假设你的适应度函数是可加的(像净利润),所以在使用无锚结果时,确保你理解软件的工作原理。根据你选择的适应度函数,你的分析可能完全错误。

images 运行分析

一旦你定义了所有的前行输入,就可以像我在之前的例子中展示的那样手动运行分析,或者用软件自动运行。无论哪种方式,最终你都会得到完整的前行分析和你的策略的收益曲线。此时,你需要将结果与目标和指标进行比较。如果系统通过,你当然可以进入下一步。如果它失败,理论上你应该放弃这个策略,开始一个不同的策略。然而,实际上,这样做极其困难。你已经在初步测试和深入测试上投入了大量时间,似乎很可惜就这样放弃你的工作。如果结果接近你的目标,这种感觉尤其强烈。也许降低目标或者对策略做一些小改动并重新进行前行分析可能是成功的路径。或者这只是导致更多的不良习惯和决策呢?

通常情况下,我会在这个时候放弃策略,而不是妥协我的目标或改变策略。但有时我会这样做其中之一或两者。偶尔,这可能是个好决定,但往往并没有那么顺利。记住,你越多地接触(测试)历史数据,你的系统就越可能适应数据。而且,当你放宽标准时,最终得到的东西可能并不是你真正想要的。当真正的资金受到影响时,这可能会成为你心理上的一个重大争论点——为什么继续交易一个你一开始就对其有疑虑的目前亏损系统?

在前向走动分析中,一个常见错误是偷偷优化期。例如,假设你以四年的进期和一年的出期运行前向走动分析。那种情况下的前向走动结果不错,但不算出色,所以你想:“也许我应该使用四年的进期和两年的出期。”那个案例好 200%,并且满足了你所有的目标,因此你决定“这就是要使用的组合。走吧!”

停止。

你意识到刚刚发生了什么吗?一旦你选择了第二组进出参数,重新运行结果并选择最佳案例,你就进行了优化。虽然这不是全面的优化,因为你只比较了两个案例,但仍然算是优化。记住优化结果不能被信任的规则,你在这里面临一个两难选择:接受第一次运行(4 年/1 年),然后因为未达到目标而放弃策略,还是接受第二次运行,并假装你从未优化过。

我再次承认偶尔会这样做,尽管我不记得这曾有过好的结果。关键问题是“有没有办法测试多个进出期,并选择最佳的,同时保持前向走动的完整性?”答案幸运的是,是有的。做法本质上是在第一次分析内部创建第二次前向走动分析。具体做法是按常规运行前向走动分析,但保留最后几年的数据。我通常会保留三年的数据不动。然后,利用我拥有的前向走动数据,我选择最佳的进出组合,然后在最后三年的数据上运行。如果通过了,我就进入下一步。如果没有,我就放弃该策略。但在任何情况下,至少我已经努力选择了最佳的进出组合。这个方法的缺点是你进行了优化,而你越是进行优化,通常情况会越糟。

这个过程看起来是这样的:

  1. 1. 2000 年至 2008 年 >> 运行不同的进出期组合的前向走动分析,选择最佳的进出组合。

  2. 2. 2009 年至今 >> 运行前向走动分析,使用第一步确定的最佳进出组合。

  3. 3a. 如果 2009 年至今的前向走动结果良好,继续开发。

  4. 3b. 如果结果不佳,最好放弃该策略,而不是尝试另一个进出对。

图 13.4 描绘了优化进出期的方法,与传统的前向分析相比。

images

图 13.4 前向测试,嵌套在另一个前向测试中

images 整合前向策略

一旦你完成了前向分析,分析了结果,并发现结果与目标相比相当良好,你就快准备好下一步了。只需再进行一次检查,那就是使用完成的前向历史策略。前向历史策略与可优化策略之间的区别如下:

可优化策略


input: avg(10);
// strategy code

前向历史策略


var: avg(10);
If date is between Jan 1, 2010 and Jan 1, 2011 then
avg=8
If date is between Jan 1, 2011 and Jan 1, 2012 then
avg=12
If date is between Jan 1, 2012 and Jan 1, 2013 then
avg=6
// strategy code

使用前向历史的策略根据日期改变变量。这样,你将拥有无缝的历史记录来运行你的策略;你不需要剪切和粘贴结果来创建前向历史。

注意,你从该策略获得的结果可能与逐个分析方法的结果不同。这在持续数天或数周的波段策略中特别明显。之所以如此,是因为根据前向参数,变量可能在交易中途发生变化,导致交易被退出或反转。要查看这对你的策略是否重要,因此,创建一个独立的前向历史策略变得至关重要。

第十四章

蒙特卡洛分析与孵化

一旦你设置了前向策略,并对结果满意,就该在蒙特卡洛模拟中评估该策略。这是一个重要步骤,因为随机模拟可能显示出截然不同的利润和回撤。历史交易的排列方式可能使最大回撤非常小。但由于历史不会重复,查看交易该策略时可能遭受的最大回撤类型非常重要。

正如第七章之前所述,我使用 Excel 电子表格进行蒙特卡洛分析。你可以在书籍资源网站上下载这个工具 (www.wiley.com/go/algotradingsystems)。网上还有许多免费的和付费的蒙特卡洛模拟器,如果你选择这种方式。一个不错的免费模拟器是 NeoTick 的 Equity Monaco (equitymonaco.software.informer.com/)。一个好的付费工具是@Risk (www.palisade.com/)。所有这些选择将给你相同的基本结果,你可能更喜欢某个工具的结果展示和功能。关键是获得可以作为决策基础的模拟结果。

如果你使用我创建的模拟电子表格,只需从你的策略表现报告中复制交易结果,粘贴到电子表格中,输入你的初始资本、退出点资本和每年的交易次数,然后按计算。电子表格将计算 2,500 次迭代的模拟权益曲线,并向你提供摘要结果。这些结果将基于一年的交易。电子表格的示例输出在图 7.2 中显示过。我通常关注回报与最大回撤比率(ret/DD),我希望看到可接受策略的值高于 2.0。低于 2.0 则表明该策略承担了过多风险,而获得的回报可能不值得交易。

如果你擅长编写 Excel 宏,可以轻松地使用我创建的蒙特卡罗电子表格,并根据自己的需要进行修改。你可以添加头寸规模,例如,或者更改呈现的结果。最终,模拟的目的在于给你提供可以理解和解释的结果。我告诉你什么对我有效;也许这对你有用,但也许你会想到更好的方法。

images 孵化

在我看来,策略开发中最关键的步骤之一,也是心理上最难以实施的步骤。在讨论这最后一步之前,让我们回顾一下我们在策略开发过程中所走的路:

  1. 我们为完成的策略设定了目标和目的,并为各个步骤设定了目标。通过这种方式,我们可以快速排除策略,以避免花费太多时间。

  2. 我们为我们的策略制定了一个我们认为有优势的交易想法。我们还定义了市场、时间框架和其他重要因素,以便进行测试。

  3. 我们对该策略进行了有限测试,并对结果感到满意。我们相信我们可能有优势。

  4. 我们进行了深入测试,尽可能使用步进测试。再次强调,我们对获得的表现结果感到满意。

  5. 我们进行了蒙特卡罗测试,以帮助我们确定策略表现的概率,并为我们提供现实的未来表现情景。

这五个完成的步骤代表了大量的工作,并且可能导致我们在找到成功之前丢弃了数十或数百个策略。完成最后一步,即蒙特卡罗测试,肯定是一项成就。当这一切发生时,你可能会感到非常兴奋,想要立即交易!当然,这将是错误的做法。孵化才是正确的做法。

孵化到底是什么?简单来说,就是观察和等待。通过孵化,你需要在开始真实交易之前等待三到六个月。在此期间,你偶尔会监控策略的表现,就像另一个样本外测试期。我喜欢每月检查一次我的孵化策略。

为什么孵化策略很重要?以下是几个原因:

  • 当你完成蒙特卡罗测试时,你会感到情绪高涨。你的“宝贝”存活下来,并充满潜力。你在这个策略上投入了大量的情感资本,以及你的时间和精力。你希望它成功,甚至可能需要它成功。当然,这导致了脆弱的情绪状态。如果你立即用真钱开始交易,一旦策略表现不佳,你可能会失去清晰的思维,这种情况常常发生。这可能导致你过早放弃策略,或者更糟的是,在表现不佳时胡乱增加规模(“加倍下注”)。

  • 通过在实时交易之前等待一段时间,你会忘记为创建策略付出的心血和泪水,从而更客观地看待它。如果它通过了孵化,太好了——但如果没有,你不会感到沮丧。记住,短期的困难有时是长期成功的代价,这在交易系统中绝对适用。

  • 正如我所展示的,系统开发过程既困难又复杂。在这个过程中,你可能会犯下千百种不同的错误。有些错误可能显而易见,比如过度优化,而另一些可能微妙,比如使用事后偏见来制定你的策略规则。关键是,由于开发中的错误,在你在实时、未见的数据上测试策略之前,没有办法确切知道你是否做错了。重大错误几乎会在实时结果中立即显现,而在这一时期将现金闲置,你将节省大量资金。

  • 孵化给你机会看到策略在实时中的表现。你可能会发现,即使策略赚钱,你也不喜欢它。例如,也许你的策略在每个反转高点卖出。在历史回测中,这可能不会让你烦恼。但在实时中,看着你的策略在每个市场高点抗争,可能并不是你的菜。现在意识到这一点,远比在你投入资金后要好得多。

我通常在没有真钱的情况下进行孵化。这是因为,随着时间的推移,我得出的结论是,我下单的方式、使用的柱形类型等都可以被策略回测引擎很好地复制。然而,有时你可能会希望在小规模上投入真钱。例如,如果你的策略依赖于限价单进行入场,你可能希望用真钱测试,以确保你的成交匹配策略引擎的成交。在某些软件包中,情况可能并非如此。此外,如果你使用特殊的柱形类型,回测结果和真实交易结果可能会完全不同。你可能需要进行实时的真钱测试来检查这一点,但一旦确认问题,你就能够在以后的策略中避免这些柱形类型。有时,检验回测是否准确的唯一方法是用真钱测试策略。

如我所提到的,我通常在孵化过程中不需要进行真实资金测试。一个原因是我避免那些显示或包含以下内容的回测:

  • 在 K 线低点的买入成交或在 K 线高点的卖出成交。这在现实生活中很少发生,但许多不道德的系统供应商和天真的开发者会开发出频繁显示这一现象的策略。

  • 当价格被触及时成交的限价单。偶尔,也许在 0 到 30%的情况下,你会在价格刚被触及时以限价成交。但大多数情况下,价格必须穿透你的价格才能保证成交。

  • 任何异型 K 线,如 Renko、Kase,甚至点数图。由于这些 K 线是根据历史构建的,你的策略成交很多时候是不可相信的。最好避免这些 K 线,除了在实时自由裁量交易中。

  • 策略在同一根 K 线的入场和出场,或者止损和目标设置得如此紧凑,以至于在同一根 K 线上可能会发生盈亏出场。我的经验是,当出场或入场与出场发生在同一根 K 线时,欺骗策略引擎是很容易的,即使是使用逐笔数据。这是由于策略引擎必须对价格波动做出的假设。通常,与真实交易相比,结果会显得过于乐观。

images 评估孵化

我对孵化的目标是让我有合理的保证,确保我在开发过程中没有重大错误,消除我在过程中的情绪,同时还要看看实时表现是否足够吸引人以进行交易。在本书后面,我会分享一些我用来检查这些目标是否确实达到的技巧。

第十五章

多样化

随着你多次推进交易系统开发过程,你会开始意识到你手中有一个算法策略工厂。原材料以入场和出场的策略构思进来。机器,如有限测试、步行前进测试和蒙特卡罗模拟,会处理你的构思,要么将其塑造成更好的产品,要么将其撕得粉碎。在你的工厂末尾,你最终得到的是可以交易的交易系统或注定要报废的垃圾。如果你反复这样做,你会产生大量的垃圾,但也会有一堆可以交易的策略。这就是多样化可以大有作为的地方。

我相信你听过那句老话:“把你的鸡蛋放在一个篮子里,然后看好那个篮子!”在交易中,这就像找到一个交易系统(那个篮子),然后把所有的钱(鸡蛋)都放进去。如果它有效,那当然很好。我相信有些交易者专注于交易一个系统,但我不是其中之一,也不推荐你试图成为这样的人。为什么呢?简单的事实是,交易系统会失败,很少有交易系统能永远存在。此外,所有交易系统都会经历回撤,有时它们会恢复,有时则不会。你真的想让你的钱与一个交易策略的运气(或厄运)绑定在一起吗?我可不想!

为了绕过这个问题,我采取相反的方法,使用多元化。与其只用一个篮子(交易系统),不如把我的资本分散到多个不相关的交易系统中。实际上,我有许多篮子,虽然需要更多的精力来观察和追踪每个篮子,但好处显而易见:

  • 减少对系统失败的担忧。 当你交易一个系统时,你就要受到该系统或其背后方法的制约。如果你采用趋势跟随的方法,而市场在几年内处于平盘状态,你将处于回撤状态,直到市场开始趋势。当你用不同风格的多个系统进行交易时,你的反趋势系统在趋势系统表现不佳时很可能会表现良好,反之亦然。

  • 更少的成交问题。 在交易一个系统时,随着资本的增长,你的交易规模也会增加。最终,你的规模会大到影响你的成交。例如,在黄金交易中,即使交易 10 手,你的止损订单可能会经历几次额外的滑点。然而,如果你交易多个系统,任何一次交易的规模都会较小,从而使成交问题减少。

  • 更平滑的权益曲线。 当你正确地进行多元化时,你将拥有不同的风格、不同的市场和不同的时间框架。这些差异结合在一起,产生更平滑的权益曲线,许多时候减少回撤,几乎总是降低整体波动性。

合理的多元化可能是我见过的最接近所谓交易“圣杯”的东西。多元化背后的技巧是(1)如何设计以多元化为目标的系统,以及(2)如何衡量你是否真正拥有多元化。我将在本章中讨论这两个主题。

images 以多元化为设计理念

在下一节中,我将描述一些简单的方法来衡量多样化,但我在事后使用这些衡量标准,而不是在设计过程中。这是因为很难查看一个交易系统,识别其弱点,然后设计一个第二个互补系统来平滑第一个系统。这是可以做到的,但我认为这是困难的方式。我采取了更简单的方法,并且似乎效果很好。

如果你回顾策略开发的初始阶段,你会记得我们识别了我们交易系统的某些特征:

  • 市场

  • 柱类型/大小

  • 任何自定义时间段

  • 进入

  • 退出

事实证明,采取初始策略并改变这些策略特征中的几个,可能会产生一个不相关的系统。这变得简单,就像用你的交易想法做一些不同的事情!

一个很好的例子是我在本书第四部分设计的两个欧元期货策略。尽管交易的市场完全相同,但我改变了柱的大小(105 分钟柱与 60 分钟柱)、时间段(一个策略在夜间交易,另一个在白天)、进入(每个策略的进入完全不同)和退出(不同的退出,其中一个系统追求小利润,而另一个则追求超额收益)。这些变化导致完全不同的系统行为,进而产生不同的结果,因此实现了多样化。

images 衡量多样化

一旦我们有两个或更多系统,我们如何检查这两个系统的交易是否确实增加了多样化?我通常使用四种方法进行检查。

每日收益相关性

使用这种方法,你只需在 Excel 中对每个系统的每日收益进行相关性分析。对于日内系统,你可以在较短时间段的柱子上运行分析,比如每小时。当我使用每日结果时,我通常检查整个历史期间的相关性,然后是六个月到一年的期间。这种分析可以很容易地在 Excel 中进行。我将每个策略的每日结果绘制成 X 和 Y,并计算 R²相关系数。相关系数越低,说明多样化越好。如果在所有情况下,相关性远低于 1.0,我可以放心地假设相关性很低,因此多样化很高。不过,有一个警告:长期相关性低并不意味着系统永远不会相关。可能会有几周或几个月的结果高度相关。如果你在头寸大小上采取激进策略,你需要格外小心——你认为不相关的策略可能会突然变得相关,从而可能不仅无法降低风险,反而可能加大风险。一个很好的例子发生在 2008 年的金融危机中,当时之前不相关的市场和方法突然齐头并进。在危机时期,多样化可能对你帮助不大。

权益曲线的线性

正如我之前所述,完美线性的权益曲线是交易系统的理想曲线。这也是衡量多样化效果的绝佳方法。你只需获取策略的权益曲线,对其进行线性回归(可以在 Excel 中完成),并报告相关系数 R²值。R²值为 1 是理想的,因为它代表了完美的线性权益曲线。在后面的章节中讨论的欧元系统中,示例的测量结果见于表 15.1。如你所见,组合权益的 R²值优于各个部分的 R²。因此,将这些策略组合成一个系统提供了多样化,导致了更平滑的权益曲线。

表 15.1 使用相关性测量进行多样化检查

策略 R²相关系数
欧元夜 0.9370
欧元日 0.9745
欧元日 + 夜 0.9817

最大回撤

衡量多样化影响的另一种方法是通过最大回撤。尽管交易多个系统可能并不总是导致绝对回撤的减少,但许多情况下确实如此。如果你拥有每个系统和组合系统的权益曲线,这一点很容易检查。这在表 15.2 中展示了欧元系统。

表 15.2 利用回撤进行多样化检查

策略 最大回撤
欧元夜 $3,008
欧元日 $3,523
欧元日 + 夜 $3,265

在这种情况下,组合系统的回撤介于欧元日和欧元夜系统之间。这使得多样化是否发生变得有些不清晰。但一旦我们查看相对风险的回报,答案就明确了。

蒙特卡洛,收益/回撤

由于单独测量回撤并不总是给出明确的答案,我使用蒙特卡洛分析查看组合系统在风险调整后的表现是否更佳。我通过查看年百分比收益与最大百分比回撤的比率来衡量这一点。较高的值意味着我为风险获得了更多的回报。我还查看一年的盈利概率以作确认。当我运行此分析时,结果非常明确(见表 15.3)。

表 15.3 使用收益/回撤和盈利概率进行多样化检查

策略 收益/回撤 一年内盈利概率
欧元夜 2.2 89%
欧元日 5.2 97%
欧元日 + 夜 6.7 98%

在查看所有分析结果时,请注意结论非常明显:组合这两个系统产生了更平滑的权益曲线,相比于最糟糕系统单独表现出更小的回撤,更好的收益风险比以及更高的盈利概率。显然,多样化使组合系统优于其各部分。

这个多样化技术的真正好处在于,它并没有耗费任何真正的数学努力来确保系统的多样化。通过仔细考虑使策略不同,结合不同的进出场和其他一般参数,多样化几乎是可以确保的。虽然这种情况并不总是如此,但在很多时候这确实是有效的,使其成为一种有用且简单的技术。

多样化的一个最终好处将帮助你提高策略开发工厂的产出。正如我所展示的,两个优秀的系统通过共同交易变得更好。因此,这可能意味着你单个系统的绩效目标可以稍微放宽,因为多样化会在后期改善绩效。以这种方式,你可能在创建许多“不错”或“足够好的”策略时会更加成功,而不是只专注于一个“超级出色”的策略。因为创建良好的但不出色的系统要容易得多,因此通过采用多样化的方法,你可能更快实现你的总体目标。

第十六章

头寸规模和资金管理

在此之前,我没有详细讨论头寸规模或资金管理。这并不是说我不重视这些问题;我在很大程度上同意头寸规模大师和作者拉尔夫·文斯的观点,他指出头寸规模是交易中最重要的事情之一。问题在于,有些人将这种观点推向极端,认为头寸规模是唯一重要的事情。这显然不是事实。使用出色的头寸规模管理搭配一个亏损的策略,你在长期内仍然会亏损。

很多人写过关于头寸规模和资金管理的书籍,就像一般的交易书一样,有些好,有些差。我发现最好的书包括范·萨普的《头寸规模的权威指南(范·萨普学院,2013 年[第二版])和拉尔夫·文斯的多本书籍。文斯的书籍更加数学化,对于没有经验的交易者来说难以理解和跟随,但他提出的基本观点通常都是正确的。因此在这一章中,我不会试图重新发明轮子;我会将你引导到那些作者那里,以获取更深入的信息。在这一章中,我将讨论如何进行头寸规模管理,既适用于单一系统,也适用于投资组合层面。但首先,我会与你分享我对一般头寸规模问题的看法。

images 没有最佳头寸规模

在我所有关于头寸大小的研究中,我已经确定,没有最佳或唯一正确的头寸大小方法,这与交易系统无关。一些交易书声称他们的独特方法是最好的,然后通过一两个例子证明这一点。当然,这种说法是虚假的。对于任何给定的收益曲线,你可以尝试不同的头寸大小模型,并找到最适合该特定曲线的模型。但是,你不能因此就说这是任何系统的最佳头寸大小方法。一个很好的例子是一本不久前出版的书(我不会提及书名),它开发了一种新的头寸大小方法。这种方法在交易开始时承担了更多风险,随着账户的增长,逐步缩减头寸大小。当收益曲线在开始时表现良好时,这种方法效果很好,而书中的大多数例子都是如此。然而,大多数人不知道的是,同一位作者在实时应用他的“卓越”方法时,迅速爆掉了多个账户。这很可能是因为他的账户一开始是下跌而不是上涨。因此,不要假设适用于一种交易系统的头寸大小方法在所有交易系统中都有效。

images 风险与收益是一个团队

很多人寻找一种神奇的头寸大小技术,能够在不增加任何额外风险的情况下提供额外收益。然而,通常情况下,收益与风险是相辅相成的——如果你想要更多的收益,就必须愿意承担更多的风险。审查结果时,这一点可能会变得有些模糊。根据收益曲线所示的回报和回撤,可能看起来你获得了很多额外的收益(回报),却没有承担额外的风险(回撤)。但你必须记住,交易开始时所承担的风险在收益曲线上并不会显现。风险是存在的,只是从未实现。无论最终结果如何,从长远来看,你最好假设,当你想要更多收益时,你必须愿意承担更多风险。

images 头寸大小可以优化

很多交易者会制定策略,经过所有开发步骤后,再测试 5 到 10 种不同的头寸大小技术,选择最佳的。然而,许多人并没有意识到,他们刚刚优化的并不是特定的进场或出场参数,而是头寸大小方法本身。就像优化交易策略一样,过去的数据中某种方法表现最佳,并不意味着它在未来同样最佳。事实上,它很可能不会是最佳选择。如果你决心在交易策略上测试不同的头寸大小技术,请确保使用蒙特卡洛分析。这将更好地指示出哪种头寸大小方法(如果有的话)是更好的。

images 亏损系统无法变成赢家

无论你使用何种头寸规模方法,如果你的核心交易策略是失败者,那么没有任何头寸规模方法能够拯救你。这就变得令人困惑,当某些交易大师声称头寸规模是唯一重要的事情时。虽然他们宣扬头寸规模的重要性,但并没有说你可以用一个失败的系统获胜。如果这个想法是真的,那么外面就会有更多富有的赌场赌徒。据我所知,没人能通过头寸规模在任何没有优势的赌场游戏中长期成功。这不包括作弊、算牌或任何其他能让你获得优势的方法。在这些情况下,头寸规模可以对你大有帮助。如果你有一个糟糕的策略,从长远来看,头寸规模技术的选择是无关紧要的;无论你如何规模,你都将亏损。首先要有一个给你优势的策略,然后再应用头寸规模。

images 胜利系统可能会变成失败者

你可能会认为,由于失败的交易系统无法通过头寸规模变成成功的系统,反之亦然:成功的交易系统在采用头寸规模时永远不会变成失败者。没有什么比这更离谱了。将一个成功的系统应用过于激进或不当的头寸规模方法,仍然可以轻易地让你失去所有资金。多年来,我见过许多人这样做。大多数人认为,当他们有一个成功的系统时,他们必须“全力以赴”,尽可能激进地交易。这些人在未来必然的回撤中往往以壮观的方式崩溃。

images 规模的幻想

几乎每个卖交易系统的小商贩都会有类似的销售说辞:“如果你使用我的方法,你每个合同每年可以获利$5,000。所以如果你交易 100 个合同——只需在订单数量上加几个零——你很快就能过上不错的生活!”如果你不能立刻看穿这个说法的透明性,我会解释这个谬论。首先,这个商贩假设你账户里有足够的保证金来实际交易 100 个合同。如果你已经确定$10,000 的账户适合交易一个合同(顺便提一下,这在许多交易者看来已经算是激进了),那么你需要一个$1 百万的交易账户。如果你账户里有这么多钱,你大概会聪明到根本不会听商贩的推销!请记住,资金回撤总是可能发生,你的账户需要考虑这一点。

“交易 100 合约”场景中的第二个谬论是大多数人心理上无法承受。确实,如果股权曲线始终上升,交易 100 合约并年赚 50 万美元是很容易的。但是当你连续 5 笔亏损交易,损失 10 万美元时,心理上的打击可能是致命的。因此,你最好的选择是忽视那些夸夸其谈的人,并合理配置仓位,以便慢慢增加合约,适应相关的金额,然后再扩大规模。

images 短期—孤注一掷

如果你的优势很小,且只想短时间交易,那就疯狂地进行仓位管理。短期内,你可能会获胜。长期来看,你会失败,但短期内会盈利。马丁戈尔投注策略就是经典例子。你开始时投注一枚硬币,每次亏损就加倍投注(两枚、四枚、八枚等)。当你最终获胜时,你将收回所有原始投注,并赢得 1 美元利润。有趣的是,如果你无限制地玩一次,你几乎总能赢得 1 美元(即赢得一次投注序列)。但如果你一次次重复,你的整体成功几率将归零,因为最终会出现连续亏损的投注期,你无法恢复。当然,进行一次投注序列然后离开对大多数人来说是不可能的。但这通常是一个成功的选项。当你为马丁戈尔设置投注限制时,这种方法变得更不吸引人。我认识一些曾经交易过马丁戈尔的前交易员;请注意,我称他们为“前”。

images 不做仓位管理=没好处!

无论是对损失的恐惧、自信心不足还是其他问题,许多拥有盈利交易系统的人从不进行仓位管理。相反,他们多年都维持相同的交易规模。在我看来,这几乎和仓位过于激进一样糟糕。当你拥有一个盈利系统时,你就拥有了产金蛋的鹅。好好照顾这只鹅,了解它需要什么以最大化产蛋,但不要过度。毕竟,在你拥有它的时候,你需要充分利用这只鹅。

images 策略,然后进行仓位管理,还是策略和仓位管理一起?

在我的大部分开发生涯中,我总是先基于交易单个合约来开发策略。在开发完成后,再应用仓位管理。这是一种很好的方法,特别是当你的最终仓位管理是针对一个系统组合时。

另一位交易者安德烈亚·昂格(Andrea Unger),他也是以交易为生的,和我持不同观点。考虑到他曾四次获得期货交易世界杯冠军,我觉得听取他的意见是明智的。他的论点如下:当你开发一个只交易单一合约的系统时,你会得到一个不错的系统,但可能不会充分利用头寸大小。例如,如果在你的开发过程中包含头寸大小,你很可能会减少亏损交易,因为这将允许你以更多合约进行交易,从而实现更高的净利润。这一点根据我的经验是完全合理的。我开发的一个我最喜欢的交易系统就是基于交易一个合约的。不幸的是,该系统的相对损失较大(每个合约$2,000 到$3,000),使得头寸大小变得困难,除非账户非常大。想想你需要的账户规模,如果你想交易 10 个合约,一个交易可能会造成$30,000 的损失。对于一个$300,000 的账户,一个亏损交易会导致 10%的账户损失。这对于即使是最鲁莽的交易者来说也是太大的损失。因此,在这种情况下,也许使用头寸大小来开发系统会建议一个参数设置,其中$500 的最大损失是最佳的。这个系统对于较小的账户来说,更容易应用头寸大小。

因此,尽管我在开发过程中倾向于不使用头寸大小,但要认识到至少有一位(可能还有更多)优秀交易者确实是通过头寸大小来开发的。尝试在你的开发项目中两种方法,看看哪一种你更喜欢,可能是值得的。

images 头寸大小—单一系统

每当我开始交易一个新策略时,我几乎总是以尽可能小的规模开始,通常只交易一个合约。很多人认为恰恰相反;如果你有优势,你需要尽快用较大的规模来利用它。毕竟,优势如果消失了怎么办?这是一个好观点,但根据我的经验,先小规模交易更好。首先,即使经过所有的开发、测试和孵化,这个系统仍然可能没有优势,尽管我认为它有。小规模交易会在这种情况下限制我的损失。其次,我在开始交易时总会对策略产生情感投资——毕竟,我希望看到我的创造成功——所以小规模交易可以消除情感的干扰。这个新策略只会成为我投资组合中的另一个策略。我选择小规模交易的最后一个原因是,我希望根据策略的利润来增加规模。如果策略赚钱,它将会逐渐扩大规模。如果保持平稳或亏损,我的下行风险就会受到限制。

尽管我从一个合约开始,但我总是提前知道在我建立股本时我的大小方案是什么。大多数时候,我只是使用固定的分数大小:

N = int(x * 股本/最大损失)

  • 其中

  • N = 合同的整数数量(总是向下取整)

  • int = 整数函数

  • x = 每笔交易所押的权益比例

  • 权益 = 当前账户权益

  • 最大损失 = 来自前向回测的历史最大损失

唯一由我决定的变量是固定比例 x. 许多交易者会说 x 不能超过 0.02 或其他值。虽然我无法反对将 x 的值保持在较低水平,但我更倾向于使用蒙特卡罗模拟来向我展示最佳的 x 值,这对我来说是最大化回报/回撤比的值。当然,这受到其他限制的影响,如破产风险和最大允许回撤。一个例子将使这一点更清晰。

为了查看固定分数大小的影响,我使用将要展示的欧元系统的蒙特卡罗模拟分析。我使用不同的固定比例 x 值运行分析,并查看以下图表:

  • 中位数回报率—我希望尽可能高。

  • 回报/回撤比—我希望尽可能高。

  • 中位数最大回撤—我希望这个尽可能低。

  • 破产风险—我希望这个尽可能低。

显然,由于我试图最大化回报并最小化回撤,必须有一个平衡点。这不仅取决于结果,还取决于我的个人偏好。例如,如果我不关心回撤或破产风险,我会选择回报或回报/回撤图上的峰值。这对应于 x = 0.32,也正是拉尔夫·文斯的最佳 f. 但是,x = 0.32 时,我有 50%的机会出现最大回撤等于或大于 67.4%。此外,我的破产风险将是 21%。哇!这些数值对我来说太高了。但我会接受 45%的最大回撤和 10%的破产风险。去除所有不符合这些标准的图表点后,结果最大 x 值为 0.175,如 图 16.1 所示。因此,我将在这个特定系统的交易中使用这个 x 值。

images

图 16.1 单系统头寸大小

images 头寸大小—多系统

由于我同时交易多个系统,我必须尊重结果之间的相关性。也就是说,我不能独立确定每个系统的 x 值,然后将它们一起交易。相反,我会将所有系统一起分析,并为每个系统尝试所有 x 值。与单个系统一样,我希望每个系统的 x 值(每个系统的 x 值确实会不同)最大化我的回报/回撤比,同时遵循最大允许回撤和破产风险的限制。此过程的一个例子在 图 16.2 中展示,五个不同的系统同时交易。每个系统的 x 值在我选择的损失限制下最大化回报/回撤比。

images

图 16.2 头寸大小,多系统

显然,我只是刚刚触及头寸大小的问题,但我给你提供了我处理它的思路。如前所述,我的哲学是最开始要慢慢来,让系统利润产生大部分所需的额外资本用于头寸大小。这有助于我保持风险在可控水平。由于我使用固定比例的头寸大小,你可能会想知道如何在你的分析中采用不同的大小技术。只需拿走我在这里展示的内容,并根据你的大小方法进行修改,然后进行相同的分析。这样,你就能为你决定采用的任何头寸大小方法提供一个合理的分析。

第十七章

记录过程

如你所想,跟踪所有你创建并经历这一开发过程的策略可能很快会变成一场噩梦。适当的文档是成功管理这项工作的关键。目前,我使用 Excel 电子表格来管理我的策略。你可以在书籍资源网站上下载并使用这个文件(www.wiley.com/go/algotradingsystems),同时它也展示在图 17.1 和 17.2 中。我已将其设置为识别我认为最重要的项目。当然,随着你在系统开发中的进展,你可能会有不同的项目需要跟踪。在这种情况下,只需编辑电子表格以满足自己的需求。

images

图 17.1 记录开发过程

images

图 17.2 记录开发过程

我在电子表格中跟踪的项目将在本章中讨论。

images 交易目标

我列出所有我的利润目标、回撤、收益率、交易次数等。我发现,当目标在开始时明确写出时,更难接受不符合我目标的系统!

images 交易想法

在这里,我列出了我正在测试的策略的所有细节。

  • 策略名称。 听起来简单,但为每个策略起一个独特的名称有助于你跟踪事务。我使用标准命名约定,这使我能在交易软件的策略列表中轻松找到它。

KJD2013-10 突破 A

  • 其中:

    • KJD = 我的姓名首字母——在 1,000 个策略的列表中,你希望能够轻松找到自己编写的策略。

    • 2013-10 = 年份,后跟两位数字的月份。我在 2013 年 10 月创建了这个策略。

    • BrkOut = 对策略的简单描述。这个例子将是一个突破策略。

    • A = 策略版本。如果我稍后更改或添加规则,下一个版本将是“B”。这有几个目的。首先,它帮助您跟踪策略随时间的变化。其次,它提醒您对策略所做的更改数量。例如,如果您发现自己一直在测试到版本“M”,您可能花费了过多时间修改策略。请记住,过拟合的风险随着每个版本的增加而增加。

  • 作为此命名的一部分,如果向前走版本的代码与基线版本不同,我将在末尾添加“W”,如果是策略的历史向前走版本,我将在末尾使用“H”。

  • 策略—一般描述。 简单来说,我将描述我的策略。

  • 优势。 我认为我的优势是什么?请在此输入。这是一个良好的警示标志—如果您对自己的优势没有任何线索,您可能就没有优势!

  • 市场测试。 列出您计划检查的市场。

  • 柱大小。 输入您正在测试的柱类型。

  • 历史测试期。 列出您分析的开始和结束日期。

  • 市场数据流。 列出您使用的数据标识符。例如,如果我想测试连续黄金合约,在 TradeStation 中我将使用“@GC”。

  • 市场数据自定义。 如果您使用任何特殊的交易时间或其他独特的内容,请在此输入。

  • 入场规则。 描述您的入场规则。您可以使用简单英语、伪代码或实际代码。目的是归档入场方法以供日后参考。

  • 退出规则。 以与入场规则相同的方式描述您的退出规则。

images 有限测试

在这里我列出了有限测试阶段的所有细节:

  • 测试期间。 我用来进行有限测试的一到两年的历史数据样本。

  • 入场测试。 在这里,我将记录入场测试的一般结果(例如,优秀、良好、差)。

  • 退出测试。 在这里,我将记录退出测试的一般结果(例如,优秀、良好、差)(类似方法的入场)。

  • 核心系统测试。 整个系统的一般结果。

  • 随机测试。 如果我进行任何随机“猴子”测试,我将在这里记录结果。

  • 有限测试—整体。 根据所有进行的有限测试,系统是通过还是失败?

images 向前走测试

假设策略通过了有限测试阶段,我现在进入向前走测试步骤。

  • 内期。 内样本期间的交易天数。

  • 外期。 外样本期间的交易天数。

  • 适应度函数。 列出所使用的适应度函数。

  • 固定/非固定。 确定您是否使用固定测试或非固定测试。

  • 最佳进出。 如果您优化了进出期间,请在此识别,并提供真实的外样本日期范围的信息。

  • 创建逐步历史策略。 如果您专门创建了一个带有逐步历史的策略版本,请在此处识别它。我通过在策略末尾加上字母“H”来表示这一点。

  • 逐步测试—总体。 基于所有逐步测试,系统是通过还是失败?

images 蒙特卡罗测试

假设策略通过了逐步测试阶段,我现在进入蒙特卡罗测试步骤:

  • 起始资金。 输入您用于模拟的起始资金。

  • 退出资金。 输入您将停止交易该策略的资金水平。

  • 一年内交易数量。 一年内的交易数量。

  • 收益/回撤比。 输入来自蒙特卡罗模拟的结果。

  • 蒙特卡罗测试—总体。 基于所有蒙特卡罗测试,系统是通过还是失败?

images 孵化测试

假设策略通过了蒙特卡罗阶段,我现在进入孵化测试步骤:

  • 达成目标。 策略在孵化方面是通过还是失败?

images 多样化检查

仅适用于您计划与其他策略一起交易的策略。当前策略是否考虑了多样化的开发?

  • 达成目标。 策略在多样化方面是通过还是失败?

images 头寸大小检查

由于我通常以“每合约一笔交易”的规则测试策略,这个检查很简单。然而,如果我在开发过程中使用了特定的头寸大小,它不应该是优化的结果,并应在此处识别(特别是如果它将与其他系统交易)。

  • 达成目标。 策略是通过每笔交易一个合约开发的,还是使用了其他未涉及优化的头寸大小技术?

images 最终说明

在测试和开发完成后,输入您认为合适的任何信息。例如,您可以列出开始交易的日期。如果策略未通过,但您喜欢入场或出场规则,您可以在此处指出这一点。我有过一些失败的策略,但我仍然喜欢其某个特定方面。通过最后的说明,您可以稍后随时查阅,并轻松记住:“哦,是的,我想用大豆测试这个入场,因为它的高波动性。”

images 最后一份清单

各个单独的表格提供了一种优秀的方式来管理每个策略。此外,我还保留了一个进场和退场想法的列表。这些可能不是完全成型的策略,但它们是我可以采纳并在以后用在策略中的想法。例如,如果我在书籍或交易杂志中看到一个有趣的进场想法,而我无法立即测试它,我会将其添加到我的进场列表中。这个列表有两个目的。首先,它作为一个想法管理器,保存你将来要测试的任何想法。其次,拥有这个列表意味着你永远不会缺少测试的想法。相信我,这个列表的增长速度远超你的测试速度!

第四部分

创建系统

第十八章

目标、初始和前向测试

现在我已经向你介绍了我使用的策略开发过程,我认为为你详细说明我在 2013 年 3 月创建的两个策略的开发过程是有益的,并且我在 2013 年 8 月开始真实交易。如果你访问网站(www.wiley.com/go/algotradingsystems),你将看到这些策略的更新,假设我仍在交易它们,或者如果我决定停止交易,则会有事后分析。

接下来的章节将引导你完成这个过程,之后第二十四章将在我进行实时交易时提供运行评论和更新。

images 开发新策略

和所有新的交易策略一样,我首先设定一个 SMART 目标:

“我想为欧元货币创建一个日内策略,该策略能够获得 50%的年回报,且中位数最大回撤(通过蒙特卡洛模拟确定)为 25%或更少,回报与回撤比为 2.0 或更好。该系统(可能包含多个独立策略)应在其交易的 55%以上的日子里盈利。这个交易系统每天最多进行两次交易。我将给自己一个月的开发时间来完成这个任务(2013 年 3 月底),如果到那时我没有系统,我将继续下一个想法。”

这个目标是否足够成为一个 SMART 目标?让我们来看看:

  • 特定性。日内欧元策略,具有具体的绩效目标。是的,它是具体的。事实上,它可能过于具体——这是一个相当长的目标声明。

  • 可测量性。50%的年回报,最大回撤少于 25%,回报/回撤比大于 2.0,55%的胜率。是的,针对这些基准衡量绩效将非常容易。

  • 可实现性。50%的年回报,最大回撤少于 25%,回报/回撤比大于 2.0。当我刚开始开发系统时,这些目标非常雄心勃勃。事实证明,以正确的方式开发策略是相当困难的。许多人会嘲笑这些数字,因为与一个优化良好的策略相比,它们似乎很小。不过,记住,一个看起来很棒的回测并不总是意味着太多。因此,是的,这里的目标是可实现的。最难的部分将是使该系统成为一个日内策略。

  • 相关性。我的目标声明中的一切都与该系统的发展相关。是的,它是相关的。

  • 时间限制。由于我将开发时间限制为一个月,因此这是一个时间限制的目标。这个时间限制也将防止我对一个不错的策略进行太多更改,这将防止过拟合和其他不良开发习惯。

一旦我确定了 SMART 目标,我就可以继续开发我的交易想法。

根据以往的开发经验,我知道日内系统的开发比长期波段系统要困难得多。在我看来,最佳的日内系统是那些交易频率较低、尽可能长时间顺势而为的系统。这使我倾向于一种相对快速止损的策略,但保留盈利直到交易日结束。为了获得最大的收益,这个系统应该在美国的交易日内进行交易,因为许多大幅波动发生在这个流动性极强的时间段。这个方法的问题在于,拥有许多小亏损和少数大盈利的系统不可避免地会有较低的胜率。为了抵消这一点,我可能需要另一种策略,一种拥有小盈利、较大亏损且胜率较高的策略。

正如你所看到的,思考我想要的系统类型确实帮助我找到了最佳的推进方式。经过进一步思考,我得出了以下结论:

为欧元货币创建两种策略,使用连续合约 @EC:

  • 策略 1:夜间策略“欧元夜”。 从东部时间下午 6 点到早上 7 点,基于 105 分钟的 K 线。所有交易在早上 7 点之前平仓,以免干扰策略 2。该策略将专注于小盈利和较大的亏损,并且只会在东部时间凌晨 1 点之前发起交易(我总得睡觉,除非我将这个策略自动化)。

  • 策略 2:日间策略“欧元日”。 从东部时间早上 7 点到下午 3 点,基于 60 分钟的 K 线,所有交易在下午 3 点之前平仓。交易日结束于下午 5 点,但我将在下午 3 点关闭所有交易,因为从下午 3 点到下午 5 点的交易量要少得多。

在测试期间,由于我使用的是小 K 线,我将只回测至 2009 年 1 月 1 日。通常,对于波段系统,我会使用 5 到 10 年的历史数据,这意味着这是我稍微不同的方法。这也避免了我在 2008 年金融危机期间进行测试,这可能会使开发更加困难。因此,请注意,以某种方式,我在这个策略开发中采取了一些捷径,因为我(1)只使用了大约 4 年的历史数据,以及(2)避免了重大市场事件。我意识到这些捷径会导致一个不如可能的系统那么稳健,但这是我愿意接受的牺牲。策略开发充满了这些权衡,解决它们并不总是有正确的方法。有时你只需要尝试一下,看看会发生什么,而这正是我在这里所做的。

现在我已经建立了初步信息,可以继续制定进出场规则。我将从出场规则开始,因为与入场规则相比,它们相对固定。对于两种策略,我希望每笔交易的损失不超过 $450,考虑到每笔交易的滑点和 $17.50 的佣金。这相当于损失 34 个点。当我进行详细开发时,我会允许这个止损金额低于 34 个点,但绝不会超过。

在获利方面,对于两种策略,我将允许欧元夜间策略的利润目标进行优化,而欧元日策略固定为$5,000。由于欧元从未出现过$5,000 的日内波动,因此$5,000 的限额实际上是在说:“尽可能多获利,持有到交易结束。”

对于两种策略,最终的退出将是在交易结束时平掉所有未平仓交易。这将是一个严格的退出,不需要优化。

随着简单的退出方式得到牢固确立,使这些策略成功的关键在于入场。在经过一些初步检查和测试后,显然反转型入场将是两种策略的最佳选择。反转入场的一个示例见于图 18.1,其思想是在价格停止并反转之前捕捉到一次向上或向下的波动。这使得这些策略成为一种均值回归类型,因为你是在逆趋势入场,并寄希望于它在转变为相反方向的趋势之前反转。

images

图 18.1 反转入场示例

对于策略 1,即欧元夜间策略,多头入场是基于之前 X 根 K 线的平均高点,减去平均真实范围的一个倍数。当然,短入场的确切相反也适用。见图 18.1。

对于策略 2,即欧元日策略,当过去 Y 根 K 线的最高点被触及,且 X 根 K 线的动量向下时,将在当前高点上方 Z 个点设置卖空限价单。对于多头交易,逻辑正好相反。因此,为了成交,该策略计划在价格反转之前再进行一次价格推动。示例入场见于图 18.2。

images

图 18.2 欧元日策略入场示例

我认为我的优势到底是什么?基于我所采用的反转入场策略,我觉得我的优势在于识别非常短期(针对夜间策略 1)和中期(针对日间策略 2)价格可能反转的区域。通过在当前市场远离的地方设置限价单,我将我的优势比作橡皮筋。它不断拉伸,直到我获得限价成交,然后反弹回来,为我带来利润。当然,如果橡皮筋在我的订单成交后继续拉伸,那就意味着我的前提是错误的,我将以全额止损或在交易结束时损失的代价付出。

随着策略的基本结构以及入场和出场到位,我现在可以开始初步测试。

images 有限测试

对于有限测试,我选择只查看 2009 年的结果。由于我的全面测试将覆盖 2009 年至今,我使用大约 25%的数据进行初步测试。这将为我的策略是否可行提供一个良好的指示。请记住,通过这些测试,我在寻找我的入场、退出以及入场和退出组合是否运作良好的总体指示。

入场测试—固定止损和目标. 此测试的结果以及所有其他有限测试的结果见表 18.1。所有结果均可接受,这使我可以进入深入测试阶段。

表 18.1 有限测试总结,欧元日和夜系统

欧元夜 欧元日
入场测试—固定止损和目标 82%的优化是盈利的 76%的优化是盈利的
入场测试—固定条形退出 一到五根条形后退出 >> 良好 一到五根条形后退出 >> 良好
退出测试—相似方法入场 一般的均值回归限价入场 >> 可接受 一般的均值回归限价入场 >> 可接受
核心系统测试 85%的优化是盈利的 81%的优化是盈利的
猴子测试 入场优于随机 入场优于随机
退出优于随机 退出优于随机

入场测试—固定条形退出. 结果看起来不错,让我认为我的入场可能在某种程度上有优势。

退出测试—相似方法入场. 为了测试退出,我创建了一个风格相似的入场条件(均值回归限价单)。如果结果良好,会让我对我选择的退出多一些信心。结果确实看起来不错。

核心系统测试. 此测试是对整个系统的温和优化,入场和退出条件协同工作。结果表明系统表现良好,适合进一步研究。

猴子测试. 这种随机测试在某些情况下非常有用。其他时候,它并没有提供任何额外信息。这里就是这种情况。

有限测试总结. 两种策略通过了我进行的所有测试,因此这些策略可以进一步推进。请注意,这是例外,而不是常规。大多数情况下,结果会差到不需要进一步测试,你可以直接进入下一个想法。在少数情况下,结果将是一般的,你可能会添加规则或过滤器以获得更好的结果。在非常少见的情况下,策略第一次通过时会是可接受的,这就是这里发生的情况。随着你在创建和测试想法方面积累经验,你会发现越来越多的策略会落入这个第三类。然而,在你发展旅程的开始,计划丢弃许多无用的策略,并对其余的大多数添加规则和条件。

images 向前测试

限定测试完成后,我现在可以进行详细的步进测试。这包括运行完整的优化,然后进行步进分析。图 18.3 展示了这个过程。

images

图 18.3 步进测试,欧洲日间和夜间策略

第十九章

蒙特卡洛测试和孵化

完成步进测试后,基于结果我确信我有一个可行的策略。步进测试的权益曲线看起来很好,但与此同时我意识到未来的权益曲线不可能与过去的权益曲线完全相同。我希望,以及此阶段所有开发者的希望,是权益曲线的组成部分(即,单个交易)与步进历史大致相同。想象这一点最简单的方法是考虑平均交易利润及其标准差(散布)。如果这两个值中的任何一个显著变化,系统在未来可能会失败。例如,如果平均交易变为负值,未来的表现显然会是负面的。同样,如果标准差增加,回撤可能会更加严重,系统在进行头寸管理时会更难操作, resulting equity curve 可能会让你感到更多焦虑。

假设步进交易表现将在未来持续,那么观察未来表现如何随时间变化将变得有用。对于这个分析,我通过蒙特卡洛分析模拟了一年的交易。

images 欧洲日间策略

如第七章所述,进行简单蒙特卡洛分析所需的唯一信息是:

  • 起始权益

  • 退出点权益

  • 一年中的交易次数

  • 单个交易结果

对于你进行的任何模拟,你可能希望模拟超过一年的交易,或者你可能希望包含头寸管理,甚至可能希望消除退出点权益——即你停止交易的点。这些细节将是你随着时间推移逐渐发展出来的,因为你会确定你在模拟中喜欢和不喜欢的东西。我使用的确切方法可能不适合你,这没关系。

一旦我获得了所有蒙特卡洛模拟的输入,我只需将它们输入电子表格并按下“计算”按钮。结果如图 19.1 所示。对于日间策略,如果我将破产风险保持在 10% 以下(这是我个人的破产阈值),我发现我需要 $6,250 来开始交易这个系统,并且在“平均”一年里,我可以期待:

  • 23.7% 的最大回撤

  • 129% 的收益率

  • 5.45 的收益/回撤比

images

图 19.1 蒙特卡洛结果,欧洲日间策略

另一个值得关注的点是,我在第一年有 4%的破产风险,这时我的资产会低于$3,000。我在第一年也有 94%的赚钱概率(即年末超过$6,250)。

根据我的目标和目的,所有这些参数都是可接受的,我认为蒙特卡罗模拟结果是成功的。请注意,基于你的目标和目的,这个系统——以$6,250 的起始资本——可能对你来说不够好。例如,许多人希望破产风险接近 0%。其他人可能觉得 25.5%的最大回撤过高。关键在于,适合我的可能不适合你。这就是我认为制定自己目标和目的如此重要的原因。最终,你需要对自己制定的交易策略感到舒适,而交易不适合你的东西无疑是灾难的处方。

images 欧元夜间策略

现在,我将对欧元夜间策略执行完全相同的程序。结果如图 19.2 所示。对于夜间策略,如果我再次将破产风险保持在 10%以下,我发现我需要$6,250 来开始交易该系统,在“平均”年份中我可以预期:

  • 25.0%的最大回撤

  • 52%的回报率

  • 2.0 的回报/回撤比

images

图 19.2 蒙特卡罗结果,欧元夜间策略

另一个值得关注的点是,我在第一年有 6%的破产风险,这时我的资产会低于$3,000。我在第一年也有 85%的赚钱概率(即年末超过$6,250)。

请注意,这一策略远不如欧元日间策略好。我预料到这一点是因为夜间策略的目标。如果你还记得,我在寻找更高获胜率的策略,而不是一定要盈利的策略。尽管如此,夜间策略本身达到了我的目标,尽管其回报/回撤比只有 2.0,处于可接受的低端。但由于它符合我的标准,我可以继续进行最后的蒙特卡罗步骤。

images 欧元日夜策略

虽然知道任一策略都满足我的绩效标准很不错,但对我而言,更重要的是日夜结合策略的表现。然而,在进行蒙特卡罗分析之前,我必须进行一些数据处理。在之前的模拟中,我使用了单个交易作为输入,这样工作得很好。但对于结合策略,我该如何确保正确的交易比例和分布,以反映当我同时交易这两种策略时实际发生的情况呢?有些日子,仅一种策略会交易,而在其他日子,两种策略都会交易。我希望在组合模拟中保留这一点。

将策略结合为一个策略的解决方案是使用每日结果,而不是单个交易结果。这样在特定日的净结果将视为一个系统的结果。关于这一点的示例见于表 19.1 的“结合”列。

表 19.1 将多个系统的每日结果结合成“一个”系统

日期 欧元白天 欧元夜间 结合
2013 年 9 月 9 日 +$100 | | +$100
2013 年 9 月 10 日 +$600 | +$600
2013 年 9 月 11 日 +$100 | +$250 +$350
2013 年 9 月 12 日 −$400 | −$50 −$450
2013 年 9 月 13 日 +$100 | +$100

通过利用这个技术,我们保留了每个策略交易的特征,并将它们结合成每日交易。类似的方法可以用于将任意两个或多个系统合并为一个策略。只需将结果整理为每日结果,并在模拟中使用即可。

一旦我将交易数据整理为每日结果,就可以对结合的欧元白天和夜间策略进行蒙特卡洛分析。结果如图 19.3 所示。对于结合的策略,如果我再次将破产风险控制在 10%以下,我发现我需要$6,250 来开始交易该系统,并且在一个“平均”的年份,我可以期待:

  • 25.8%的最大回撤

  • 176%的回报率

  • 6.6 的回报/回撤比

images

图 19.3 蒙特卡洛结果,两种策略结合

其他有趣的点是,在第一年我有 5%的破产风险,届时我的权益会降到$3,000 以下。我在第一年还有 95%的概率盈利(即,年末的金额超过$6,250)。

此次综合分析中最有趣的方面是,结合系统的表现优于单独每个系统。我再说一遍:结合系统的表现优于单独每个系统。 这归因于多样化效应,我在第十五章中讨论过。回报与回撤比,我在蒙特卡洛分析中的主要指标,从 5.5 提高到 6.6,这是一个相当大的增长。这是因为通过同时交易两个系统,我获得了策略的综合回报,但在下行方面,回撤并不会合并。相反,当一个策略经历回撤时,另一个策略可能正在达到新的权益高点(或者至少没有达到新的最大回撤)。通过交易不相关的策略实现多样化正是使这一切成为可能的原因。

从整体上看蒙特卡洛分析,我的所有绩效目标和指标都在结合系统中得到了满足。因此,我将此分析视为“通过”,并可以继续下一步:孵化。

images 孵化

到目前为止,我大约有 3.5 年的走向前推回测历史。除此之外,我还有大约 5 个月的“孵化”结果,观察欧元白天和晚上的系统实时表现,且没有对原始代码做任何更改(除了定期重新优化)。

  • 走向前推结果:2009 年 7 月–2013 年 3 月

  • 孵化结果:2013 年 3 月–2013 年 8 月

如果过去 5 个月的孵化结果“看起来”与走向前推结果相似,我应该感到舒服地让策略上线。

images 结果相似吗?

这是我判断孵化和走向前推数据是否“匹配”的方法。请记住,我不是统计学家,所以我倾向于保持简单,冒着没有 100%数学和科学严谨的风险。不过,我所做的通过了常识测试。我使用三种方法检查匹配情况:

  1. 学生 t 分布检验。 这个统计检验将告诉你两个数据组(走向前推结果和孵化结果)是否显著不同。

    你可以很轻松地在 Excel 中做到这一点(使用 TTest 函数),或者通过谷歌搜索找到在线 t 检验。

    当我进行这个测试时,它告诉我这些分布不不同的概率为 56%。这让我合理地相信这些策略在实时表现与历史表现相同。然而,如果策略不同的概率为 0 到 20%,我可能会认真怀疑自己是否犯了测试开发错误。

  2. 数据分布比较。 我创建了两个数据的直方图。第一个是实际数据,我将走向前推和孵化结果叠加在一起。它们看起来重叠吗?第二个图表绘制了基于均值和标准差的理论正态曲线直方图。我在图 19.4 中看到了一定程度的重叠。

  3. 权益曲线比较。 这是我最喜欢的方法,但并不是非常科学或数学。我只是绘制所有数据并创建一条权益曲线。当我这样做时,我能否看到走向前推结束和孵化开始的地方?如果能,这表明孵化开始时发生了某些事情,这通常是个坏事。如果你对这个方法感到疑惑,只需创建一个带有优化参数的策略,然后让它运行一段时间。大多数时候,你会注意到曲线的变化。我在图 19.5 中看到的孵化部分曲线没有剧烈变化,这是个好迹象!

images

图 19.4 孵化结果—数据分布比较

images

图 19.5 孵化结果—权益曲线比较

基于这项分析,我可以说该系统在孵化阶段的表现与其前向测试时相同。实际上,孵化阶段的表现优于前向测试,这让我有点担忧(通常情况正好相反)。但它的接近程度让我有信心在开发测试中没有出错。这并不保证当我上线时系统会盈利——这点很重要。

images 最终信息

一旦所有测试完成,我就可以决定是否继续交易该系统。即使策略通过了所有开发步骤,我仍然可能决定不交易它。头寸规模和与其他策略的相关性是我可能决定不交易特定策略的两个原因。

images 头寸规模

尽管我在第十六章中更详细地讨论了头寸规模,但我并没有为任何特定的头寸规模方法设计这个策略。当然,这是在我开始用真钱交易之前需要考虑的重要事项。一个策略可以很好,但如果无法合理应用头寸规模,可能就不值得用真钱交易。当单合约损失过大,而交易该策略所需的账户规模又极大时,这种情况就会发生。

一个例子是一个与我开发并交易多年非常相似的系统。这个系统在 50%的交易中每合约盈利$5,000,而在另外 50%的交易中每合约亏损$3,000。因此,每笔交易的平均盈亏为$1,000,Tharp 预期为 0.33,显示出这是一个相当不错的系统。但要交易这样的系统需要多少钱?假设该策略每年交易 20 次,退出权益点为$3,000,你需要一个$20,000 的账户才能仅有 6%的破产几率。此外,你的最大回撤可能会达到 33%。这对我们许多人来说太多了。为了将回撤降低到 25%以下,需要一个$35,000 的账户。这可能使这个系统超出大多数交易者的可及范围。请记住,这仅仅是交易一个合约。使用任何类型的头寸规模都会使这些回撤和破产数字变得更糟。因此,在你的开发过程中,你可能最终会得到一个盈利的系统,但你却无法交易。

images 与其他策略的相关性

在我开始实时交易策略之前,我总是会检查新系统的表现与我已经交易的系统。我进行每日收益的简单相关性分析。这将告诉我新策略是否与我现有的任何策略高度相关。显然,交易两个高度相关的策略并不是一个好主意,除非你将每个策略的仓位大小减半。否则,你可能会在特定市场或特定交易风格上面临过多的风险。对于独立开发的策略,这通常不是问题,但检查一下总是好的。

images 蒙特卡罗——一致性

进行蒙特卡罗分析的一个有趣的附带好处是你可以了解自己的盈利一致性。想象一下你是一个赌场的经理。在五分钟内,你的赌场可能在赌桌上赢或亏。结果存在一定的随机性,因此即使赌场在短时间内也可能会亏损。随着时间的增加,你的盈利机会会提高,最终接近于确定性。你的赌场每周可能都会赚钱,几乎可以肯定每个月都会赚钱——当然,前提是黑暗势力没有从你那里抽水!

赌场的概念让我思考,我真的希望我的交易系统在一周、一个月或一年内都是盈利的。显然,这取决于我的“轮盘赌”——我的交易系统以及它提供的优势。如果我假设我的历史结果将与未来结果相匹配,我可以使用蒙特卡罗分析来确定我的盈利机会。从这个数字中,我可以确定自己在任何给定时间段内的盈利一致性。

运用这个想法,我对我的欧元昼夜系统进行了分析。在我揭示结果之前,请记住,这个系统平均每年将产生$10,000 到$12,000 的利润。这个系统相当不错。但它能否提供稳定的回报流?以下是结果显示的内容:

  • 每周——59.6%的周应该是盈利的。因此,在一年内,我应该有 31 周赚钱,21 周亏钱。这样可以,但并不是谋生的好方法。

  • 每月——74.8%的月应该是盈利的。在一年中,有三个月会是亏损月。同样,这并不是非常稳定的回报——如果这三个月连续亏损怎么办?

  • 每季度——86.2%的季度应该是盈利的。我喜欢这个。

  • 每年——98.8%的年应该是盈利的。在 30 到 40 年的交易生涯中,只有一年亏损。这非常不错。分析表明,如果我能接受每周和每月的不确定性,那么几乎每年我都将获得至少一些利润。

显然,在我进行这项分析之前,我必须做一些简化假设。例如,我的交易系统平均每年有 151 笔交易。这相当于平均每周三笔交易。然而,任何一周的实际交易数量可能为零、五笔或介于两者之间。每周强制三笔交易会导致一些误差。但我认为这不会对结果产生太大影响。如果我希望 90%的周都是盈利的,那么显然我的策略就无法实现,无论我做了什么假设。

下一个显而易见的问题是:“我应该为每个时间段设定什么数字?”这将取决于交易者及其目标和目的。习惯于每月发工资的交易者可能需要 95%的盈利周,或者每年不超过三周亏损。他可能知道,超过这个亏损周数会导致被驱逐。而专业的商品交易顾问(CTA)通常按月进行评估,因此她可能希望 95%的月份是盈利的。不过,长期交易者可能只关心盈利的季度或盈利的年度。这一切都取决于交易者的具体情况。

为了更进一步分析,随着你在投资组合中增加良好系统,盈利周期的机会也会增加。就像赌场增加新的桌面游戏以补充轮盘赌一样。

images 消除大日子

从历史中消除异常交易对结果有很大影响。在历史中,共有 614 个交易日。盈利超过$1,000 的交易日有 20 天。在一年交易中,我预计会看到 5 个这样的“大”日子。如果没有这些,系统的平均盈利能力将仅略有盈利。我的结论是,如果没有这些大盈利日,我将陷入严重困境。问题是:我是否有理由不期待未来会出现这种日子?也许我的系统规则和变量基本上是为了寻找这些大交易而进行了曲线拟合。考虑到 10 到 20 笔大交易,我想这是一个明显的可能性。然而,这些交易并不是由于数据异常或某些回测问题造成的。策略 2(欧元日)是专门设定的,以让盈利持续,而不是进行限制。如果我只看到少量大盈利交易,我可能会怀疑存在某种数据或回测问题。

还有一个有趣的问题:既然我依赖这些“异常值”来产生大部分盈利,那么在特定年份我能看到很多这样的交易的可能性有多大?

images 异常日

既然我知道我的系统表现将由大盈利交易(异常值)驱动,那么看看在一个交易年中我可以期望看到多少这样的交易就很有趣。以下是我发现的:

  • 一年内,我可能会看到四到六笔大盈利交易。这意味着每隔一个月只有一笔大盈利交易!

  • 每年出现八笔或更多大盈利交易的机会不到 10%(实际上是 6.6%)。

  • 在一年内,我只有零、一或两个大赢家的概率为 13.6%。

这个分析有点令人清醒,它明确了一件事:如果我想在这个系统中取得成功,我必须参与每一笔交易,因为我错过的那一笔可能就是一年中仅出现一次的大赢家。

基于这些数据,我对系统的期望是会有许多平稳或略微上升或下降的时期,偶尔会出现一个大赢家。知道这一点为什么重要?拥有正确的期望对长期成功至关重要。当我没有立即获利时,我不能感到沮丧或失去对系统的信心。知道该期待什么将对我大有帮助,尤其是在我看到每天发生的事情很少时。

第五部分

上线前的注意事项

第二十章

账户和仓位规模

既然我已经开发了一个策略,并在实时中观察了一段时间,并决定用自己的资金进行交易,那么接下来该怎么做?我该如何确定账户的资金量?我该如何设定仓位?我应该从小开始还是从大开始?我有仓位规模方案吗?如果情况变坏,我什么时候停止交易这个系统?

在 2013 年 8 月中旬的孵化期结束时,我完全不知道这个系统在接下来的几个月会如何表现。我的希望一如既往,希望它能表现出色,但和任何策略一样,我总是准备好在必要时止损并停止交易。

为了避免后续混淆,以下是我的策略总结:

欧元交易系统中的两种交易策略:

  • 策略 1:欧元夜。 交易过夜时段,胜率高,有很多小赢和偶尔的大亏损。使用 105 分钟 K 线。

  • 策略 2:欧元日。 交易日间时段,胜率较低,主要盈利来源。使用 60 分钟 K 线。

    • 两种策略是独立的,我在任何给定时间只会使用一种。

    • 市场:欧元货币期货(6E)。

images 何时退出

既然我决定从 2013 年 8 月 20 日星期一开始实时交易我的欧元策略,我必须面对一个大家在开始交易新策略时喜欢回避的问题:如果情况变坏,我什么时候停止交易这个策略?

你可以使用的退出交易系统的条件可能有百万种。你可以设定一个美元金额,或可能等到收到保证金通知,或等到资金耗尽。你可以在连续 X 次亏损后停止,或在 X 个月亏损后停止。没有“一个”正确或错误的答案。

但设定退出点有三个关键:

  1. 这应基于你所交易的系统。例如,如果历史上系统曾经历 25%的回撤,那么在 10%的回撤后退出就毫无意义。这看起来显而易见,但你会惊讶于有多少人做出这样的任意决定,而没有考虑实际系统的特征。

  2. 写下来。经常参考。记住它。这可能在某一天拯救你免于灾难。

  3. 遵循它。如果/当书面标准(不幸地)被满足时,停止交易。 这是一个简单但非常困难的步骤。

我并不总是使用相同的标准来找到我的退出点,但这是我对欧元系统的做法:

  1. 查看前向历史,找到发生的最坏回撤(以日为基础)。将其乘以 1.5,因为最坏的回撤几乎总是发生在未来。对我的系统来说,这个最坏的回撤是$3,265。将其乘以 1.5 得到$4,898。

  2. 使用蒙特卡洛模拟找到 95%的最大回撤水平。这意味着,在一年的交易中,95%的时间我的最大回撤将小于这个金额。结果是$5,082。(如果我想更保守一点,可以使用 99%的水平。那个回撤是$6,512。)

我应该指出,这些回撤数字假设在整个交易过程中只交易一份合约。然而,随着时间的推移,我希望能够交易多于一份合约。这可能会造成混淆——我的实际回撤(涉及多份合约)可能远大于基于一份合约的回撤限制。我只需要记住计算一份合约的回撤,并将其与$5,000 的限制进行比较。这在我建立监控系统时会更加清晰。

根据上述 A 点和 B 点的结果,我将取其平均值,并在单一合约回撤达到$5,000(略微调整)时停止交易。我已经遵循了上述的第 1 点和第 2 点。时间会证明我是否遵循第 3 点——如果需要的话,我会更好地去遵循!

对于这个特定系统,我考虑的唯一退出点是单一合约的回撤。这是简单且相当稳健的。如果我在几年后仍在交易该系统,并且交易多份合约(当然,这是我的希望),我仍将保持每份合约$5,000 的最大回撤限制。

在过去,我曾利用蒙特卡洛模拟的结果帮助我决定何时退出。我也考察过一个基于市场波动的临时退出点,但从未实施。当市场变得非常疯狂时,最好可能是休息一下。我认为没有错误的指标或指标组合可以用来决定何时停止交易。可能也没有“一个适合所有人”的最佳方案。在我看来,关键是选择一些你感到舒适的标准,将其写下来,然后严格遵循。如果你的系统失败,应该没有眼泪。你知道系统可能会崩溃,而你在预定的时点退出。

我认为人们遇到麻烦的地方在于没有“退出点”,或者他们的退出点是在资金耗尽时。以我在 1990 年代末的个人经历来说,交易到资金耗尽而被迫退出并不是一种愉快的方式。

当系统表现既不糟糕到达你的退出点,也不优秀,处于两者之间时,会发生什么?也许它正在赚钱,或者持平,并且在蒙特卡洛模拟所说的可能范围内。你什么时候退出,或者停止交易该系统?我的一般哲学是关注下行风险,让上行自然而然。在这种情况下,我关注最大回撤,只要没有触及,就让系统继续运作。我这样做是因为我无法预测每个月或每年我所交易的特定系统会表现良好、表现不佳,还是仅仅是持平。通常,我会让系统保持原样,而不是随意开关。

但是每年我会几次重新平衡我正在交易的系统——添加新的系统,淘汰表现不佳的系统,并可能调整头寸规模。如果资本成为一个问题,我可能会停止交易,并用一个我认为更有潜力的系统替换掉一个表现微薄但盈利的系统。分析的细节从来都不相同,我对此没有严格的规则。例如,我可能会因为某种原因不再喜欢某个系统而停止交易——也许它不再适合我。

我意识到我在这里有些矛盾。一方面我说:“最大回撤是我唯一的退出标准。”另一方面我说:“除非我有其他合理的理由停止交易。”我通过说最大回撤是一个严格、明确、最坏情况的标准来合理化这一点,并且不会被违反。然而,同时可能会出现其他情况,使得系统不再受欢迎。这些情况可能会导致我更早退出。这是一个很大的灰色地带,遗憾的是大多数交易的事情都是如此。

我可以说我在交易开始时的计划仅包括最大回撤作为退出的唯一标准。由于我使用的小规模和账户规模,我无法预见到需要更多资金来进行更好的系统交易。但我也足够灵活,意识到情况可能会导致我在某个时候调整退出点。

images 最低资金规模

在这一点上,我已经确定(1)我将开始日夜进行欧元系统的实盘交易,以及(2)如果我的单合约回撤达到$5,000,我将停止交易。现在我将确定账户规模。这一点相当重要。启动资金太少,我可能在达到退出点之前就用完资金。资金太多,我的回报率会降低,并且资本配置效率低。目前,欧元货币的交易初始保证金是$2,750。所以,将这加到我的“退出点”回撤上,我得到$7,750。这是我应该开始的最低账户规模。这将允许我交易直到达到最大回撤。

几个重要的考虑点:

  • 我假设我的经纪人要求交易所保证金,即使是日内交易。如果我能接触到日内交易的利率,我可以用更少的资金进行交易。然而,这总是一个风险很大的提议,因为许多人只是因为较低的日内交易保证金而增加自己的规模。这通常不是个好主意。

  • 保证金可以并且会改变。如果交易所要求的保证金上升,我可能会被迫在达到退出点之前停止交易。

  • 我假设我一直在交易一个合约。

事实证明,我希望账户中有超过$7,750 的资金,因为考虑到头寸规模的原因。我将使用$8,500,原因将在后面揭示。

images 头寸规模

如果你有一个好的交易系统,最终你会想用多个合约进行交易。市面上有很多头寸规模方案(范·萨普写过一本关于这个主题的大书),所以没有绝对正确的方法。尽管如此,并不存在一种“圣杯”头寸规模技术,可以在不增加风险的情况下获得更多的回报。简单来说,如果你交易更多合约,你的回报会增加,但风险也会随之增加。

我现在的做法是这样的(至少暂时如此;希望等我的规模变大后,我会变得不那么激进):

一如既往,我只从一个合约开始。为什么?实时交易几乎总是暴露出回测、模拟测试和孵化测试隐藏的问题。例如,如果我的策略是自动化的,如果我的代码中有一些小问题导致发送多个订单或其他错误呢?或者,如果我的滑点估计完全偏离,实际的滑点使我的策略变得无利可图呢?我的经验是,从一个合约开始是发现并纠正任何实时交易问题的最便宜的方法。

我喜欢从一个合约开始的第二个原因是,我希望尽可能与策略表现保持情感上的脱离。一个合约的盈亏波动不会影响我或我的情绪。立刻用十个合约交易会让我有点紧张——我会过于关注系统,投入太多情感。当利润(希望如此)积累时,我可以在一个舒适的水平上增加合约,而不会受到情感的困扰。如果事情进展顺利,六个月或一年甚至两年后,同时用这个经过验证的系统交易十个合约对我来说会变得自然。

有些人会说:“如果你有优势,就要迅速而猛烈地利用它,立刻进行最大规模的交易。优势会消失,所以要趁它存在时好好利用。”这是个不错的论点,我理解这个概念。但我也知道自己最佳的操作方式,刚开始就“全力以赴”对我心理上并不好。当然,你应该选择自己感到最舒适的方法。

我喜欢从一个合约开始的最后一个原因是,我希望这个策略是自我生成的——利润将增加账户,导致更多合约,进一步扩大,再引发更多合约,依此类推。没有利润就意味着规模不增长。这对我来说很有道理;为什么要将更多资金分配给一个没有产生利润的系统呢?

这种方法的一个缺点是添加第二个合同时可能需要很长时间。例如,如果你决定每有$10,000 在账户中就交易一个合约,你将需要 100%的回报才能添加一个合约。然后你还需要再获得 50%的收益才能添加第三个合约。这可能需要很长时间。一些头寸规模技术考虑到了这一点(固定比例规模浮现在脑海中),但这些方法有一些我不喜欢的负面特征。我通过将我的账户规模设置为大约 1.5 到 2 个合约来解决这个困境。这相当于我刚才给出的例子中以$15,000 开始。然后,我只需 50%的收益就能添加第二个合约。这仍然迫使系统表现良好,同时我能更早地获得合约增长。对我来说,这是一个很好的权衡。

考虑到所有这些,以下是详细信息:

对于我的欧元系统,我决定使用固定分数规模。

N[合约] = X * 权益/大亏损

  • 其中

    • N[合约] = 合约的整数数量,总是向下取整。

    • X = 固定比例,我通过蒙特卡洛分析确定。对于这个系统,我使用 0.175(稍后我会解释我是如何得到这个数值的)。

    • 权益 = 当前权益价值。

    • 大亏损 = 最大日亏损,对于我的欧元系统为$885。

基于之前的内容,我可以创建表 20.1。

表 20.1 头寸规模表

ff = 0.175
权益 N[合约]
< $10,114 1
$10,114 2
$15,171 3
$20,229 4
$25,286 5
$30,343 6
$35,400 7
$40,457 8
$45,514 9
$50,571 10

请注意,我的固定比例 0.175 可能看起来非常高。对大多数人来说可能确实如此。我是根据破产风险、年回报和最大回撤来确定的。我使用我的蒙特卡洛电子表格计算所有这些。根据迄今为止的头寸规模分析,我确定使用固定分数规模,X = ff = 0.175 是我最好的选择。请理解,这是我的个人偏好,基于我的个人目标和宗旨,这个数值可能并不适合你。

问题是,我是如何得出这个数字的?为什么不总是交易一个合约,或者使用固定分数值 0.01、0.02、0.10 或 0.50?为了确定适合我的头寸规模方案,我使用了我的蒙特卡洛模拟器,您可以在网站上免费下载其基础(单合约)版本(www.wiley.com/go/algotradingsystems)。对于给定的交易系统,它将估计破产风险、中位数最大回撤和第一年的中位数年回报的概率。

这个计算器的基线版本假设一年内交易一个合约,但宏代码可以编辑以模拟不同的头寸规模技术,这正是我在这里所做的。

我关注四个绩效数字:

  1. 破产风险。 我打到我设定的最低现金余额的可能性有多大。我希望这个数字低。

  2. 中位数最大回撤。 我大约有 50%的机会在一年内达到这个最大回撤。这当然意味着我的最大回撤可能远高于这个值,也可能低于这个值。我希望它尽可能低,并且我根据多次进行此练习确定了个人的上限。

  3. 年回报率。 与回撤一样,我有 50%的机会达到这个年回报率,它可能高得多或低得多。我希望它尽可能高,但没有可接受的下限阈值(尽管 40%是一个不错的值)。

  4. 回报/回撤比率。 精明的读者会认出这是卡尔玛比率,尽管真正的卡尔玛比率是基于三年计算的,而不仅仅是一年。我希望这个值尽可能高,并且有一个可接受的下限。(仅供参考,对于专业商品交易顾问,卡尔玛比率超过 1 被认为相当不错。这意味着如果你想要 25%的年回报率,你必须愿意接受 25%的回撤)。

使用这些标准,我可以尝试几种不同的头寸规模方法,并使用一些不同的参数值。请注意,这并不是包罗万象的;我没有分析许多其他潜在的头寸规模方案。也许有一种方案会比我选择的方案更好。

在我揭示结果之前,我应该提到我对起始余额进行了一些调整,尽管我并没有展示那些中间结果。基本上,通过调整初始账户规模,我在账户中持有过多资金、能够相对快速地增加第二个合约(而不必先翻倍我的账户规模)以及保持低破产风险之间寻求平衡。我最终将起始余额定在$8,500,这在所有竞争指标中是一个不错的折衷。

这里是结果,我选择的方案被突出显示(“ff”是固定的分数金额)(见图 20.1)。

images

图 20.1 头寸规模结果

我的选择符合我所有的标准,我对此感到满意。这种头寸方案对我来说是正确的,正如现在的情况所示。但是, 根据情况的发展,我可能会在未来改变它,要么选择完全不同的方案,要么选择更小的 ff 值(即,随着账户的增长,我会变得不那么激进)。我会让系统的表现决定是否以及何时发生这种变化。

根据我选择的固定分数仓位,结果表明在一个“平均”年份(意味着 50%的年份会更糟,50%的年份会更好),我预计那一年获利 30,735 美元,并在一年内达到 38.1%的最大回撤。这个利润数字似乎有点过于美好……我的座右铭是“如果某事看起来太好以至于不真实,那它可能就是”。而且这个利润数字确实显得太好以至于不真实——第一年的 362%回报率看起来太高,这让我产生了怀疑。不过,请记住,实际的回报率可能在范围的任何地方。只是 362%是中位数值。

我现在查看可能的回报直方图,如图 20.2 所示。如果第一年的结果接近中位数结束权益(黑色垂直线),那将很有趣。如果达到 25%的标记,我也会很高兴,这相当于最终权益约$21,000,或 147%的年回报。几乎进入“太好以至于不真实”的区域,但这仍然是一个可能性。

images

图 20.2 可能的第一年回报直方图

images 不等仓位设置

我在我的欧元日夜系统中对两个策略使用相同的仓位设置,尽管策略 1 和 2 在很大程度上是不同的。它们唯一的共同点是止损点,每合约约$425(34 个点)。考虑到它们不同的交易分布,相同仓位大小的方法是否正确?也许这两个策略的仓位设置应该不同。可能这会改善整体绩效指标。

对于任何交易想法或突发的想法,我会保留判断,直到我进行测试和分析。数字会告诉我这是否值得做。我想,关键是没有情绪。我会省略一些分析的细节,但我主要关注“每交易两个合约的策略 1,换一个合约的策略 2”。

结果

  • 当前方法(相同的仓位,两个策略)

  • 账户规模:$8,500

  • 最大回撤:38.1%

  • 年回报:362%

  • 2/1 仓位方法

  • 账户规模:$12,500

  • 最大回撤:38.3%(与当前方法相同)

  • 年回报:255%

结论: 我需要更多资金在账户中来进行 2:1 的交易比例,而我的年回报会下降。所以这没有意义。

注意: 我进行了相当简单的分析得出这个结论。实际上,我应该让每个策略的固定分数仓位浮动,找到每个策略的最佳值。

第二十一章

交易心理

我经常听到来自自由裁量交易者的声音,谈话内容大致如下:

  • ** discretionary trader:** “我厌倦了亏损。我太情绪化,无法同时交易和做出交易决策。我想尝试算法交易。”

  • 我: “你意识到需要改变你的亏损方式真是好事。你为什么认为算法交易会有效?”

  • 自主交易者: “因为我可以像个无脑的按键者,只需跟随系统。就像《辛普森一家》中的那一集,霍默设定一个喝水的小鸟,持续敲击键盘上的“y”键,这样他就不必做任何实际工作。我想成为那个喝水的小鸟,只需跟随系统。”

  • 我: “你知道那个喝水的小鸟最终停了下来,几乎导致了核泄漏,对吧?”

  • 自主交易者: “哈?”

这大致总结了很多人认为机械交易中没有情感的观点。与自主交易不同,情感在算法交易中表现得不同,但在交易的许多不同方面都存在。算法交易的一个好处是,从理论上讲,你的情感不应该影响进出场信号。当然,关键字是理论上。实际上,情感可能在机械的、百分之百基于规则的交易的许多不同领域中潜入。在这一章中,我将指出一些主要领域,并提供如何最小化其影响的建议,因为就像自主交易一样,情感确实会严重影响算法交易者的表现。

images 何时开始交易

大多数人在决定启动算法策略时,往往不会考虑何时真正进入第一笔交易,直到他们实际操作。但正如我之前所说,在开放交易中间进入一个位置可能会带来情感上的波动。此外,如果你的系统有六个连续的赢家——你是在开始交易前等到出现一两个亏损交易吗?其实要解决的有两个问题:

  1. 在查看其权益曲线后,你应该开始交易你的系统吗?

  2. 你应该在一笔交易进行中开始交易你的系统,还是等待下一个新的入场信号?

就像交易中的大多数决策一样,没有绝对的对与错。但如果你在事前考虑问题并做出一致的决策,就可以在开始时消除很多情感因素。

假设你创建了一个交易系统,其权益曲线如图 21.1 所示(这是我用真钱交易的实际系统)。这是一个非常好的步进测试的权益曲线,并且它通过了你刚刚进行的几个月的孵化测试。系统处于权益高峰状态,你非常兴奋(这就是情感部分!)要开始交易。

images

图 21.1 示例步进权益曲线

乍一看,你看到新高,立即想到:“这是失控的火车,我必须现在上车!”这是可以理解的。然而,在某个时刻,那列火车会减速甚至反向。以股权高点开始交易新系统却立即遭遇亏损,真是一种糟糕的感觉。因此,也许最好等股权曲线稍微回调后再开始交易。当然,你也有可能面临没有显著回调的风险,想想你将错过多少利润!

从新高点开始交易或在回调后开始交易这两种方法各有情绪上的优缺点。在任何给定的系统中,没人真正知道最佳的方法是什么。在多个系统中,可能并不那么重要——一些策略在你开始交易后依然盈利,而其他策略则会立即出现亏损。对我个人而言,似乎大多数系统会立即出现亏损,但我觉得我忘记了那些股权曲线迅速上升的系统,只记得那些立刻亏损的系统。

鉴于这两种方法固有的情绪因素,最简单的做法是为所有未来开始交易的系统做出决策,并坚持下去。例如,你可以决定在四个月成功孵化后开始交易,而不管股权曲线是否处于高点、从亏损中恢复,还是介于两者之间。这样,有时你会对,有时会错,但开始交易应该是一个没有情绪的任务。

一旦你决定了开始交易的方法,你会意识到有一个现有的头寸需要考虑。你应该等待下一个新信号吗?还是应该进入当前的盈利或亏损头寸?情绪可能会影响这个决定。和股权曲线决策一样,最好提前决定,并让情绪远离。

进入现有交易的部分决定取决于你的软件和交易风格。一些自动化平台可能在识别手动输入的头寸时遇到困难。这可能导致你的退出信号无法触发。如果你的软件是这种情况,最好等下一个新入场信号。

你的交易风格在进入现有头寸时也起着作用。在一个快速的日内交易系统中,每天进行多次交易,答案很简单:只需等待下一个入场信号。由于信号出现频繁,几乎不会有太大的得失。然而,对于那些持仓数天、数周或数月的策略,情况则截然不同。这里的最佳方法是什么?如果头寸接近盈亏平衡,就手动进入。可能会让你多花几美元或赚到几美元,但从长远来看,这并不重要。

对于当前有很大收益或损失的未平仓头寸,决定变得更加复杂。这里哪种方法最好呢?有些人会想要进入一个正在盈利的交易,基于盈利交易会继续盈利的理论。这是有道理的,但进入一个盈利的交易可能会带来更大的风险。让我们来看一个例子。假设你的交易设置为盈利 500 美元或损失 250 美元,并且你从未改变利润目标或止损点。现在交易进行到一半,你有 300 美元的未实现利润。你应该进入吗?最初,你的风险收益比为 2:1,而进入交易中期后,你的风险收益比变为 200:550 或 0.36:1。尽管你在获得 200 美元收益之前遭受 550 美元损失的可能性比最初的 500 美元收益或 250 美元损失的可能性要高得多,但我会更关注下行风险。你可能会损失 550 美元,而不是 250 美元。问问自己是否愿意冒这个额外的损失。

同样的逻辑适用于亏损的未平仓交易。然而,在这种情况下,通过进入中途交易,你的损失会更少,潜在的收益可能会大得多。这是我在开始交易新系统时使用的方法:如果当前的未平仓交易是亏损的,我就会进入。如果它是盈利交易,我会等待下一个信号,或直到头寸回调至接近盈亏平衡。这种方法让我感到舒适。我对此没有情绪,不担心自己是否做出了正确的决定,我只是持续执行计划。对我来说,这才是关键点。

如你所见,使用算法系统“上线”会让你面临一些困惑和问题。多年来,我可能尝试过所有关于何时开始交易策略的选择组合。我经历过等待权益曲线回调的纯粹失望,却只看到系统持续上涨几个月。我也曾在开放头寸中立即遭受损失,而等待下一个入场信号会更好。同样,有时正好相反,我在这些决定中“获胜”。总体而言,我认为这并没有改善我的状况,反而导致了情感资本的损失。所以现在我有一个计划,提前确定,并且每个系统都是同样的开始。这消除了方程式中的所有情绪。

images 何时退出

一旦你确定了开始交易系统的方法,你就完成了一半的战斗。但是,你知道什么时候停止跟随这个新系统吗?情感在这里可能起着巨大的作用。无论你是跟随自己的交易系统,还是跟随顾问、通讯或其他服务,如果你没有停止跟随的退出计划,你真的需要制定一个。

为什么?研究表明,当人们处于压力之下时,他们往往会做出糟糕的决策。当然,如果你在系统中亏损,你会感到压力。因此,你可能会对亏损做出本能反应,或者选择逃避,完全避免做决定。这两种情况都是危险的。所以,在你亏损时,是决定何时停止交易策略的坏时机。

理想情况下,你在第一次决定交易系统时就应该确定何时停止交易。如果没有,现在也不算晚。只需确定对你最重要的指标即可。它们可以包括以下内容:

  • 最大回撤。

  • 连续的亏损。

  • 在一周/月/年内的亏损金额。

  • X 个月后的整体利润。

  • 整体胜率低于 XX 百分比。

  • 个人资金趋势线或资金移动平均线的显著突破。

  • 新高,或者突破另一个“良好”指标(是的,有些人试图在高点退出)。

  • 任何可以被测量和监控的东西。

  • 统计过程控制技术——仅限高级用户。

你选择的确切条件可能没有你把它写下来并坚持执行那么重要。这才是关键。它需要明确、确定并且写下来。理想情况下,你还应该告诉你的配偶或朋友,因为当你公开声明时,后退的可能性就会更小。

我听说某个资金管理公司的退出标准是最大回撤的 1.5 倍,以及 24 个月的承诺。这些标准并不差,但最重要的是你觉得舒适的那个——一个你能坚持的标准。

如果你把退出计划写下来并遵循它,你一定会对系统的表现担忧少一些。

一旦你决定开始用真实资金交易某个策略,并制定了在情况不佳时停止交易的方案,你所要做的就是启动系统并让它运行,对吗?你可以安然入睡,去上班,让系统自行运作,而不必投入任何情感,对吧?当然,这正是那些销售自动“机器人”或“顾问”的大师们所宣称的。他们以无情感交易的美好幻想吸引了许多人。不幸的是,就像古希腊的水手因倾听歌声而丧命,许多交易者也因所谓的无情感算法交易中的情感而失利。

在机械交易中,情绪以多种方式浮出水面。情绪介入的最常见时机是在决定是否进行每一笔交易时。显然,如果你已经测试过某个策略并得出结论认为它是有价值的,那么你需要严格按照测试结果进行操作。这听起来很简单,直到出现回撤或连续几笔亏损交易。那时,怀疑和恐惧就会悄然来临。“最后五笔交易都是亏损,而在走前回测的历史测试中,这种情况只发生过两次,”你脑海中的小声音说。“跳过这笔交易,先等一个赢家。”不幸的是,这就是我的思维方式。为了推翻你脑海中的声音,有时候需要钢铁般的意志。但是为了任何长远成功的机会,你必须毫无疑问地继续采取信号。否则,通过挑选和选择哪些交易进行,哪些拒绝,你就完全无效化了所有的测试和分析。因此,换句话说,你只是在赌丨博,而这几乎从来不会有好的结果。

一旦你对自己的策略有了良好的感觉,你就会提前知道何时信号可能会被触发。例如,在每根蜡烛图的收盘时,如果你期待在上升移动平均线交叉时买入,如果当前蜡烛图的趋势向上,你就会知道交叉将在当前蜡烛图的收盘时发生。贪婪在这里可能会占据上风——为什么不在蜡烛图收盘之前就进入呢?额外的利润可能是你的,而没有真正的额外风险。但就像“挑选”某些交易一样,这种“抢跑”的情况真的是个坏主意。会有一些时候它不会成功,也有一些时候会成功。你可能会浪费大量的情绪资本,焦虑于是否应该提前进场(或出场)。不过,请记住,当你没有完全按照系统的指示进行进出时,你根本不应该依赖历史结果。你所创建的实际上是一种新的策略,没有真实的历史基础。

在前面的两种情况下,当你做出与策略规则相悖的决定时,情绪可能会介入。因此,在这两种情况下,通过严格的纪律可以消除情绪——毫无疑问、毫不失误地遵循系统的规则。这种纪律需要时间来培养,尤其是当你只交易一种策略时。你的倾向是仔细观察该策略,频繁思考,并不可避免地考虑推翻该策略。在这种情况下,我的建议是,如果可以的话,交易多种策略。一旦你交易三种或更多策略,遵循规则就变得很难去做。这就像一个连续撒谎者,他对许多人说了这么多谎话,最终真相就会浮出水面。你会对自己实际在做什么和应该做什么感到如此困惑,以至于仅仅遵循规则会变得简单得多。

在自动交易中,我偶尔需要在压力大的时候处理情绪——当出现问题时。可能是网络连接中断、错误下单、经纪商问题、忘记滚动,或者成千上万种突发的“小问题”。一旦你注意到问题或头寸不匹配,压力水平会急剧上升。至少我会如此。我该怎么办——退出所有,等待更好的价格再重新进入,什么都不做,还是在房间里像个傻瓜一样乱跑?这些都是面对不可预见问题时的可能反应;上天知道,我有时也做过 incoherent 的尖叫和咆哮。情绪可能占据上风,在紧张时刻会做出糟糕的决定。

在这种压力大的时刻消除情绪的解决方案出奇简单,但很多时候实施起来却很困难。只需尽快同步你现实世界中的头寸和策略的头寸。不要试图获取更好的价格、细化订单或任何无谓的事情。只需通过市价单重新进入。不要思考这个决定,不要对任何外部刺激做出反应——只需执行并使头寸匹配。这听起来简单,是的,但在现实中可能是无法做到的。只需保持冷静,从长远来看你会好得多。

我之前提到过,但值得重复:成功的算法交易的关键是纪律。你需要足够有纪律地遵循信号,绝不能失败。你必须避免提前进入或过早退出的诱惑。此外,当事情出错时,你必须尽快使系统恢复到规则之内。你能否做到这一点将取决于你的纪律程度。不过,请记住,当你的情绪占据上风时,如果不遵循规则,你基本上就是在赌丨博。市场中的赌徒通常会亏损。

第二十二章

上线前的其他考虑事项

除了从正确的账户规模开始、知道何时退出以及建立头寸大小方案之外,还有其他考虑事项需要在上线前思考。潜在事项的清单很长,这里我只是强调一些我认为在上线时最重要的问题。

images 会计,交易经纪商

我现在实时交易多个系统,并在不同的经纪商处使用各种账户。我这样做有几个原因。首先,当多个系统都集中在同一个账户时,做所有的簿记和会计会变得混乱。不止一次,我忘记关闭的“孤儿”头寸出现。每个交易账户拥有一个交易系统,从管理的角度来看会简单得多。

我使用多个经纪人的第二个原因是,有时经纪人会破产或卷走你的钱。当 PFG Best 在 2012 年倒闭时,我损失了一些钱,当时其创始人透露他多年来一直在伪造银行对账单。我到现在只拿回了大约三分之一的钱,我怀疑我会再看到全部。我对此不再生气,但当我回去看看我在丑闻爆发时在福克斯商业频道上进行的采访时,(video.foxbusiness.com/v/1729212213001/pfgbest-victim-unable-to-trade-with-account-frozen),我很清楚我当时心情非常愤怒。我不想再经历这样的烦恼。对我来说,分散风险可以让我在一个经纪人失败时继续交易。

我的方法的缺点显而易见。如果我担心经纪人失败,拥有更多账户和更多经纪人只会增加我碰到糟糕经纪人的机会,对吧?我的方法可能并不比找到最好的经纪人并将所有资金集中在那个篮子里更好。第二个缺点是,使用多个经纪人导致资本(保证金)使用不够优化。这导致回报减少,因为我的更多资金没有得到有效利用。对我来说,这是一个可以接受的权衡。

因此,对于我的欧元日夜系统,我将开设一个新的交易账户。

在审视我的自动化需求以及我所有代码都是用 TradeStation Easy Language 编写的情况下,使用 TradeStation 作为经纪人或 NinjaTrader 经纪人是最合理的选择。对于 Ninja 选项,NinjaTrader 有一个很棒的小功能,可以将 TradeStation 生成的信号通过 NinjaTrader 处理,然后将信号发送给 Ninja Broker。我以前成功使用过,因此这是一个不错的选项。当然,TradeStation 选项是最干净和最简单的。

images 自动化,无人值守,VPS,订单存放在哪里?

这是我在实施我的欧元日夜策略时需要考虑的其他主题:

备份计划

在理想的世界里,计算机从不崩溃,互联网连接从不中断,你的经纪人总是在线,等等。在现实世界中,很多事情可能出错。一些需要考虑的事项——你是否需要这些?

  • 备份电脑

  • 备份数据存储(异地和本地)

  • 备份互联网服务提供商

  • 备份电源

  • 备份电话线路

  • 备份经纪人

  • 备份交易桌

我知道还有更多,但为这个列表上的所有内容做好备份(甚至可能有备份的备份)会让你走得更远。

是自动化还是不自动化?

在孵化期间,我手动在模拟模式下交易我的策略了一段时间。我必须让 TradeStation 提醒我,之后我会在另一个平台上手动下单。随着时间的推移,我错过了一些交易,犯了一些错误,忘记取消未完成的订单,等等。总体来说,我认为这些错误并没有让我损失任何模拟“资金”。事实上,它们可能还为我省了几块钱。但这不是重点。重点是我想按照我开发的系统进行交易。因此,自动化对我来说最有意义。因此,我将进行自动化交易。

看管与无人看管?

TradeStation 总是提醒客户“自动化交易并不意味着无人看管的交易。”这是相当合理的建议,因为问题时不时会出现,互联网连接会中断,订单会被错过,等等。我计划在这个策略运行时通常待在电脑旁,所以我会说这算是“半看管”。如果我的账户增长且合约规模变得可观,我会重新考虑这种方法。

VPS

很多人使用虚拟专用服务器(VPS)进行交易,以将停机时间和数据延迟降到最低,并提高其可靠性。我个人目前不使用任何 VPS 服务,但我始终在监控我的情况,以寻找使用它的理由。在过去一年中,我只丢失过两次互联网连接,其中一次是在周末。如果我的系统每天交易多于几次,或者我正在运行高频剥头皮策略,我肯定会使用 VPS。

订单存放在哪里

我提到这一点是因为很多人不知道他们的订单在哪里。当你的自动化策略发出订单时,它是保存在你的机器上?在经纪商的服务器上?还是在交易所?而且,不同类型的订单(限价单、止损单)可能有不同的路由。例如,限价单可能会直接发送到交易所,但止损单可能会保留在经纪商那里。

我提到这一点的目的是,你应该知道你的订单在哪里,并在出现问题时有相应的计划。你可能认为你的订单在交易所,但当你的互联网中断且错过了成交后,你可能会意识到它实际上是在你的电脑上。紧急情况下不是了解这些问题答案的好时机。

images 滚动考虑因素

许多交易者在计算滚动时遇到困难。他们错误地认为他们必须“吞下”旧月份和新月份之间的溢价,或者他们必须支付多次点差来完成滚动。如果你做得正确,你就不必支付溢价,但你可能需要支付两次买卖点差的费用,而你还需要支付相当于一次完整回转佣金的费用。很多人错误地认为他们在滚动期间总是会损失或获得溢价。虽然这对于像规模交易这样的策略可能是正确的,但对于具有简单滚动的算法系统来说并不一定成立。我会用一个现实世界的例子来解释这一切。

首先,值得解释为什么需要进行滚动。对于日内交易者而言,每个交易日结束时会平仓,滚动通常不成问题。在滚动日,这些交易者简单地开始交易新的前合约月份。然而,对于摆动交易者来说,情况就复杂一些。在首次通知日或最后交易日(以先到者为准)之前,交易者必须将其头寸“滚动”从旧合约月份到新合约月份。例如,如果你持有九月欧元的多头,你会想要卖出九月欧元,平掉该头寸,然后买入十二月欧元。不出所料,细节中往往藏着问题,实例是展示该过程的最佳方式。

假设我有一个交易欧元的系统。我使用反向调整的连续合约来计算策略的所有参数。我目前正在交易九月合约,但假设今天下午我将其滚动到十二月。

根据我连续合约图表的信号,几天前我在 1.3272 买入了九月合约。那时,九月是前一个月份;连续合约认为我以 1.3272 进入市场。

这个系统的止损为 625 美元,利润目标为 1,250 美元。因此我的止损位于 1.3222,利润目标位于 1.3372。这两个数值都是基于九月合约,这是我最初进入时的主要合约。

现在,几天后,我需要将头寸滚动到十二月。我们先来看一下数学,以及连续合约发生了什么,为什么在滚动时我不会失去两个合约之间的溢价(差异)。在滚动时,假设十二月的价格为 1.3303,而九月的价格为 1.3299。这是一个 0.0004 的差异,这就是反向调整的连续合约需要知道的内容。为了调整连续合约,使十二月成为前一个月份,你只需在现有的连续合约中的每个价格点上加上 0.0004。因此我们这样做,现在有一个以十二月为前一个月份的连续合约。

现在,如果你将交易策略应用于更新的连续合约,该策略将认为你在 1.3276 买入,止损在 1.3226,利润目标在 1.3376。“但等一下!”你说。“我不是在 1.3276 买入的。我在某种程度上被坑了!”这是数学,忽略买卖价差和佣金成本,仅为这个例子。

现实世界——你实际交易账户所看到的

  • 你在 1.3272 买入了九月合约。你在 1.3299 卖出了九月合约。利润 = 337.50 美元。

  • 你在 1.3303 买入了十二月合约。目前价格为 1.3303。利润 = 0 美元。

  • 在现实世界中,你有一个已实现利润 337.50 美元,未实现利润 0 美元。

  • 如果你的新止损被触及,你将损失(1.3226 - 1.3303) * 125,000 = -962.50。将其加上之前已实现的利润 337.50 美元,你的总损失为 625 美元。

  • 如果你的新利润目标被触及,你将获得(1.3376 - 1.3303) * 125,000 = +912.50。加上之前已实现的利润$337.50,总收益为$1,250。

策略世界——你的策略在调整后的连续合约上认为正在发生什么

  • 对于原始连续合约场景,连续合约认为我以 1.3272 入场。

  • 该系统的止损为$625,利润目标为$1,250。因此我的止损位于 1.3222,利润目标位于 1.3372。

  • 对于新的换仓连续合约场景,连续合约认为我以 1.3276 入场。

  • 该系统的止损为$625,利润目标为$1,250。因此我的止损位于 1.3226,利润目标位于 1.3376。

  • 如你所见,现实世界和策略世界的盈亏完全相同。

  • 假设你在 1.3222 买入了 9 月欧元合约,现在是 9 月中旬,你必须转到 12 月合约。当你在算法策略中执行这个换仓时,实际上该怎么做?我通常有三种不同的方式。每种方式都有其优缺点。

方法 1:快速换仓(通常最贵)

在这种方法中,你以市场价卖出 9 月欧元,并以市场价买入 12 月欧元。由于两个订单都是市场单,它们将立即执行。根据上述价格,这里是计算:

以 1.3299(买入价)卖出 9 月合约

以 1.3304(卖出价)买入 12 月合约

已实现利润 = $962.50 - $5.00 佣金 = $957.50

未实现利润 = 从 1.3304 的多头

优点:保证成交,快速,简单

缺点:你支付两个买入/卖出差价,如果第二个订单不够快,市场可能会从你身边溜走,导致损失。

方法 2:逐步换仓(如果正确执行,通常最便宜的方法)

在这种方法中,你以市场价卖出 9 月欧元,并试图在 12 月欧元中以买入价下单。卖出立即执行,而买入则是限价单,希望能在你想要的价格成交。你也可以反向操作:先以限价单卖出,然后成交后立即以市场单买入。你可能应该在差价最大的那一边使用限价单,而在差价较小的那一边使用市场单。根据上述价格,这里是计算:

以 1.3299(买入价)卖出 9 月合约

以 1.3303(买入价)买入 12 月合约

已实现利润 = $962.50 - $5.00 佣金 = $957.50

未实现利润 = 从 1.3303 的多头

优点:通过以比方法 1 更好的一点进入 12 月合约,你可以节省$12.50。

缺点:更复杂,而且你可能需要追赶市场以获得 12 月的成交。试图过于贪婪地使用限价单,可能会轻易损失超过一个点。

方法 3:交易所支持的差价换仓(费用通常介于方法 1 和方法 2 之间)

交易所有一个很好的工具来帮助做差价交易者——专用报价馈送和可交易符号,用于执行差价订单,这就是展期。在这种情况下,你是在买入或卖出差价,而不是单个腿。你在两个腿上同时完成交易。根据上述价格,这里是计算:

在 4.5(卖出价)买入差价。注意,这并没有告诉你实际的执行价格。你将在对账单上看到这些,实际上它们是无关紧要的。因此,我们假设一些价格,保持差价填充价格正确:

在 1.3329 出售九月合约

在 1.3329 买入十二月合约 + .00045 = 1.33035

平仓利润 = $962.50 - $5.00 佣金 = $957.50

持有利润 = 从 1.33035 做多

优点:简单,没有单腿执行的风险,成本通常介于方法 1 和方法 2 之间。

缺点:一些经纪商不支持此操作。例如,TradeStation 的自动交易主平台不允许这样做。你可以在 TradeStation Futures 4.0 平台手动进行,但该平台并不适合算法策略。下单也容易出错,可能买入差价而不是卖出。你必须小心。此外,不要以为仅因为你在交易差价符号,就只需支付一次佣金。一些人认为这是正确的,我想那些人并没有仔细阅读他们的对账单。当经纪公司进行会计处理时,会将差价拆分为每一腿的单独买入和卖出。因此,佣金是为每个腿收取的。用这种方法没有免费的午餐!

从上述示例中可以看出,所有三种方法之间存在$12.50 的成本差异,方法 1 是最贵的,方法 2 是最便宜的,方法 3 介于两者之间。这并不总是如此,但一般是对的。

我没有提到的一种方法是对差价的两侧使用限价单。机智的读者可能已经想到这种方法,以及它如何在每次展期时节省两边的差价。我没有包括它的原因是因为这是一种糟糕的做法。从理论上讲,这种方法可以节省你两个差价,但实际上只有一个差价会被填满,而价格往往会远离你的第二个限价单,让你只剩下半个展期(换句话说,平仓)。因此,这种方法成功的次数被不成功的次数完全掩盖。最终,试图节省几美元的差价成本会让你花费更多。因此,我建议采用上述三种方法之一,迅速完成展期,然后继续其他交易活动。

这就是如何实际完成滚动的方式。每当有机会时,我都会使用交易所支持的价差来进行我的滚动。我可以在手动输入订单的系统中做到这一点。对于我完全自动化的系统,我通常使用方法 1,尽管这最昂贵。当我使用方法 2 时,有时会发现自己在追逐市场的订单,或者更糟的是,我会暂时忘记滚动,这让我短时间内处于双重风险之中,直到我修正它。

第六部分

监控实时策略

第二十三章

监控实时策略的来龙去脉

在工厂中,当机器制造零件时,操作会受到严格监控,尺寸会被仔细检查。目的是确保零件制造过程顺利进行,并在情况开始恶化时发出早期警告信号。在评估实时交易系统时,同样的过程适用。我使用各种工具来监控我正在交易或孵化的策略。

我使用的第一个图表是我称之为“鸟瞰图”的图表,如图 23.1 所示。它让我一目了然地看到我的策略在历史和实时中的表现。为保持一致性,我对所有数据使用相同的数据源。在我的案例中,是 TradeStation 提供的交易列表。你几乎可以从每个交易平台获取类似的数据。不是实际的真实资金数据,将在后面的图表和指标中讨论。

images

图 23.1 鸟瞰权益图

此图表的目的是评估实时表现的整体有效性(右侧曲线部分)。实时数据是否与历史测试和孵化期数据一致?如果不一致,可能存在问题。也许由于市场条件,策略已停止正常工作。或者策略中关于限价单成交的假设并不现实。这在剥头皮策略中特别常见,尽管你可能需要实际的真实资金结果来验证这一点。错误的假设或策略开发技术在历史或孵化测试中可能不会显现,但在真实资金投入时肯定会被揭露。

我每几周更新一次此图表,并迅速回顾。这让我大致了解我的策略是否按预期表现。如果是,我可以迅速转向下一个图表。

如果你不知道如何创建如图 23.1 所示的权益图,这里是创建方法。

images 如何构建权益曲线(以及回撤曲线!)

有时,在 20 多年交易之后,一些任务对我来说变得如此机械和常规,以至于我忘记了曾经需要学习它们。这就是创建权益和回撤曲线的情况。对我来说很简单,但对从未做过的人来说,这可能是一个艰巨的任务。因此,我将阐述创建权益曲线和回撤曲线的数学原理。

权益曲线

权益曲线可以在每笔交易的基础上构建,也可以根据你希望的任何时间尺度构建。我喜欢使用日权益图,部分原因是为了消除日内价格变化的噪音。你可以使用每日账户报表来获取当前的权益余额。

以下是基于日数据构建权益曲线的具体步骤:

  • 第 0 天权益 = 初始起始余额

  • 第 1 天股权 = 第 0 天股权 + 第 1 天期间股权变化

  • 第 2 天股权 = 第 1 天股权 + 第 2 天期间股权变化

  • 依此类推……

然后,你只需绘制当天的 X 股权值,你就得到了你的股权曲线。

回撤曲线

回撤曲线是某一天的股权与最大股权之间的差值。所以,假设一个账户在第 0 天开始时有$10,000。在第 1 天,它达到了新的股权高点$10,500。由于这是新的股权高点,第 1 天的回撤为$0。在第 2 天,假设股权下降到$9,700。现在,第 2 天的回撤为$10,500 - $9,700 = $800。接下来的日子也是如此。在达到新的股权时,回撤将简单地为$0。在所有其他日子,回撤将是该天股权与截至那时的最大股权之间的差值。

第 X 天回撤 = $0 或(第 X 天股权 - 从第 0 天到第 X 天的最大股权)中的最小值

创建股权和回撤曲线的电子表格已包含在网站上 (www.wiley.com/go/algotradingsystems),以及本书的资源网站。

images 月度总结图表

当我曾在航空航天公司工作时(有时我称之为“现实世界”),我们的小公司(年销售额 2.5 亿美元)会举行一个名为“How We Doin’”的每周销售和生产会议。尽管语法不正确,但这是公司经理快速了解当月和季度销售情况、质量和生产问题,以及公司当前状况的绝佳方式。

现在,快进几年。我全职交易,独自工作。但我仍然希望一目了然地查看“我做得怎么样”与我的策略和交易。显然,我的账户报表和股权曲线讲述了整体故事,但对我来说这还不够详细。哪些策略表现良好?哪些策略表现不佳?我正在孵化的策略情况如何?我应该对我正在交易的内容做出一些改变吗?这个“我做得怎么样”的报告可以帮助我回答所有这些问题。

我开发了一个电子表格来帮助我完成这个任务。它让我一目了然地看到我的策略表现如何,如果需要,我可以轻松深入查看细节。

首先,有一个总结页面,如图 23.2 所示。我在此页面上包含了我正在实时交易的每一个策略。我还在另一个部分中包括了我目前正在孵化的策略。这个总结表收集了我感兴趣的所有数据(当然,如果你自己做这件事,你可能会选择与我不同的指标)。这个总结表从各个单独的表格中获取数据,稍后我会详细描述。

images

图 23.2 月度总结图表

为了保持简单,我将所有内容基于一个合约进行交易,尽管这通常不是我实际交易的方式。为什么?我使用这个电子表格的目标是查看我的策略与我认为(计算)它们应该表现如何的对比。如果我包括头寸大小,这将使我的视图变得复杂。

在这张表中的所有数字中,我主要关注两列:

  1. 回报效率. 我是如何与我的期望相比的?这就是我定义回报效率的方式,它仅仅是我的实际回报除以我的预期回报。如果我的策略表现完全符合我的计算,那么它将是 100%。显然,我希望这个数字接近或超过 100%。通常,当我将所有策略综合考虑时,我发现我的效率在 70%到 100%之间。因此,这意味着如果我的历史测试表明我应该每年赚取$10,我实际上赚取的在$7 到$10 之间。

  2. 回撤效率. 这是我在回撤方面的表现。就像回报效率一样,我计算我的实际回撤除以我的预期回撤。然后我将结果减去 1,以使数字 100%成为理想值。这种做法有些反向,但我这样做是为了使两个效率数字都有 100%作为理想值。然后,效率越接近零,情况就越糟糕。

每个月,我会逐一更新每个系统表的表现数据,这会自动更新主表。

月度总结表揭示了我所有策略的当前表现。它从各个策略表中获取数据。我为每个我当前交易或孵化的策略都有一页电子表格。图 23.3 显示了各个策略的总结表。它相当简单,但效果显著。我可以快速查看某个策略的表现,与我的期望相比(当然,这些期望是基于历史表现的)。当你需要跟踪 30 到 50 个策略时,这样的快速总结确实非常宝贵。

images

图 23.3 单个系统月度图表

对于我交易的许多策略,这就是我所需的所有信息——对表现的快速查看。如果有什么引起了我的注意,我总是可以进一步深入。

每月,我唯一需要更新的数字是在“实际”列中。这表示该策略在特定月份的实际利润或损失。可以根据交易报表进行调整后获得,或从策略表现报告中获取。我通常选择后者。预期的数字可以通过前期历史测试获得。

最大回撤来自策略报告。请注意,这是一个日内值,而电子表格计算的回撤是按月进行的。这显然不是完全正确的,因为理想情况下,你希望比较相同时间段内的回撤。但就我而言,这已经足够了。

单个每月表现图表的一个重要用途是识别表现过于优秀的策略。过于优秀?是的,表现过于优秀可能是坏事。

示例见图 23.4。我开始孵化这个策略有一段时间了,它开始起飞。

images

图 23.4 卓越的孵化表现

它“太好以至于不真实”——远高于历史标准。因此,我决定继续孵化它。接下来的几个月见于图 23.5。

images

图 23.5 大多数策略最终会回归均值

现在这个策略与历史标准一致,但每月表现的标准差是个致命因素(看看下跌月份的表现)。我进一步调查发现系统并没有正常运行。因此,我决定继续孵化。图 23.6 显示了发生的情况。

images

图 23.6 孵化时间更长

这是一个好的例子,说明(1)表现过于优秀是坏事,(2)结果的标准差(通过视觉检查发现的高变异性)是事情不太正常的早期警告信号,以及(3)每月表现报告以易于消化的格式显示所有这些信息。作为尾声:我仍在孵化这个特定策略,但尚未用真钱进行交易。

到目前为止,我讨论了一些跟踪策略表现的不同方法。这些工具对于评估系统的长期表现非常出色——在一段显著的时间内(几个月到几年),策略是否按预期表现?虽然这种“从 35000 英尺的视角”是有用的,但你还需要在每周或每日层面上进行测量。这有助于回答这个问题:我的新策略是否达到了预期?我使用几种不同的方法来审查短期表现。有简单的方法,也有复杂的方法。首先,我将看看简单的方法。

你所需的数据仅是平均交易或平均每日结果。如果你有这个值的标准差,那么你可以做更多。

你只需绘制结果,并使用公式“n * avg”,其中n是交易数量/天,“avg”是平均值。你会得到一个类似于图 23.7 所示的图表。

images

图 23.7 每日表现回顾

如果你高于平均线,你的策略表现比你想的要好。如果你低于平均线,你的策略就更糟糕。

这张图随着时间的推移变得非常有用。在超过 30 个周期中,你会期待策略接近平均线。这就是我的使用方式。然后,只需一瞥,我就能了解策略的一般状态。这张图与之前展示的每月跟踪图非常相似。它不错,但在活跃策略的早期并没有传达很多信息。为了获得更多见解,添加两条用于 +/- 标准差曲线的线:

上曲线:n * avg + sqrt(n) * (std dev) * X

平均曲线:n * avg

下曲线:n * avg - sqrt(n) * (std dev) * X

  • 其中

    • n = 交易数量

    • avg = 每笔交易的平均利润

    • std dev = 平均交易的标准差

    • X = 标准差乘数

这告诉你,大约 68%(X = 1)或 95%(X = 2)的时间里,你的权益曲线应该在上下带之间。大多数表现良好的策略将其权益曲线保持在标准差带内。如果权益曲线超出这些带,可能你的策略存在问题。

图 23.8 显示了一个示例策略,其中 X = 2 个带。这里最有趣的一点是底部曲线,即 -2 标准差线。看看它是如何开始为负并保持为负的。想象一下!一个盈利(正期望)系统仍然可能在相当长一段时间内出现负结果。纯随机机会(交易结果的顺序)可能导致盈利系统看起来像一个亏损系统。

images

图 23.8 日常绩效审查与绩效带

当然,随着时间的推移,正的期望开始占主导地位,下曲线最终会变为正值。这对“微调”自己方法的交易者有巨大的影响,如果在五笔交易后没有显示盈利,他可能刚刚改变了一个盈利系统!这条下曲线真正表明,即使是盈利系统也需要时间才能显示出利润。

这里有一个很好的引用,解释得比我更清楚。它出自乔·佩塔的书《交易基础》(企鹅出版社,2013 年):

好吧,如果你有机会投资于一个期望值为正的项目,比如拥有一个轮盘赌,你会选择拥有它一个小时还是九个半小时?在一个小时内可能发生有趣的事情;即使有庄家优势,也不能保证盈利。但在九个半小时内,游戏中固有的自然波动会平滑化,亏损的机会会非常小,随着时间的推移接近零。

精明的读者会注意到,图 23.8 中的图表使用了标准差,因此假设交易结果呈正态分布。实际上,大多数交易系统并不呈现正态分布。相反,分布可能在负值区域出现峰值,停损点可能位于此,而在利润方面则会有一个延长的尾部,或者在正值区域出现峰值,对应于利润目标。图 23.9 显示了一个真实交易系统的直方图与正态分布版本的对比。根据实际交易的具体情况,假设正态分布可能不是一个好主意。

images

图 23.9 典型真实交易系统的直方图

为了缓解这个问题,我们可以简单地从多次运行中获取蒙特卡洛结果,并基于这些结果使用百分位数。这将提供交易系统预期边界的更准确表示。

在将这种方法应用于实际交易数据之前,一个简单的例子可以帮助解释这种方法。假设我们有一个交易系统,每天的平均交易额为$100,标准差为正负$50。通过两个标准差的带,我们预计大约 95%的值会落在上下曲线之间,或者在上端为 97.7 百分位数,在下端为 2.3 百分位数。如果我们对每笔交易逐日进行蒙特卡洛分析,那么在每个交易日,我们只需选择 2.3%和 97.7%的值。由于这些值使用了实际数据,而不是假设的正态分布,它们应该更加准确并且更能代表实际的交易系统。缺点是曲线不会平滑,并且如果重新运行模拟,曲线可能会发生变化。这就是使用蒙特卡洛分析的代价。

如果我们对欧元交易系统进行逐日的蒙特卡洛分析,曲线之间的比较如何?标准差与蒙特卡洛线之间有良好的但不是完美的匹配。对于跟踪目的来说,任一方法都可能是可以接受的。我个人更喜欢蒙特卡洛版本,因为它不对基础数据做出任何假设。

images 如何使用此图表

日常跟踪图可以帮助你决定是否停止交易某个系统。例如,如果你的策略的实时表现低于下方 10%的线,这可能意味着你的系统不再有效。毕竟,90%的概率表明你的策略应该表现得更好。一个真实系统的例子应该能清楚地说明这一点。

图 23.10 显示了我用自己资金进行交易的一个真实系统的样本案例。

曲线 1: 140 天后的系统表现。几乎是正的,并且接近-1 Sigma 线。这意味着,在那个时刻,基于历史回测交易随机生成的股权曲线中,只有 16%的表现会比这个更差。

images

图 23.10 140 天每日表现

我相信大多数人到此时都会停止交易。但我没有,因为我知道即使在糟糕的表现下,这个系统也有可能并没有根本性的问题。

曲线 2: 接下来 200 多天的曲线(图 23.11)。我保持系统运行,现在它的表现更接近预期值。

images

图 23.11 200 天每日表现

正如我之前所解释的,我使用蒙特卡洛模拟来确定策略是否符合预期。这基本上与使用均值和标准差得到的结果相同,只是蒙特卡洛模拟可以考虑“边界条件”效应(比如在达到一定百分比的回撤后退出,或在账户亏损时退出)。

images 追踪预期与实际表现

在本章中我展示的所有例子中,我使用的是由回测软件生成的表现数据,在我的案例中是 TradeStation。这些数据内置了一些假设:

  • 每笔交易的滑点金额。

  • 每笔交易的佣金金额。

  • 限价单的成交逻辑。

  • “完美”交易与现实世界交易的对比。

根据你的交易系统和你在回测软件中输入的数值,你可能对系统在现实世界中的表现有一个不切实际的看法。我相信你一定有过这种经历——你看到一个看起来非常不错的股权曲线,却在后来发现创作者没有在表现数据中包括佣金或滑点。或者你发现了一个针对迷你标准普尔的无敌剥头皮系统,但在进一步审查后发现,你的回测引擎假设限价单在价格刚触及时就成交,而不是在限价单价格被突破时(这是一个非常常见的错误,尤其是在许多所谓的交易模拟器中)。最后,你还会遭遇互联网中断、数据延迟以及各种其他小故障。关键是,你期待的表现并不是你所能获得的表现。

如果你将交易视为一项业务,那么追踪实际表现并与预测表现进行比较是至关重要的。毕竟,当你的实际表现低于预期表现时,难道这不就像是什么东西或某个人在偷走你的利益吗?我确实有这种感觉——我完全期待能达到预测的表现或更好,当我没有做到时,我会寻找并纠正原因。

我在每日跟踪图上记录我的实际表现。我还保持一个实际与预测表现的对照表。大多数时候,实际表现略好于预测表现。这是件非常好的事情,因为它表明我对佣金、滑点等的假设有点保守。我宁愿在估算上保持保守,实际表现让我感到惊喜,而不是低估滑点后感到失望。

第二十四章

实时

当我开始一个新策略时,我喜欢持续审查其表现,以确保一切大致如预期进行。对于我在 2013 年 8 月底开始实时交易的欧元日夜策略,以下是我在前四个月每三到四周的实时更新,以及讨论一些过程中出现的有趣事件。

images 四周回顾—2013 年 9 月 13 日,结束日期

现在已完成使用真实资金交易欧元日夜系统的第四周。在前几个月的实时交易中,我每四周左右会审查一次系统的当前表现,如图 24.1 所示,并回答一些标准问题。如果系统的表现变得不稳定,这些信息可能会很有用——也许我之前可以看到什么,或者我根本错过了什么。

  • 总结: 好吧,经过四周的实时交易,我的情况与起初相同——持平。

  • 我对这个结果感到惊讶吗? 绝对不。它完全在预期之内。

  • 到目前为止,我对结果感到失望吗? 是的。每当我开始一个新策略时,我希望一开始就能盈利。

  • 结果与预期一致吗? 是的。目前的利润低于我期望的平均水平,但高于下方 10%的线。因此,虽然当前表现不佳,但我没有理由感到担忧。此外,我经历了两个盈利周和两个亏损周。随着时间推移,我预计约 60%的周会盈利,因此表现正如我所预期。

  • 实际成交和交易与 TradeStation 策略报告可比吗? 是的,实际上,在大多数情况下,我的成交情况比我预期的要好。滑点通常少于我预期。

  • 我有理由停止交易这个系统吗? 没有。

  • 我有理由改变我的仓位规划吗,即减少或增加我的风险? 没有。

images

图 24.1 每日表现,经过四周的实时交易

images 第七周后的更新

在实时交易这个系统的七周里,本周情况变得糟糕,出现了几天大幅亏损。累计权益徘徊在 10%的水平,这通常是一个很好的警告信号,表明系统的表现与历史测试不同。如果情况不同,我可能会考虑停止交易这个系统。阻碍“现在退出”想法的因素有:

  1. 只有 18 天的实时交易数据——在我看来,这太短了,无法做出退出的决定。

  2. 最重要的是,当我制定停止实时交易的标准时,并没有考虑相对于每日表现的业绩(有时我会在“何时退出”的分析中考虑这个因素)。不过对于这个策略,我使用最大回撤作为我的停止标准。

我会继续交易,意识到情况需要改善。

在七周的实时交易之后,系统的表现是否如设计所预期?首先,让我们看看它进行的交易数量。与前进历史相比,交易数量的急剧增加或减少将表明市场行为与历史市场不同,导致进行的交易数量比正常情况多得多或少得多。在七周后,系统交易了 18 天,占可能交易天数的 53%。历史上,它每年大约交易 151 天,或占 60%的天数。因此,系统的交易数量低于平均水平。但有些年份它交易的天数少至 130 天(51%),多达 175 天(70%)。基于这些情况,我得出结论,交易数量大体符合预期,尽管处于低端。根据经验,我感觉波动性比往常低。有几天仅仅错过了几个点就未能入场(例如,9 月 18 日的美联储大幅波动就是一个例子)。如果在公告前的几个小时中波动性稍微大一点,系统就会抓住一个大赢家。

其次,我们来看一下平均表现与实际表现。该系统的历史平均表现是在 18 个交易日后获得$1,441 的利润。然而,实际表现却是-$746。这是一个巨大的差异,显然得出的结论是系统的表现不如预期。但这里就变得棘手了。拿一枚硬币翻转 100 次。如果你得到了 60 次正面,你是否会得出这枚硬币“坏了”,也就是说,有偏见的结论?如果你得到了 70 次、80 次或 90 次呢?即使你连续翻转 100 次正面,你能绝对得出这枚硬币有偏见的结论吗?不!有一种可能性,尽管非常非常小,公平的硬币也可能连续翻转 100 次正面。

对于交易系统来说也是一样。你可以问:“它坏了吗?”但答案总会有一定程度的不确定性。这种不确定性有时会对你的结论和决策产生重大影响。有些人把统计数据视为真理,但我会分享一个我学到的小秘密。在我之前的职业生涯中,我有一个统计师为我工作。我给他分配了一个需要大量数据分析并得出某种结论的项目。在他审查完项目细节后,在他甚至开始工作之前,他问我:“你希望得出什么结论?我可以让数据支持你的观点,无论是什么。”我感到震惊,但我从未忘记这个教训——统计数据可以很容易地被操纵,所以在基于它们做出任何结论时要小心。

现在,实际的系统表现处于预期的 10 百分位。50 百分位正好是平均水平,因此 10 百分位的表现相当糟糕。但它仍然在可能结果的范围内。如果低于 0 百分位——假设在前 18 天内系统亏损了$8,000——那么显然系统表现不会如预期那样。那将是一个简单的决定。正是在存在不确定性时,事情才变得棘手。

有一些统计测试可以用来显示当前的交易是否可能属于历史交易的分布,但即使这样的高级分析也不是绝对的。总有一个灰色区域。那么我该如何在这个灰色区域中导航呢?首先,我试图确定导致我停止交易某个系统的参数。我当然可以使用百分位数的方法,并制定一个退出规则,规定“如果在 X 天后,表现低于 Y 百分位数,我将停止交易。”X 和 Y 将根据个人偏好由我自行决定。只要我遵循我最初制定的规则,我就会很好。对我而言,对这个特定系统而言,我之前决定只有在出现$5,000 的回撤时才会退出。因此,我并没有使用跟踪图表中的数据来决定何时退出。不过,有时我确实会使用它。

总结一下:

  • 系统表现是否如预期? 不,甚至远未达到预期。表现比预期糟糕得多。

  • 系统“坏了吗?” 也许是,也许不是。这取决于你如何定义“坏”。无法明确说它是坏的,或不是坏的。

  • 我会退出吗? 不会。我之前确立的退出点要求单合约回撤达到$5,000。这是一个经过深思熟虑的金额,我不能随意抛弃。我会坚持计划。不过,我意识到,坚持计划可能就像船长随船沉没一样。

images 第 8 周回顾

现在,欧元昼夜交易系统的第 8 周已完成。

总结: 首先,让我们看看全局。我喜欢定期这样做,因为一眼就能看出事情是否按计划进行。从图 24.2 来看,有几点很明显:

  1. 在整个系统历史(步行验证、孵化、实盘)过程中,系统性能变化不大。我可以从步行验证开始画一条线到孵化开始,然后再从孵化开始画一条线到现在,这两条线的斜率大致相同。这让我对系统的表现有了一些保证,符合第 2 点的要求。

  2. 在图 24.3 中,可以明显看到实时交易(带三角形的深灰色线)并没有达到预期。这过去两个月的表现下滑,虽然没有崩溃,但确实令人失望。

images

图 24.2 八周后的整体股权曲线

images

图 24.3 八周实盘交易后的每日表现

在八周的实盘交易后,我的损失大约为 5%。

  • 我对这个结果感到惊讶吗? 绝对不。这完全在预期之内。

  • 我对目前的结果感到失望吗? 是的。八周后,我希望能盈利。这八周的表现远远低于长期平均水平,所以非常失望。

  • 结果是否符合预期? 是的。目前的利润低于我预期的平均水平,接近下方 10%的线。因此目前表现不佳,如果股权跌破 10%线,我会感到担忧。此外,我有四个盈利周和四个亏损周。随着时间推移,我预计大约 60%的周会盈利,因此在这方面表现稍显落后。而且,有一周的表现非常糟糕。

  • 填充和交易的实时数据与 TradeStation 策略报告可比吗? 是的,实际上在大多数情况下,我的填充效果比我预期的要好。滑点通常低于我所期待的。

  • 我是否看到停止交易这个系统的理由? 不。

  • 我是否看到改变我的仓位规划的理由,也就是减少或增加风险? 不。

八周后,我将按照计划继续交易,但前方乌云密布。我需要一些阳光!

images 第 9 周——自动交易问题

你可能听过“自动交易并不意味着无人值守交易”这句话。你也可能阅读过经纪公司在允许你开启自动化之前提供的所有免责声明。例如,在 TradeStation 开户时,你必须签署大量的免责声明,如果你想自动化某个策略,还需要点击并接受另外两个免责声明。第一个免责声明有 397 个字,第二个则有惊人的 593 个字。为了自动化你的交易,确实需要花费很多时间来阅读这些法律条款。

但所有这些警告都是有原因的。忽略它们的风险自负其责。这就是我在实际交易第 9 周所经历的情况。让我来解释一下。

我的欧元日间和夜间策略是通过限价单进场的,这些单子应该只在当前蜡烛期间有效。在蜡烛关闭后,任何未成交的订单会被软件取消。根据策略逻辑,可能会为当前蜡烛下另一个限价单。

所以,在第 9 周的星期一晚上,我的欧元夜间策略下了一笔远低于市场的限价单。这笔订单在当根蜡烛期间没有成交,因此应该被取消。但出于某种原因,它没有被取消。这是我第一次见到这种情况。根据我的经验,软件自动取消订单的成功率应该超过 99%。这非常出色,但错误是可能发生的。以航空业为例,每天大约有 28,000 个商业航班,即便 99.99%的航班成功起飞和降落,每天也会有两到三架飞机坠毁这就是声称 99%加的正常运行时间、准确性等的无意义之处。任何低于 100%的完美都存在让你损失金钱的风险。

该订单在交易所挂单直到周二早上 5 点才被成交。我是在周三早上发现这个错误的。当然,根据墨菲定律,我不是在这个头寸盈利时发现它,而是在它变为亏损后才注意到。更糟糕的是,在我调查这个问题时——在我退出头寸之前——我看到它又下跌了大约 125 美元。一旦我确认这个头寸是错误的,我以约 550 美元的损失退出了。

该责怪谁呢?好吧,软件没有履行其职责,因为它应该取消订单。但最终,我不能责怪任何人和任何事物(软件、互联网连接等),只能怪自己。我再重复一遍:我该负责!我是监护人,如果事情出错,偶尔会发生,那就得由我来意识到并修复。我对这次失误承担全部责任,并采取了一些步骤确保不再发生:

  1. 每天检查报表。如果我在那天早上第一时间检查,可能会以 300 美元的利润退出,而不是 550 美元的损失。

  2. 每隔几个小时检查平台上的未取消订单。

  3. 改进仓位检查。我通常每隔几个小时检查一次我的仓位,但这一次却滑过了我。

  4. 确保已填订单在图表上显示。出于某种原因,这个填充没有显示——它们通常会出现。

这不是致命的损失,但足以让我对这种情况感到相当沮丧!就这个账户而言,损失的百分比为 7%,所以这真的很糟糕。最终,我希望这个策略能达到 10 个合约,到那时将会是一笔可观的资金。

我在入场约 30 小时后注意到了这个糟糕的交易。然后我几乎在最坏的时机退出,损失了$550。现在,不到一个小时后,我本可以以不到$100 的损失退出。这只是我一个人的感觉,还是这种事情也会发生在你身上?如果我不太了解情况,我会发誓有人在操控价格,盯着我的仓位,并故意做一些事情来最大化我的损失!我完全可以理解人们为什么会有这样的感觉——有时,市场确实让我感觉是针对我的!

我对这种偶尔的偏执型感觉思考了很多。我知道其中一些发生的原因。我往往会忽视——并不真正注意或沉溺于——每一个发生在我身上的好事(对我有利的错误、入场后立刻的优秀新闻报道等)。赚钱的异常情况只是股权曲线中的一次闪烁。它们很不错,但我并不太记得它们。但我倾向于记住因错误而导致的损失,并将其保存在我的记忆库中。其中一些“亏损教训”可能值得记住——今天的自动化问题就是一个很好的例子——但大多数应该像赚钱错误一样容易被遗忘。对我来说,这种情况通常不会发生。

去年我实际上研究过这种心理现象。我把所有的盈利错误和亏损错误加起来。从货币的角度来看,净影响几乎为零。但从心理的角度来看,这绝对不是盈亏平衡。人们会认为这种感觉(“市场是针对我的”)在 20 多年交易后会消失。但并没有,我怀疑它永远不会消失!

到本周结束时,本应是一个不错的盈利周,却因前面提到的入场“故障”变成了亏损周,这让我损失了$550。我已采取一些立即措施以防止再次发生,我认为我暂时是安全的。我的实际表现现在落后于完美策略的表现,而上周的问题正是导致这种情况的原因。

问题归根结底在于:如果我依赖计算机来下单、取消和替换订单,除非有人始终监控,否则总会有一些意外情况发生。问题是,我的有限资源(毕竟只有我一个人)要投入多少精力来确保自动化不会出错?以往的努力并没有奏效——因为我刚损失了 550 美元——那么我什么时候才能确信这些问题不会再发生呢?而且,通常不是你已知的问题,而是你未知的问题。这一情况就是其中之一。经过多年的数千次自动交易,这个特定问题以前从未出现过!

先说到这里。表现仍然滞后,欧元日间策略在过去两周没有进行交易(我想我可以归咎于低波动性)。不管怎样,我会“继续交易!”

images 第 9 周—限价订单成交(2013 年 10 月 28 日)

一些不道德的系统供应商的把戏是认为所有限价订单在价格触及时就会立即成交。你可以通过查看他们交易的价格图表来识别这一点。如果方法显示交易在某根 K 线的最低点被买入,和/或在最高点被卖出,你可以肯定这个游戏正在进行中。

当然,现实是很难在最低点买入和在最高点卖出。我的经验是,具体取决于市场和下单时间,你可能有 5-20%的机会做到这一点。其余的 80-95%的时间,价格必须穿过你的价格才能以限价成交。

这可能是回测中的一个问题。如果你的回测引擎假设限价订单在触及时就会成交,结果将过于乐观。如果回测引擎假设必须穿透价格才能成交,那么回测结果会显得过于悲观。我总是选择悲观的方式。我的实际结果只能比回测更好。

在第 9 周的交易中,欧元日间策略在限价订单上买入了 K 线的确切最低点。当然,我被成交的部分原因是我只交易了 1 手;如果我交易了 10 手,我可能只会收到部分成交。有趣的是,当我刷新图表时,根据策略引擎,交易消失了。由于价格没有低于我的限价,策略引擎假设没有交易。但我的真实账户显示有交易,因为我确实被成交了。由于这笔交易是获利的,这次真是个意外的好消息!所以与回测引擎相比,这大约是一笔 400 美元的盈利。这弥补了上周让我损失 500 美元的订单问题。

images 第 12 周回顾

总结: 首先,让我们像往常一样看大局。从图 24.4 来看,有几点是明确的:

  1. 在整个系统历史(走向前、孵化、实盘)中,系统表现变化不大。正如第 8 周之后,我可以从走向前的开始绘制一条线到孵化的开始,然后再从孵化的开始绘制到现在,这两条线的斜率大致相同——从孵化开始到现在的斜率稍微平缓一些。这让我对系统在长期基础上的表现感到一些安慰。

  2. 很明显,实盘交易一直落后于长期表现。过去三个月的表现下降,尽管没有崩溃,但确实令人失望。

images

图 24.4 12 周后的大局股权曲线

在这个系统实盘交易 12 周后,我的策略计算表现比开始时下降了约 10%,实际表现下降了约 4.5%(图 24.5)。

  • 我对这个结果感到惊讶吗? 是的。我原本期望更好,确实希望现在至少接近盈亏平衡——最糟糕的情况也是如此。

  • 我对目前的结果感到失望吗? 非常失望。这过去 12 周的表现远低于长期平均水平,确实令人失望。

  • 结果是否符合预期? 勉强算是。结果接近最低的 10%线,这意味着实时系统与走向前和孵化的系统几乎不同。还不完全不同,但越来越接近。

  • 实盘交易的成交和交易是否与 TradeStation 策略报告可比? 不,但这是一件好事!我实盘的表现比策略预测好约 550 美元,因为(1)滑点少于预期,(2) 有几笔交易在价格刚触及但未超过限价时成交。

  • 我是否看到停止交易该系统的理由? 没有。

  • 我是否看到改变我的仓位计划的理由,也就是说,减少或增加风险? 没有。

images

图 24.5 12 周实盘交易后的每日表现

经过 12 周,我将继续按计划交易,但该系统正在徘徊。需要几笔大赢家,这正是系统的基础。

images 第 13 周—时间限制回顾

随着我的策略在盈亏平衡附近徘徊,我开始想:我愿意冒多长时间的资本风险而没有任何回报?对我来说,答案涉及“下一个最佳选择”。

每六个月左右,我会查看我正在交易的每个系统,以及在待命状态的系统(准备进行实盘交易,但目前未进行)。如果我发现一个比我当前交易的系统更好的系统,并且我没有足够的资金同时交易两个(或者因为相关性问题我不想同时交易两个),我会将其替换。因此,即使欧元交易策略表现尚可(盈利而非目前的接近盈亏平衡状态),我仍可能用“下一个最佳替代品”替换它。

我每年仅进行两次此类分析,部分原因是它复杂(涉及复杂的相关性研究等),但主要是出于对新系统进行实盘交易给予一些时间以证明自己是公平的。大多数人没有耐心去做这件事,他们不断在系统之间跳跃,根本不给任何系统一个公平的机会。这就像在棒球比赛中,投手一旦被击出一支安打就立即被换下场。正如我之前所展示的,即使是盈利的系统,也可能在相当长的一段时间内表现不佳,直到长期的正期望真正显现出来。

当然,即使在这每年两次的分析中,我的原始退出点仍然有效。如果我触及那个点,我就会退出,无论下一个最佳替代品是什么(可能是现金)。

images 第 15 周回顾

总结: 在 15 周之后,欧元日夜交易策略终于表现得更好,如图 24.6 和 24.7 所示。通过大局来看,过去几周的表现使得实盘结果越来越接近历史回测。系统仍需改善表现,但情况显然正在好转。在进行 15 周的实盘交易后,我的策略计算表现上涨了约 1%,实际表现上涨了约 9.0%。

  • 我对这个结果感到惊讶吗? 显然,我希望能更好,但我很感激系统在此时展现了盈利。

  • 结果是否符合预期? 结果绝对更符合预期,尤其是在过去几周。但整体策略仍然表现不佳。如前所述,这种方法依赖于每年少数几笔大额盈利交易,而截至目前,在实盘交易中尚未出现任何。

  • 实盘成交和交易是否可与 TradeStation 策略报告相比? 不可以,但这仍然很好!我在实盘中的表现比策略预测好约$700,因为(1)滑点比预期少,(2) 发生了多笔交易,在实际中成交但在回测引擎中未成交(限价穿透问题)。

  • 我是否有理由停止交易这个系统? 没有。

  • 我是否有理由改变我的仓位配置计划,即减少或增加风险? 没有。

images

图 24.6 12 周后的整体股权曲线

images

图 24.7 15 周实盘交易后的每日表现

在 15 周后,我将继续按照计划进行交易,但与最初的预期相比,这个系统仍然表现不佳。这是需要大额但不频繁获胜交易的交易方法的一个缺点。这个系统可能需要很长时间才能真正展现其能力。

images 未来评审

这个交易日记将无限期持续,或者直到我停止昼夜交易欧元系统,届时我会解释停止实盘交易的原因。更新可以在网站上找到(www.wiley.com/go/algotradingsystems)。

第七部分

警示故事

第二十五章

自大妄想

赢得期货交易的世界杯冠军使我在小小的交易圈子中成为了一位(非常)小名人,这真不错。因为我的成功,很多挣扎中的交易者和优秀的交易者都与我联系,建立了一些很好的关系和交易讨论。几年前在芝加哥,我可能从未有过比和四位期货交易世界杯冠军一起度过的一天更愉快的交易对话。要是我能为那些谈话和讨论录音就好了——简直是黄金!连续三年成为顶级比赛表现者为我打开了许多扇门。总的来说,参加交易比赛的经历非常有趣。

当然,所有这些名声也有其负面影响。交易似乎吸引了一些我所称之为“缺陷”人格的人:这些人有一些性格缺陷,是他们看不见的(但其他人都能看到),这可能影响他们的交易。信不信由你,看到其他交易者的缺陷可以大大帮助提升你的交易。因此,我想介绍一些我在交易中遇到的最离谱的角色,其中许多人因为我的名声而与我相识。这些人中我喜欢并且同情的一些,所以我改变了名字和某些事实,以免伤害到他们脆弱的心理。或者,正如电影免责声明所说,“名字已被更改以保护无辜者。任何与活人或死者的相似之处纯属巧合。”

images 唐模拟

我认识唐已经有好几年了,他总是和我谈论他的纸钱模拟账户成功。他在模拟模式下的自由裁量交易表现实际上相当出色;他每天交易两个迷你标准普尔合约,可能能赚到约 1500 美元。此外,他始终保持盈利,十天里有九天都能在模拟中赚钱。他会整天整晚炫耀他的交易能力,除非我提到真实资金交易。然后,他就会沉默,经过几次推动,唐会承认他最近一次真实资金交易的尝试以灾难告终。我算过这些年来至少有五次这样的灾难,而每一次都伴随着更好的模拟账户成功。唐认为自己是一位出色的交易者,只是在真实资金交易中遭遇了难以言说的霉运。

唐的教训: 模拟交易与真实资金交易并不相同。在模拟交易中取得胜利,采用自由裁量的方法,与真实资金交易几乎没有相关性。不要假设模拟成功会导致真实资金的成功,因为这可能不会发生。

images 古斯大师

我从未见过古斯,也从未和他交谈过,更没有给他发过电子邮件。但我从联系我的挣扎中的交易者那里了解了很多关于他的事。据这些人说,他是个大师中的大师。古斯以极其精妙的方式把握市场。他使用指标、趋势线、斐波那契数字和任何其他技术工具,勾画出几乎神秘的市场动作故事。他轻松解释了价格为何会这样波动(注意这里的过去时)。当我第一次听说古斯时,我想:“他一定是个富有的交易者,因为每个人都说他在分析市场方面出类拔萃。”好吧,事实并非如此。实际上,古斯现在根本没有进行交易。他声称他的最后一个账户已经归零。经纪人的渎职,他这样说,但这并不是他第一次没有资金进行交易。要么他遇到了很多不靠谱的经纪人,要么这个故事更复杂。无论如何,现在他在互联网上出售他的建议。当我暗示古斯可能并不是一个伟大的交易者时,他的学生们对我非常对立,深受他们的老师影响。古斯不仅仅是捞到了鱼,他还把这些鱼冷藏在冰箱里、船上,切片后准备扔上烤架。

古斯的教训: 小心那些不进行交易的 guru。大多数人不交易的原因是他们无法做到。

images 预测者保罗

如果我为这一章中的人颁发“离谱”奖,保罗将获得第一名。在过去六年里,我可能收到了来自保罗的 1000 封电子邮件,甚至一天收到 20 封。保罗坚信他拥有某种与生俱来的能力,能够预测市场的方向——任何市场。他毫不犹豫地一次又一次地告诉我他的伟大。他的超能力在许多电子邮件中详细说明,除了试图与我合作、借钱或让我要我为他的交易“建议”付款。保罗对高盛没有竭尽全力聘用他感到震惊(尽管他从未申请过那里的工作,也没有实际的资金交易经验),当他因自夸的帖子被流行的交易论坛禁止时,他感到非常沮丧。对于那些没有禁止他的论坛,保罗在意识到成员们显然太愚蠢而无法欣赏他的所谓伟大时,自愿离开。就我所知,他可能曾经交易过一个 5000 美元的账户,但没有持续太久。我已经有一段时间没有听到他的消息,但我猜他正在成为一个江湖骗子。

保罗的教训: 没有人能够预测市场。要警惕那些声称有这种能力的人。

images 复杂王卡尔

如果我问你二加二等于多少,你会快速而正确地回答四。但是如果你问“复杂王”卡尔同样的问题,他会给出这样的回答:“二是所有指数推导的基础,当人们在欧几里得数空间中将其自身放置——当然要忽略无理数效应——参数空间将增加相同的量。”哈?如果你像我一样,这家伙根本没有意义。然而,惊人的是,这样的回答让卡尔在一两个流行的互联网交易论坛上拥有了类似宗教的追随者。他出现在各种交易主题的讨论中,喷出他那令人费解的废话,然后留下他的谄媚者去解读和辩护他的“答案”。我从来无法弄清这个家伙是否真的交易,但如果他真的交易,我敢肯定是不盈利的——而且复杂。

卡尔的教训: KISS——保持简单,愚蠢。简单的概念有时在交易中效果最好。仅仅因为某人说话模糊,并不意味着他或她知道的比你多。实际上,很多时候,这意味着他们知道的比你少!

images 佩特

我总是喜欢与系统供应商交谈,看看他们有什么和知道些什么。偶尔,我会发现他们身后有一些真正的价值。然而,通常情况下,这些人背后并没有什么,只是烟雾和镜子,以及双重话语。佩特就是这样一个人。他在出售一个系统,所以我询问了细节。他的系统售价为$2,500,或是前期支付$500 加上每月$100。以这样的高价,我以为这一定是“圣杯”级别的好。因此,我要求查看性能报告。我通常能在一公里外就闻到假报告的气息,这也是我所怀疑的:每年$100,000 的利润,没有回撤,90%的成功交易——换句话说,就是典型的荒谬结果。他寄给我的却是一个震惊的结果:一个五天的回测,显示出$290 的净利润!这似乎很疯狂,所以我要求更长的回测。然后佩特回复说,如果我想问更多问题,他的收费是每半小时$100,如果我通过 PayPal 付款,他会很高兴地回答我的问题。谁会这样想呢?

佩特的教训: 夸大的自我价值感几乎总是在交易中预示着厄运。我认识的最优秀的交易者往往是最谦逊的。

images 法兰克·五百

几年前,弗兰克给我发邮件,解释说他刚开始接触交易。他想要一个有效的外汇机器人,手里只有$500 可以交易。“你有什么推荐?”他问。我像对所有手头有限的新交易者那样回答:“你最好的选择是尽可能多地学习,想办法筹集到$10,000 或更多开始交易。少于这个数,你很可能会全部亏光。慢慢来,市场会一直在那儿。”如果我自己说,这真是明智的建议。我希望当初有人给我这样的建议。然而,弗兰克却并不这样认为。他开始对我破口大骂,骂我各种恶名,声称我在试图阻止他赚钱,并说他将通过即将进行的大规模交易让我破产。他可能是我见过的最愤怒的准交易者。在与我断绝所有联系后,他最终还是从某个网站上买了一个机器人。几年前我才知道这一点,那时他承认自己亏掉了$500 和更多的钱。

弗兰克的教训: 如果有人给你一般的交易建议(不是股票推荐),而且不涉及从他们那里购买东西,请听从他们的建议。他们是在试图帮助你。此外,不要仅用$500 开始交易。

images 自夸的比利

我该如何开始谈论自夸的比利?他可能有每一种可以想象的心理疾病。偏执狂?是的,他相信政府特工在不断跟踪他,试图窃取他的交易秘密。自恋狂?是的,他不断告诉我自己有多聪明,如何在高中因数学天赋获得奖学金,如何被他申请的两所大学同时录取,等等。成瘾人格?是的,他是个嗑大麻的狂热者,他的亲大麻视频在 YouTube 上受到了嗑药者的热烈欢迎,尽管潜在投资者并不买账。妄想症?是的,他告诉我不想参加真实资金的交易比赛,因为他的策略会在一年内将$15,000 变成超过十亿,所以“参加比赛有什么意义?”奇怪的是,一旦他治愈这些问题,他可能会成为一个不错的交易者。我想他宁愿活在幻想世界里。

比利的教训: 生活在现实中。你只是另一个在努力成功的交易者。接受真相,拥抱你的人生境遇,然后成功或许会降临到你身上。

images 复利的康妮

七八年前,我第一次在Collective2.com遇到了康妮,这里和其他交易网站一样,隐藏着一些妄想狂,夹杂在优秀交易者中。康妮的重点是复利。她不断谈论复利,以及她的交易系统中复利是多么出色。问题在于,她的知识深度仅限于复利。除了知道自己想以此为职业外,她对投资或交易一无所知。因此,康妮做了大多数不道德系统供应商会做的事情:她发布了显示由于复利而产生巨大增长的假设结果。她声称自己用自己的钱做了同样的事情。错了!不幸的是,当有人发现了针对她的 IRS 税务法庭案件时,她被揭露为诈骗者,法官裁定要抵扣交易业务费用,实际上你得进行一些交易(真是搞笑!)。

康妮的教训: 复利是件好事,但这并不是唯一的事情。在自己尝试之前,了解交易的所有方面。

images 伊恩与光明会

所谓的光明会(或其他类似的团体)正在针对伊恩,他经营着一个小型交易网站。显然,伊恩发现这些人操控了全球所有的交易,并且他知道他们的所有秘密。当然,他只需几百美元就会与你分享这些秘密。与其通过交易他所谓的秘密代码致富,伊恩更喜欢骚扰和被各种网络人士骚扰,在每个交易论坛上挑起争端,并被像 Facebook、Twitter 和 StockTwits 这样的大型网站封禁。我想象着伊恩坐在他那肮脏的小公寓里,戴着铝箔帽以阻挡光明会的无线信号。尽管我相信他在兜售垃圾,我真的很同情伊恩,因为我认为他确实精神失常,迫切需要专业帮助。

伊恩的教训: 远离那些想和你争吵的供应商。他们可能有很多问题,而且他们的产品可能毫无价值。

images 旋转者苏姬

我在 TradeStation 支持论坛上遇到了 Suki。他正在提供策略转换——他的伟大策略换取我的一种策略。不幸的是,我从未能给他一个走向前测试的策略(顺便说一句,实际上与真实交易相当有效)接近于他的。我感到沮丧——我怎么可能不能开发出像 Suki 那样好的策略?Suki 不断地嘲讽我和我的交易技能。他想知道:“凯文,你怎么能有如此糟糕的策略,而我,伟大的 Suki,却有如此出色的策略?也许你需要换个职业。”好吧,几个月过去了,然后 Suki 不小心透露,他的所有策略都是回测到现在的。没有走向前,没有样本外,没有真实的结果。自然,他是一个模拟百万富翁,甚至分享了证明他模拟器余额的截图。难怪我无法与他匹敌——对他来说,一切都是一场虚拟货币游戏。

Suki 的教训: 注意回测。除非你自己开发了它们或完全信任开发者,否则请假设回测是一堆。。。垃圾。要适当地对待它。

images 抄袭者保罗

一些心理不正的人实际上并不进行交易,只是提供建议。保罗就是这样的人。作为一家外汇交易网站的受人尊敬的记者,保罗吸引了大量的阅读和评论。他看起来非常博学,我相信他凭借交易建议赚了不少钱。唯一的问题是,他大部分的写作都是别人的。他抄袭了至少半打交易作者,包括我自己。这不是“哦,我忘了加引号”那种错误;这是纯粹地复制和粘贴他人的作品,假装是自己的。更糟糕的是,他告诉我这样是完全可以接受的,因为他窃取的大多数文章反正都是免费的。他心里有个大障碍,认为偷窃是错的。

保罗的教训: 在你迷恋一个交易专家之前,先确保他或她是真正的专家。诈骗艺术家有各种形状和大小。

images Slick Sam

Slick Sam 是每一个滑头系统供应商和交易室操作者的结合体。萨姆会以免费进入他的交易室或免费的网络研讨会来吸引你。然后,他会慢慢收紧绳索,让你购买昂贵的“教育”材料。你会听到他的交易,但你永远不会看到他进行任何实时交易。即使你在观看他的直播,他也会在上涨趋势中保持不动,然后突然宣布:“我刚刚以盈利退出了我的多头头寸。”或者他会声称不能向你展示他的交易,但你仍然应该相信他的惊人结果。偶尔,萨姆会搞砸,你会看到他的交易平台上显示“演示”。当然,任何揭露这一事实的人都会迅速被禁止进入房间。

山姆的教训: 假设你遇到的每个供应商都是因为需要钱而出售他的秘密,而不是因为他是个行善的慈善家,致力于帮助新手交易者。这并不意味着他不合法,但如果你意识到他的真实动机(将你的钱转移给他),你至少在进行任何交易时会保持警觉。在 20 年的交易中,我大概只购买过不到 10 个系统、课程、咨询等。我非常挑剔,从未被明显地欺诈过。对此我感到自豪。

images 幻觉结论

没有人是完美的,但即使是最轻微的人格问题也可能让你的交易成功止步于此。我能给出的最好建议是对着镜子看自己,并对自己的交易保持完全诚实。你很可能不是历史上最伟大的交易者,可能无法提前几天预测市场,也可能没有在交易中赚到数百万美元,更不会有特工试图窃取你的交易策略。如果你认为自己是无敌的,真实的交易会让你放弃这个想法。交易极其困难,你必须保持心理敏锐才能竞争。如果你不完美的人格阻碍了你,最好的办法是寻求专业帮助,或者干脆远离交易。

结论

我们现在已经走到了我交易旅程的尽头。经历了二十多年的历程,你们见证了一些极端的低谷、一些极端的高峰,以及在两者之间徘徊的很多时光。首先,我希望这本书能成为所有新交易者的警示。请从我的经验中学习:

  • 交易是困难的,极其困难。兼职交易者在家交易时,面临的是专业人士的竞争。这些专业人士真的很擅长夺取你的钱。

  • 外面没有“圣杯”——没有可以花$100、$1,000 甚至$10,000 买到的魔法交易策略。确实有一些不错的策略可供出售,但没有一个是完美的。

  • 在潜在的收益存在的地方,也存在潜在的风险。结果的收益曲线可能只显示了收益方面的内容,但请记住,风险始终存在——它可能只是隐藏起来而已。

  • 获取利润的最佳途径是找到适合你自己的交易策略,满足你所有目标和期望的策略。只需记住,不要期望这个过程会很简单。

在我真正理解如何交易之前,我学到了所有这些教训,以及更多。即使到今天,我仍然在挣扎。没有任何交易策略能够永恒,我发现自己不断地重新发明交易,并创建新策略,以试图保持领先。如果我放松一段时间,我不可避免地会发现我的表现下降。

本书的主要内容集中在开发交易策略上。虽然我当然重视交易心理学、头寸规模和资金管理的贡献,但我把它们视为点缀,而交易策略则是主菜。我之所以这样看待交易有两个原因:

  • 即使是世界上所有积极的交易心理学,如果你的策略是失败的,也不会让你盈利。积极的思维、详细的记录、呼吸练习来平静你的心灵,以及所有其他心理活动都是很好的,但仍然无法替代一个扎实的策略。许多人,以及许多交易心理教练,似乎认为拥有正确的心态可以确保盈利。这根本不是真的。

  • 如果你有一个成功的策略,合适的头寸规模和资金管理非常重要;但反过来,如果你有一个失败的策略,无论你采用什么头寸规模或资金管理方法,都不可能让你盈利。它可能会帮助你更慢地耗尽账户,但失败的策略就是失败的策略,无论你如何包装它。把交易看作赌场赌丨博——赌场赢,因为它有优势,赌徒输,因为他们没有优势。改变赌注大小并不会改变这个不可辩驳的事实:没有优势,最终你会输。

要获得长期成功,你真的需要找到一个成功的策略。这需要大量的“辛苦”工作——寻找想法、测试它们、完善它们,并希望最终能够交易它们。几年前,我记录了我的交易策略开发过程。我发现我必须测试大约 100 到 200 个交易想法,才能找到值得用自己的钱交易的东西。大多数人可能会在测试 100 个想法之前就放弃交易。其他人会说:“是的,凯文需要 100 个想法,但他很笨。我聪明得多,所以我只需要不到 10 个想法。”不幸的是,这些人通常会走捷径或作弊,以获得看似可接受的交易系统。从长远来看,走捷径的人通常会失败。

在本书的最后几章中,我将所有内容结合在一起,并带你走过两个欧元期货交易策略的开发过程。截至目前,我正在用自己的钱进行交易,但我密切关注它们的表现。从长期来看,它们希望能成功,随着成功,我会相应增加头寸。如果它们不成功,那么我最终会用其他策略替换掉它们。虽然我希望我创造的每个策略都能表现良好,但我也知道这并不总是如此。到目前为止,这两个欧元策略的表现确实印证了这一点。它们目前在盈利,但表现不佳,也许会继续如此,或者可能会回到它们的长期平均水平。人们永远无法预知,所以我通常会为最坏的情况做准备,同时期待最好的结果。很多时候,最终结果就在两者之间。

最后,我想留给你一个想法:如果你下定决心成为一名优秀的交易者,并付出适当的努力,你可以获得成功。我就是活生生的例证,尽管希望你的旅程不会像我一样漫长。但是,要想长期成功,计划好投入大量的时间、精力和金钱。交易就像生活中的其他美好事物;如果它好,就值得去努力。不要被那些提供捷径、简单解决方案、魔法公式或“圣杯”系统的人所诱惑。这些人只会让你偏离轨道,破坏你的努力。投入时间,遵循其他成功交易者使用的方法,你会过得好得多。我希望在 1980 年代末第一次从牛仔交易员那里了解到期货交易时,我能采取这样的做法。

祝你好运,交易愉快!

附录 A

猴子交易示例,TradeStation 简易语言代码

images 策略 1:基线策略(无随机性)


input: nContracts(1);
var:ssl1(1);
var:ssl(2000);
    if date >= 1070316 and date < 1080314 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1080314 and date < 1090311 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1090311 and date < 1100310 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1100310 and date < 1110309 then
begin
        ssl1 = 0.5 ;
    end ;

    if date >= 1110309 and date < 1120310 then
   begin
        ssl1 = 0.5 ;
    end ;
    if date >= 1120310 and date < 1130308 then
   begin
        ssl1 = 1.25 ;
    end ;
    if date >= 1130308 and date < 1140308 then
   begin
        ssl1 = .75 ;
    end ;

	 if date >= 1070316 then begin

if close<close[1] and close[1]<close[2] then begin
buy ncontracts Contracts next bar at market;
End;

if close>close[1] and close[1]>close[2] then begin
SellShort ncontracts Contracts next bar at market;
End;

SetStopContract;

setstoploss(minlist(ssl1*BigPointValue*avgtruerange(14),ssl));

end; 

images 策略 2:随机入场,基线出场策略


input:
iter(1),percentlong(.400),holdbars(2.5),exitclose(0),oddstradetoday(.47),begindate(1070319);
var:posstradetoday(0);

//entry is random

input: nContracts(1);
var:ssl1(1);
var:ssl(2000);
    if date >= 1070316 and date < 1080314 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1080314 and date < 1090311 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1090311 and date < 1100310 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1100310 and date < 1110309 then
    begin
        ssl1 = 0.5 ;
    end ;

    if date >= 1110309 and date < 1120310 then
    begin
        ssl1 = 0.5 ;
    end ;
    if date >= 1120310 and date < 1130308 then
   begin
        ssl1 = 1.25 ;
    end ;
    if date >= 1130308 and date < 1130501 then
   begin
        ssl1 = .75 ;
    end ;

 if date >= 1070316 then begin

if close<close[1] and close[1]<close[2] then begin
sell ncontracts Contracts next bar at market;
End;

if close>close[1] and close[1]>close[2] then begin
buytocover ncontracts Contracts next bar at market;
End;

SetStopContract;

setstoploss(minlist(ssl1*BigPointValue*avgtruerange(14),ssl));

end;

posstradetoday=random(1); //random number for today’s trade

If date>begindate then begin

If posstradetoday<=oddstradetoday then begin //trade will occur today

    //enter trade
    If random(1)<percentlong then buy this bar at close
    Else sellshort this bar at close;
  end;
end; 

images 策略 3:基线入场,随机出场策略


input:
iter(1),percentlong(.400),holdbars(2.5),exitclose(0),oddstradetoday(.47),begindate(1070319);
var:posstradetoday(0);

//exit is random

input: nContracts(1);
var:ssl1(1);
var:ssl(2000);
    if date >= 1070316 and date < 1080314 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1080314 and date < 1090311 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1090311 and date < 1100310 then
    begin
        ssl1 = 0.75 ;
    end ;
    if date >= 1100310 and date < 1110309 then
    begin
        ssl1 = 0.5 ;
    end ;

    if date >= 1110309 and date < 1120310 then
    begin
        ssl1 = 0.5 ;
    end ;
    if date >= 1120310 and date < 1130308 then
   begin
        ssl1 = 1.25 ;
    end ;
    if date >= 1130308 and date < 1140308 then
   begin
        ssl1 = .75 ;
    end ;

 if date >= 1070316 then begin

if close<close[1] and close[1]<close[2] and marketposition=0 then begin
buy ncontracts Contracts next bar at market;
End;

if close>close[1] and close[1]>close[2] and marketposition=0 then begin
SellShort ncontracts Contracts next bar at market;
End;

end;

posstradetoday=random(1); //random number for today’s trade

If barssinceentry>=random(2*holdbars) then begin
  Sell this bar at close;
  Buytocover this bar at close;
end;

 If exitclose=1 then setexitonclose; 

images 策略 4:随机入场,随机出场策略


input:
iter(1),percentlong(.400),holdbars(2.5),exitclose(0),oddstradetoday(.48),begindate(1070319);
var:posstradetoday(0);

posstradetoday=random(1); //random number for today’s trade

If date>begindate then begin

 If posstradetoday<=oddstradetoday then begin //trade will occur today
    //enter trade
    If random(1)<percentlong then buy this bar at close
     Else sellshort this bar at close;

  end;
end;

If barssinceentry>=random(2*holdbars) then begin
    Sell this bar at close;
    Buytocover this bar at close;
end;

    If exitclose=1 then setexitonclose; 

附录 B

欧洲夜间策略,TradeStation 易语言格式


vars: FirstTime (1800),
    LastTime (2359),
    ATRmult (3),
    TRmult (.5),
    Nb (10),
    NATR (60),
    Stoplo(275);

    FirstTime = 1800 ;
    LastTime = 2359 ;

  if date >= 1090721 and date < 1100104 then
  begin
    Nb = 9 ;
    NATR = 93 ;
    ATRmult = 3.15 ;
    TRmult = 0.51 ;
    Stoplo= 425 ;
  end ;
  if date >= 1100104 and date < 1100617 then
  begin
    Nb = 9 ;
NATR = 93 ;
    ATRmult = 2.55 ;
    TRmult = 0.66 ;
    Stoplo= 375 ;
  end ;
  if date >= 1100617 and date < 1101129 then
  begin
    Nb = 14 ;
    NATR = 83 ;
    ATRmult = 2.75 ;
    TRmult = 0.71 ;
    Stoplo= 425 ;
  end ;
  if date >= 1101129 and date < 1110515 then
  begin
    Nb = 14 ;
    NATR = 83 ;
    ATRmult = 2.75 ;
    TRmult = 0.66 ;
    Stoplo= 425 ;
  end ;
  if date >= 1110515 and date < 1111026 then
  begin
    Nb = 19 ;
    NATR = 93 ;
    ATRmult = 3.15 ;
    TRmult = 0.56 ;
    Stoplo= 425 ;
  end ;
  if date >= 1111026 and date < 1120412 then
  begin
    Nb = 14 ;
    NATR = 83 ;
    ATRmult = 2.95 ;
    TRmult = 0.61 ;
    Stoplo= 425 ;
  end ;
  if date >= 1120412 and date < 1120924 then
  begin
    Nb = 14 ;
    NATR = 93 ;
    ATRmult = 2.95 ;
    TRmult = 0.61 ;
    Stoplo= 425 ;
  end ;
if date >= 1120924 and date < 1130310 then
  begin
    Nb = 19 ;
    NATR = 73 ;
    ATRmult = 3.15 ;
    TRmult = 0.71 ;
    Stoplo= 425 ;
  end ;
  if date >= 1130310 and date < 1130826 then
  begin
    Nb = 14 ;
    NATR = 93 ;
    ATRmult = 2.95 ;
    TRmult = 0.51 ;
    Stoplo= 425 ;
  end ;
  if date >= 1130826 and date < 1140101 then
  begin
    Nb = 14 ;
    NATR = 93 ;
    ATRmult = 2.55 ;
    TRmult = 0.71 ;
    Stoplo= 425 ;
  end ;
Var: LongPrice(0), ShortPrice(0), LongTarget(0), ShortTarget(0);

//limit entry prices
ShortPrice = Average(Low, Nb) + ATRmult * AvgTrueRange(NATR);
LongPrice = Average(High, Nb) - ATRmult * AvgTrueRange(NATR);

{code to ensure only 1 order is entered at each bar - order closest to price}
var:diff1(0),diff2(0),EntrytoPick(0);
EntrytoPick=0;
diff1=absvalue(close-LongPrice);
diff2=absvalue(close-ShortPrice);
If diff1<=diff2 then EntryToPick=1;
If diff1>diff2 then EntryToPick=2;

if date >= 1090721 and MarketPosition = 0 and EntriesToday(Date) < 1 and Time >= FirstTime and Time < LastTime then begin

If EntryToPick=1 then begin
    Buy(“Long Entry”) next bar at LongPrice limit;
end;

If EntryToPick=2 then begin
    Sell short(“Short Entry”) next bar at ShortPrice limit;
end;

end;

If MarketPosition=-1 then begin
    ShortTarget = EntryPrice - TRmult * TrueRange;
    Buy to cover(“Short Exit”) next bar at ShortTarget limit;
end;

If MarketPosition =1 then begin
    LongTarget = EntryPrice + TRmult * TrueRange;
    Sell(“Long Exit”) next bar at LongTarget limit;
end;

Setstopposition;
setstoploss(stoplo);

SetExitOnClose; 

附录 C

欧元日策略,TradeStation 简易语言格式


var:xb(2),xb2(50),pipadd(1),Stopl(400),proft(5000);
    if date >= 1091118 and date < 1101025 then
    begin
       xb = 4 ;
       xb2 = 70 ;
       pipadd = 2 ;
       Stopl = 275 ;
    end ;
    if date >= 1101025 and date < 1110929 then
    begin
       xb = 4 ;
       xb2 = 72 ;
       pipadd = 5 ;
       Stopl = 225 ;
    end ;
    if date >= 1110929 and date < 1120904 then
    begin
       xb = 3 ;
       xb2 = 74 ;
       pipadd = 8 ;
       Stopl = 425 ;
end ;
    if date >= 1120904 and date < 1130812 then
    begin
       xb = 3 ;
       xb2 = 74 ;
       pipadd = 11 ;
       Stopl = 425 ;
    end ;
    if date >= 1130812 and date < 11400101 then
    begin
       xb = 5 ;
       xb2 = 80 ;
       pipadd = 8 ;
       Stopl = 425 ;
    end ;

var:cs(0),tradestoday(0),startprof(0),starttrades(0),stoplo(0);

cs=currentsession(0);

If cs<>cs[1] then begin
    tradestoday=0;
    startprof=NetProfit + OpenPositionProfit;
    starttrades=TotalTrades;
    Stoplo=stopl;
end;

If totaltrades<>starttrades or marketposition<>0 or startprof<>NetProfit + OpenPositionProfit then tradestoday=1;

If tradestoday=0 and time<1500 and date >= 1091118 then begin

//entry rules

If (high>=highest(high,xb) and close<close[xb2] ) then begin
    sellshort next bar at high+pipadd/10000 limit;
end;

If low<=lowest(low,xb) and close>close[xb2] then begin
    buy next bar at low-pipadd/10000 limit;
end;

end;

//exit rules

Setstopposition;
setstoploss(stoplo);
setprofittarget(proft);

setexitonclose; 

关于伴随网站

构建成功的算法交易系统 附带一个伴随网站,网址为 www.wiley.com/go/algotradingsystems(密码:davey14)。

你会找到五个补充电子表格和其他信息,以帮助你在交易旅程中:

  • 每日跟踪工作表

  • 开发工作表

  • 股票和回撤曲线构建器

  • 蒙特卡洛模拟器

  • 每月总结表

此外,读者将找到本书中所述策略的季度绩效更新。(有关更频繁的绩效更新,请访问 www.kjtradingsystems.com/bookupdates.html。)

有关更新和其他资源,请访问 www.WileyTrading.com。点击“免费交易者资源”并注册以获取访问权限。

posted @ 2024-11-03 11:42  绝不原创的飞龙  阅读(1)  评论(0编辑  收藏  举报