![采用跟踪止损的赚钱算法](https://c.mql5.com/i/articles/overlay.png)
采用跟踪止损的赚钱算法
简介
我们曾在要么获得全部要么一无所有的外汇策略一文中讲过一种带有随机进场和定时退出的算法。此算法不会考虑市场事件以及应进入市场的方向。对于此算法而言,只有几乎不变的市场波动率至关重要。从根本上讲,此算法不会产生任何利润或损失,但却被证实在抽签时非常有用。
本文中需要我们现在掌握的要点,即在于一个交易的持续时长设置不能短于一个小时、亦不能超过一周。如果值小于一小时,则会因点差导致极快损失;而大于一周的值则会被拖延到年度抽签。
我们利用熟悉的欧元美元货币对和一个采用跟踪止损的退出来开始我们的算法研究吧。
1. 具有一个随机进场和采用跟踪止损的退出的算法
- 以随机方向进入市场;
- 将跟踪止损设定为等同于 TS;
- 一直等到跟踪止损被触发;
- 回到点位 1 或停止交易。
因为跟踪止损监测市场状况,所以您可有望利用此算法获得一些利润。很明显,如果价格波动为随机游走,则此算法什么也得不到。但实际价格的波动可远远不止混乱无序那么简单,所以,根本没有获利的希望。
与其胡乱猜测此算法的执行方式,还不如就开发一个“EA 交易”,然后再测试。关于程序中跟踪止损的设置方式,已经讲过太多了。本文中,我们不会从算法层级一直细究到编程,那样的话,我们就讲不完了。因为要开发“EA交易”以供研究,我们采用 100.000 美元为最大存款值,以 0.1 为最小手数。如此则允许我们在止损离场之前查看更多的动作。
我们暂时议定跟踪止损等同于 TS,而本文中的其它止损则会以当前图表中最后 5 个烛形图的平均实体尺寸的某个百分比表示。我们要采用 D1 作为显示当前图表的时间表。您也可以采用其它任何数量的烛形图(不必一定是 5 个),因为它对推理论证没有任何重大影响。重要的是选取该测量尺度,我们不会依赖于当前波动性、选定的货币或货币对。
为实施一次测试运行,于 D1 上设置为 TS=100%。此 TS 值设置完毕后,一项交易的期限会在一天左右。上面已经提到,由于点差导致的快速损失,不可以设置更短的交易周期和更小的 TS 值。设定更大的值会拖延算法运行时间。
图 1. 通过具有一个随机进场和采用跟踪止损的退出的算法得到的余额,TS=100
图 1 表明此算法实现盈利,而且现在已开发出了“EA 交易”,按照惯例,我们可以于此结束本文。
然而,读完这种类型的文章后,还会有三个问题深深地困扰着您:
- 图中所示的利润是否是历史数据拟合参数的结果?
- 为何选择欧元美元货币对?如果使用其它货币对,又会怎样?
- 为何选用这一部分历史数据?此外,该算法具有一种随机进场功能,而且产出利润也可以完全是某种纯粹的随机性质。
我们一个一个地回答这些问题。
此算法具有一个随机进场和采用跟踪止损的退出,只有一个纯粹基于常规考虑而选择的 TS 参数 - 由点差和交易持续期导致的损失。此算法仍应优化。
至于优化,我们会采用从 1990 到 2012 年间几乎所有可用的历史数据。因为此算法具有一个随机进场,所以我们会针对每一个 TS 值采取 100 种不同的随机进场顺序。由此,我们就会消除算法中的随机性,并避免历史数据拟合。
图 2. 欧元兑美元,D1 跟踪止损 TS 值的优化(最优 TS=500)
优化只能在测试仪的“仅开盘价”模式下执行,此模式会对不精确的计算做出解释,尤其是那些仍然正确呈现一般概念的较小 TS 值。
如图 2 所示,此优化并未给出一个明确的最大值。较小的跟踪止损,也就是 TS 等于 50 到 100 时,会导致损失。更深一步,TS 处于 150 到 850 之间时,平均来讲,此算法会产生利润。而当 TS 处于 900 到 1500 的范围内时,此算法又会再度开始损失。
1500 以上的 TS 值不被考虑。TS=1500 时,此算法会于 22 年间执行约 25 次交易 - 亦为合理边缘。因为我们尚未确定一个明确的最大值,所以,我们会取 150 到 850 可盈利范围的中间位置,也就是 TS=500 (22 年间 130 次交易)。
现在,我们来考量通过不同货币对算法得到的余额。再一次,为避免历史数据拟合,我们与其去考量某单次计算的余额,还不如考量 100 次不同随机进场计算的平均余额。
图 3. 通过具有一个随机进场和采用跟踪止损的退出的算法得到的余额,TS=500,欧元兑美元,100 次随机进场的平均
图 4. 通过具有一个随机进场和采用跟踪止损的退出的算法得到的余额,TS=500,英镑兑美元,100 次随机进场的平均
图 5. 通过具有一个随机进场和采用跟踪止损的退出的算法得到的余额,TS=500,美元兑日元,100 次随机进场的平均
通过具有一个随机进场和采用跟踪止损的退出的算法得到的余额,TS=500,欧元美元对、英镑兑美元和美元兑日元,100 次随机进场的平均,都呈现于图 3-5 中。平均的余额沿 Y 轴呈现,而时间则沿 X 轴显示。我们仔细研究研究平均余额。
针对所有货币对,首先要指出的就是急剧的垂直上升趋势和漫长平缓的下滑趋势。我建议将因此类型余额导致的算法称为“伪损失”算法。确实,如果我们以随机的 3 个月为期限,很可能就没有急剧上升,而只会看到少量、稳定且一致的损失。也就是说,这种损失要比因点差导致的常规损失快得多。同时,我们也可以看到,这种伪损失算法在 20 年的时间段内既可赢亦可输。
其次,货币对不同,垂直上升的数量亦会有所不同。比如说,英镑兑美元图表中就没有美元兑日元图表中那么多的上升趋势。此外,相对于时间的上升趋势一点都不混乱。2009 年,所有三个货币对都能看出显著的上升趋势:欧元兑美元、英镑兑美元及美元兑日元。货币图表表明 2009 年的上升趋势是 2008 年 12 月的危机造成的。上升趋势因此也都是危机的指征。从现在开始,我所谈及的都是作为危机的显著上升趋势。
平均余额图表中呈现的危机,可以反映出真实的历史事件,但也能自行发生,即,可能是假的。在某种理想的无秩序随机行走中,也会发现此类危机,但是所有的都是假的。危机永远都不会在无秩序随机行走中彼此同步。根据平均余额曲线找到的危机的数量,会确定实际的价格波动是否属于危机性质。
再者,对余额和采用不同货币的算法性能完成检查之后,我们会逐渐了解此算法的操作。市场平静时,价格变动类似于无秩序随机行走,且此算法平均来讲因点差导致损失。一致损失与假危机交替出现的时期 - 上升趋势 - 平均来讲,因点差导致损失。
因为此算法中的交易者的时限非常长,而交易时限却可能只有两个月左右,所以损失非常慢,可以忽略。一旦接近真正的危机时,价格变动会停止其混乱状态。它会变得可预测且趋势导向,即易受趋势发展影响。危机的进一步发展可能导致与无秩序随机行走完全不同的雪崩式价格变动。
此算法于危机中表现如下:猜测趋势的方向之后,此算法会等待危机高峰 - 将跟踪止损拉得更近,且会在高峰高达之时被触发。如果此算法对于趋势方向的猜测错误,则跟踪止损会在趋势开始时生效,而此算法则将立场反转为 50/50 可能性。由此,此算法成功处理了大约四分之三的实际危机 - 基本上就是其赚钱方式。
可以看出,想创造利润,此算法需要危机趋势动向。它在上面所示的货币对之外,与欧元兑美元价格变动完全相关。而英镑兑美元价格变动则走向不明且无危机。价格行为中为何有此差异呢?我从基础分析中得知:欧洲与美国之间总是会爆发贸易战,而英国与美国却有着非常友好的关系。我们可以从采用此算法绘制的平均余额图表中,看出这一友好关系价值几何。
价格行为亦由金融监管者决定。2008 经济危机因资金注入而得到抑制 - 几乎所有货币对的平均余额图表中的高峰都有体现。通过彼时的新闻报道,我们都对 2008 危机非常清楚。美国自那以后实施了两轮量化宽松政策。至于资金注入的领域、时间、方向和方式,也和平常一样,由于某种原因未加报道。
欧元兑美元平均余额表明 2010 和 2010 年中期有危机。那么,这就是两轮量化宽松政策吗?监管者力图在不通知市场的情况下静悄悄地介入。仅凭肉眼想在价格图表中识别一次危机,不总是那么容易办到 - 价格的高或低并不总是预示着危机。而价格变动的平均余额则充当着一个指标,帮助揭开危机的面纱。显示的危机中,哪些是假的,哪些是真的,这又是一个独立的复杂主题。
关于价格变动的稳定性,我们也少说几句。比如说,22 年来,英镑兑美元余额稳步下行,而欧洲兑美元余额则呈现出一种相当稳定的增长。美元兑日元变动中的稳定性亦极小。价格变动的稳定性非常重要,因为它是未来算法盈利能力的唯一保证。从技术分析的角度来看,算法的盈利能力已没有任何其它保障。
所以,我们才指出,此算法要如何使用、使用哪些价格变动才能盈利。到了研究利润的时候了。出于研究目的,上面采用的手数均为 0.1。从利润的角度来看,此手数并非最优。我们来计算最优手数。利润增长与手数成正比。止损离场的风险亦与手数成正比。至于欧元兑美元余额,则观察到 1991 年美元出现 200 元最大急剧下滑。
如果手数 0.1 替换为 25,则急剧下滑量可能达到 50.000 美元或 50%。换句话说,如果手数为 25,我们确定不能避免止损离场。因此,最优的手数处于 0.1 到 25 的范围之间。只要您愿意,则可以随意执行一次更加精确的手数计算;我则会简单地取 0.1 与 25 两者的平均,大致定为 10。所以,最佳手数为 10。
此算法利用 0.1 手数得到了 1400 美元(参见欧元兑美元余额)。如果手数为 10,则此算法会盈利 140.000 美元。存款为 100.000 美元。因此,22 年间,我们的利润会是 140%,或是每年 6%。从现实的角度来看,没有这么多,但是要超过许多银行为外币存款提供的利息率。
算法变体
上文探讨了具有一个随机进场和采用跟踪止损的退出的算法。想要获取没有历史数据拟合的平均余额,随机进场必不可少。在尝试分析和理解跟踪止损的作用方式时,它可提供相当大的帮助。但是,此算法处理某危机和价格变动的趋势导向本质时并未处于其最佳状态。
上面我们可以看到,此算法只能成功处理四分之三的危机。开发出一种会以最优方式处理趋势导向价格行为的算法,是技术分析的一般性任务之一,我们这次不予讨论。而现在,我们只想试着改进这种带有随机进场的算法。
最简单的想法当中,就包含一种带有反向进场交易的算法。通过上面我们可以看出,一旦有未成功进场进入趋势并触发跟踪止损,则此算法会利用 50/50 可能性猜测趋势方向。我们停止猜测,并进入与之前交易相反的方向。
2. 具有一个反向进场交易和采用跟踪止损的退出的算法
- 进入与之前交易相反方向的市场。首先,我们进入,也就是说,处于买进方向。
- 将跟踪止损设定为等同于 TS
- 一直等到跟踪止损被触发
- 回到点位 1 或停止交易。
根据此算法开发“EA 交易”是一项常规例行任务。我们不会把主要精力放在 TS 值的优化方面,而是采用之前确定的优化值 500。(如果您选择执行优化,则仍会得到 TS=500)。存款为 100.000,与之前相同;手数为 0.1,时间表为 D1。
图 6. 通过带有反向进场交易的算法得到的余额(第一进场 - 买入)
图 6. 通过带有反向进场交易的算法得到的余额(第一进场 - 卖出)
图 5-6 显示的是通过带有反向进场交易的算法得到的余额。我们可以看到,第一进场的方向只待第一次危机时方显重要性。第一次危机过后,对比变得平行。
和以前一样,这也是一个在危机中赚钱的伪损失算法,尤其是在 2008 年危机中。由带有随机进场和反向进场交易的算法显示的回挫值大致相同,但利用反向进场交易产生的利润为 9.000 美元,而不是之前的 1400 美元。结果是,盈利能力不再是 6%,而是每年 6*9000/1400=38%。而且,从现实角度看,每年 38% 确实不算差。
具有采用跟踪止损的退出的算法,可以不同方向对其进一步改进。您可以使用不同的进场来预测趋势方向,或是利用危机的周期属性,或是启用/禁用基于基础分析的算法。以及众多其它事项。我会将其留作爱好者的一道小灶。
这些算法中最难的部分并非“EA 交易”的开发,甚至也不是其正确优化,而是一种从算法角度长期稳定价格行为(即指平均余额)的获取。而且价格的稳定性会以利润的形式慷慨偿还。以某种特定算法获取价格行为,将需要修改算法参数,这又是另一个独立的复杂程序了。
最终,我只能充分利用上图所示的英镑兑美元价格的稳定损失行为。我们能做的最简单的事情,就是以与具有随机进场和采用跟踪止损的退出的算法相反的交易方向交易。然而,它也不是万能的。采用跟踪止盈或跟踪利润可能会是更好的解决方案 - 我不确定其最好的调用方式是什么。
从本质上来讲,跟踪止盈与跟踪止损极其相似,区别在于此算法会持续跟踪止盈价位,而非止损价位。如果当前价格较盈利水平的偏移值大于 TP,则止盈价位向价格方向变化。止损价位仍保留未设置状态,即,处于止损离场从位。
为避免重复随机进场算法,我会马上列出具有反向进场交易和采用跟踪止盈的退出的算法。
3. 具有反向进场交易和采用跟踪止盈的退出的算法
- 以与之前交易相反的方向进入;
- 将跟踪止盈设定为等于 TP;
- 一直等到跟踪止盈被触发;
- 返回点位 1。
我们使用的是英镑兑美元,D1,存款为 100.000 美元,研究用途的手数为 0.1,TP=500。
图 7. 通过具有一个反向进场交易和采用跟踪止盈的退出的算法得到的余额。英镑兑美元,D1
此算法作用于没有危机、且价格变动走向不明的情况。
此算法的运行机制如下:走向不明的价格变动易于打破任何趋势并转变成一个水平通道。如果水平通道内的盈利已被触发,则意味着我们已经邻近通道壁,且应以与我们之前交易的做法完全相反的方向进入。
表中表示由此算法证实的回挫值比之前的小一些,而 19 年间采用 0.1 为每手股数最小值(研究用途)的产生利润为 7.000 美元。采用此最优每手股数实现的盈利能力大致为每年 30%。
我想我会以通常的方式,利用此余额图表(活力满满的上升趋势)结束本文。真心希望本文中选择的货币对和历史数据,以及提供的算法优化,不会让您感到特别失望。
总结
本文考量了具有随机与反向进场交易和采用跟踪止损的退出的三种算法。还演示了从具有一个随机进场和采用跟踪止损的退出的算法角度来看,欧元兑美元、美元兑日元及英镑兑美元的价格行为。
根据展示的价格变动的稳定性,提议采用具有一个反向进场交易和采用跟踪止损的退出的算法,实现预估每年 6% 的盈利能力。根据价格变动的稳定性以及对于随机进场算法运行的理解,建议采用两种反向进场交易算法实现每年 30% 的盈利能力。算法运行机制已予考量,相关的“EA 交易”代码亦已提供。
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/442
![如何很快地制作一个交易机器人](https://c.mql5.com/2/0/development.png)
![利用 MetaTrader 5 测试仪实现策略可视化](https://c.mql5.com/2/0/trade_robot_in_Backtester.png)
![使用标准库类和Google Chart API 创建信息板](https://c.mql5.com/2/0/info_panel_MQL5.png)
![以MQL5 编写的EA 交易程序的测试与优化指南](https://c.mql5.com/2/0/Testing_Optimization_Guide_MQL5__1.png)
reverse entries into trade:转回分录?
这个完全不能理解是什么意思了吧?
看原文意思,应该是指反向进场交易(相对与上一笔交易而言)。
reverse entries into trade:转回分录?
这个完全不能理解是什么意思了吧?
看原文意思,应该是指反向进场交易(相对与上一笔交易而言)。
感觉这个算法的核心是:1)随机进场;2) 跟踪止损 3)通过优化确定优化确定跟踪止损的价位,不断确定最优的参数值。作者很牛的是给出了2006年~2009年的测试资金曲线,这个好像有一定难度--你的TS参数把1-6月的曲线搞得好看了,可6-12月,还能那么平滑吗?
新文章 采用跟踪止损的赚钱算法已发布:
作者:Гребенев Вячеслав
外汇市场交易 所有的完成交易 做多做空只要是盈利的都是好的