English Русский Español Deutsch 日本語 Português
开发跨平台网格 EA 交易(第三部分): 使用马丁格尔的基于修正的网格

开发跨平台网格 EA 交易(第三部分): 使用马丁格尔的基于修正的网格

MetaTrader 5交易系统 | 26 八月 2019, 09:11
8 544 3
Roman Klymenko
Roman Klymenko

简介

在本系列的前几篇文章中,我们已经开发了两种不同的网格EA (开发一个跨平台网格EA开发一个跨平台网格EA (第二部分): 在趋势方向上基于范围的网格).

第一个 EA 已经足够好了,只是它在很长一段时间内不能盈利。第二个EA在几年之内可能有效,不幸的是,在最大回撤低于50%的条件下, 它每年无法产生超过50%的利润。此外,我们无法控制最大回撤本身。在这方面,一切都取决于市场。那么,这是否意味着网格 EA 无法安全盈利?让我们在本文中尝试回答这个问题。

设置任务

在本文中,我们将开发下一个(可能是最后一个)版本的网格 EA。只有当价格向不利方向移动时,才会遵循马丁加尔策略设定网格。网格中的订单量将不断增加。因此,一旦价格反转或修正发生,网格中的所有订单都将以整体利润关闭。

EA 所下的单独订单没有止损水平,当所有当前未结头寸的总利润超过EA参数中设置的值时,将激活获利。

事实上,这并不是一个完整意义上的网格,因为没有正式设置网格。相反,它可能被称为普通的马丁格尔。另一方面,如果价格对我们不利,我们在与前一个相同的距离开仓,这显然意味着形成一个网格。实际上,对这些条款进行修改是没有意义的,我们的主要目标是使 EA 比我们以前开发的其他网格 EA 更具盈利能力,这就是我们所要做的。

风险管理

和所有的网格一样,马丁格尔也有一个主要问题——在使用它时不可能管理风险。这可能会导致在短时间内亏掉全部存款。同时使用网格和马丁格尔似乎是在使用一个完美的爆炸性混合物。那么在这种情况下,我们可以讨论什么样的风险管理呢?我们真的能开发一个“安全”的EA吗?

结果证明我们可以!我们至少可以用两种方式来管理我们的风险。首先,当按余额计算的权益减少一定数量时,我们可以用损失来关闭整个网格。第二,如果达到第 N 步,我们可以用损失关闭整个网格。在这两种情况下,我们都承认出了问题,重新开始交易,希望未来的利润能够弥补目前的损失。只有测试才能证明我们的希望是否合理。

这样导致净值减少的方法有一个缺点——我们不能在一个账户上同时交易多个交易品种。由于账户资产显示了整体情况,我们对每个特定交易品种的损失仍不清楚。因此,我们将使用第二个选项来管理风险。

进入第一笔交易

还有一个问题,如何定义第一笔交易的方向?你可能会问,为什么只有第一笔交易才重要。原因是剩余的仓位将以与第一个仓位相同的方向开启,并且只有当价格相对于我们移动了EA设置中指定的若干点时。

当然,我们可以扔硬币。但在这种情况下,每次的测试结果都是不同的。此外,我们只能从一个方向进入,但这看起来不像是一个聪明的解决方案。因此,让我们尝试在我们的 EA 中添加至少一些智能,并测试确定第一个进入方向的几种方法:

  • 按上一个柱的方向入场;
  • 根据移动平均值入场;
  • 在N个单方向柱的反向入场;
  • 按照N个单方向柱的方向入场。
这些入场方法既可以单独使用,也可以同时全部使用。但是,确定您使用的入场方向的类型越多,EA所做的交易就越少,因为只有在所有涉及的入场定义方法都批准的情况下才执行一次入场。

EA 输入参数

我们已经开发了两种网格EA,因此,没有必要详细描述另一个系统的开发。相反,让我们来看看我们的新EA将要具备的输入参数,EA的源代码附在文章后面。

Lot size. 网格中第一步的手数大小,后续步骤中的手数大小依赖于 "Increasing a lot in a chain" 参数。

Increasing a lot in a chain. 此参数允许在随后的网格步骤中选择手数大小。以下值可用:

  • Fixed: 所有的网格步骤中,手数大小都等于在 "Lot size" 参数中设置的手数大小;
  • Arifmet: 在每个新步骤中,交易量手数都增加 "Lot size" 参数值, 例如: 1, 2, 3, 4, 5, 6, 7;
  • Geomet: 在每个新步骤中 (从第三个开始), 交易量手数都加倍, 例如: 1, 1, 2, 4, 8, 16.

根据测试,使用固定交易量是最糟糕的选择。在链中指数式增加手数 (几何式) 在外汇交易中显示出最佳的结果。对于大多数股票市场工具来说,大量指数增长也是一个更好的选择,尽管在算术级数更可取的情况下也有例外。因此,除非另有明确说明,否则以下所有试验都应在参数设置为Geomet的情况下进行。

Grid size in points. 网格中打开仓位之间的距离。例如,如果参数设置为30,当前价格比第一个买入订单下跌30点,则网格中的第二个订单打开。如果价格相对于第二个网格订单下降30点,则第三个订单打开等。

Do not open LongDo not open Short. 参数禁止打开多头/空头头寸。

由于大多数股票市场工具从长期来看都是看涨的,使用这些参数可能会提高盈利能力。如果你看到一只股票大部分时间都在看涨,那么只按照整体趋势的方向进行交易是合理的。

'Closing all positions' 组. 该组的参数允许您为链中的所有头寸配置获利和止损级别。

根据获利关闭仓位是由以下参数管理的: "Profit, $", "Profit at step 1, $", " Profit at step 2, $", ..., "Change take profit level after a step". 只有 "Profit, $" 参数是必需的。其它参数允许在链中的某一步改变 " Profit, $" 参数, 例如,通过进一步的步数增加关闭整个利润链的机会。

止损是由 "If equity decreased, $" 和 "Close all at trade number" 参数管理的,我在上面已经描述了它们。

'Use entry by bar only' 组. 该参数允许沿上一个柱的方向打开第一个仓位,为此,只需把 " Use entry by bar only" 参数设为 TRUE。

'Bar series' group. 这些是打开第一个仓位的设置,要么沿着单向柱序列的方向,要么逆着它移动。若要启用检查,请设置在 " Enter if N bars in one direction" 参数中.

MA group. 该参数允许您通过移动平均值配置入场建立第一个仓位,要使用此入场选项,请在“Period”参数中设置移动平均周期与0不同。

测试规则和工具列表

从理论上讲,我们的 EA 应同时适用于盘整和趋势市场。因此,我们将在外汇市场和美国股市进行测试。一般来说,EA可以在几乎所有的工具中进行有效的交易。股市尤其如此,在任何情况下,只有1-2种工具不会带来利润。因此,我们将只对EA显示出其最佳性能的工具进行测试。然而,这并不意味着它在其他工具上表现不佳。

测试的工具. 测试将在以下工具上进行: USDCAD, NZDUSD, SBUX, XOM, INTC, CMCSA 和 PG.

时段. 在所有的测试中, EA都工作在 M5上,再次,测试表明,这是最适合网格EA的时期。

测试规则. 在 USDCAD 和 NZDUSD 上, 测试是在从 2010 年到 2019 年之间进行的,在 "1 分钟 OHLC" 模式下搜索适合的参数,找到的最佳结果会在 "基于真实报价的每一报价" 模式下再次进行。

股票市场工具将在2013-2019年期间进行测试。对其执行测试的代理没有更多的数据,而对检测到的最佳结果的优化和最终测试都将在“基于真实报价的每一报价”模式中执行。

最佳结果的选择是在 "余额""最大恢复系数" 参数中进行的。

测试根据前一个柱入场

在本系列的前一篇文章中,我们已经探讨了遵循前面的柱方向入场,当使用 D1和 MN 柱时,它提高了EA的盈利能力。我们将测试以下 D1 柱,以及 W1 和 MN 时间段。

在上一个交易条的方向入场允许按照当前本地趋势的方向进行交易。因此,让我们从测试这个特定的入场方法开始。如果当前EA没有未结交易,那么如果所选时间段上的前一个柱为多头,则第一个交易将是买入交易。如果看跌,第一笔交易就是做空。

下表给出了最佳测试结果。

交易品种
 恢复系数
每年 %
 最大回撤
 利润因子 交易总数
每年交易数
最大步数
止损 
 USDCAD
 8.12  90%
 948.76  1.68  3 577  397  8  2017.02
 NZDUSD
 8.03  89%
 1 404  1.91  2 850  316  9  -
 SBUX * **
 5.31  88%  93.17  2.36  386  64  9  2013.05, 2014.11, 2016.02, 2016.11, 2019.05
 XOM
 5.94  99%  180.78  2.52  506  84  8  2013.08
 INTC *
 6.7  111%
 88.13  3.02  289  48  8  -
 CMCSA **  7.74  129%
 34.02  3.7  281  46  8  -
 PG **  6.42  107%
 102.85  2.2  767  127  9  2013.01, 2013.09, 2014.11, 2018.04

* 一个月的时间框架.
** 在链中使用算术方法增加手数

所有列的内容都是不言而喻的,但是,应注意:

  • "止损" 列指定为所有未结头寸激活止损的日期;换句话说,我们达到了EA参数中设置的最大步数;
  • "每年 %" 将每年的EA盈利能力百分比设置为最大可能下滑 (也就是说. (恢复系数/测试时间段)*100).

"恢复系数" 列对我们最重要,该列值显示EA获得的利润与最大提款量的比率,即,恢复系数=利润/最大回撤量。因此,这个值越大,测试工具上的EA就越有利可图。为了进行正确的比较,还应考虑试验周期。

外汇测试期为9年,股票市场测试期为6年。因此,例如,外汇恢复系数9等于每年利润的100%,而股票市场工具则等于每年利润的150%。

余额图如下所示。

USDCAD:

根据前一个柱入场, USDCAD

NZDUSD:

根据前一个柱入场, NZDUSD

SBUX:

根据前一个柱入场, SBUX

XOM:

根据前一个柱入场, XOM

INTC:

根据前一个柱入场, INTC

CMCSA:

根据前一个柱入场, CMCSA

PG:

根据前一个柱入场, PG

策略测试器的报告附加在文章中。

测试使用移动平均 (MA) 入场

移动平均线可能是交易员为便于理解市场而发明的第一种指标。多年来,它的相关性仍然毫发无损。

最初,移动平均值仅用于D1柱。根据测试,D1柱上的移动平均值最适合我们的EA。因此,我们将只优化MA周期(范围从30到54),而不是时间框架。

MA将在最简单的解释中使用。如果EA还没有开始任何交易,则在当前价格高于MA的情况下,将开始一个买入交易。如果目前的价格低于均价,则开始做空交易。

最佳结果如下:

交易品种
 恢复系数
每年 %
 最大回撤
 利润因子 交易总数
每年交易数
最大步数 止损 
 USDCAD
 7.18  79%
 939.88  1.72  1 861  206
 8  -
 NZDUSD
 6.51  72%
 1 672.77  1.74  3 232  359  9  -
 SBUX
 6.95  115%
 159.67  2.62  536  89  9  -
 XOM *
 5.64  94%
 179.15  2.2  513  85  9  -
 INTC
 5.13  85%
 149.67  2.34  525  88  9  2015.06
 CMCSA *  12.26  204%
 33.39  11.35  218  36  9  -
 PG **  7.37  122%
 85.86  2.27  846  141  8  2014.09, 2014.11, 2015.08, 2016.12

* 仅买入交易.
** 在链中使用算术方法增加手数

Generally, stock market results are slightly better than when following the previous bar. In case of Forex, the first option is more preferable.

Now let's have a look at the balance graphs. If, according to the tests, there was not a single stop loss, the graphs look as ordinary lines inclined upwards.

USDCAD:

基于MA入场, USDCAD

NZDUSD:

基于MA入场, NZDUSD

SBUX:

基于MA入场, SBUX

XOM:

基于MA入场, XOM

INTC:

基于MA入场, INTC

CMCSA:

基于MA入场, CMCSA

PG:

基于MA入场, PG

测试在N个柱后反向入场

我在一次研讨会上发现了这种入场方法。根据演讲者的说法,这种方法增加了你获得利润的机会,因为在长时间的单向运动之后,修正的可能性增加了。从理论上讲,这听起来是合理的。

因此,如果价格向一个方向移动了五个柱,那么是时候对价格进行修正了,假设正在进行修正。

让我们测试一下这个入场方法,我们将优化柱的时间框架(在M5、M15、H1、H4和D1中选择),以及单向柱的数量(3-7)。

最佳结果如下:

交易品种
 恢复系数
每年 %
 最大回撤
 利润因子 交易总数
每年交易数
最大步数 止损   时间框架
 USDCAD
 7.75  86%  575.26  2.09  1 123  124  8  -  H4
 NZDUSD
 6.13  68%  1 184.53  1.83  3 224  358  9  -  H1
 SBUX
 5.67  94%  127.49  4.93  202  33  8  -  M15
 XOM
 8.07  134%  143.81  2.06  963  160  8  2013.08, 2015.01, 2015.08  M15
 INTC
 7.53  125%  56.08  2.03  521  86  6  13 stop losses  M15
 CMCSA  10.04  167%  28.4  16.1  97  16  6  -  M15
 PG  7.98  133%  137.02  3.34  446  74  8  -  M15

一般来说,在某些点上,与前面描述的方法相比,结果更好。在某些方面,情况更糟。

让我们看看利润和余额。

USDCAD:

在 N 个柱后反向入场, USDCAD

NZDUSD:

在 N 个柱后反向入场, NZDUSD

SBUX:

在 N 个柱后反向入场, SBUX

XOM:

在 N 个柱后反向入场, XOM

INTC:

在 N 个柱后反向入场, INTC

CMCSA:

在 N 个柱后反向入场, CMCSA

PG:

在 N 个柱后反向入场, PG

在 N 个同方向柱后跟随入场

因为我们在一个方向上测试了N个柱的反向入场,所以让我们测试N个柱后跟随方向的入场。这样的入场方法看起来也是合理的,例如,如果价格不停地向一个方向移动,这意味着趋势的开始。那么,为什么不沿着这个运动的方向入场呢?

这个入场方法类似于我们第一次检查的方法——遵循前一个柱。然而,在这种情况下,我们确保至少有三个柱朝着相同的方向,而这些柱的时间范围小于D1。测试在 M15, H1, H4 和 D1 柱上进行,同一个方向上的柱数从 3 到 7 变化。最佳结果如下:

交易品种
 恢复系数
每年 %
 最大回撤
 利润因子 交易总数
每年交易数
最大步数 止损   时间框架
 USDCAD
 7.39  82%
 63.77  4.25  120  13  7  -  D1
 NZDUSD
 4.86  54%
 546.01  1.66  1 504  167  7  -  D1
 SBUX **
 7.39  123%  82.26  3.35  312  52  9  2014.01, 2014.10, 2017.03  M15
 XOM
 12.52  208%  114.98  2.92  723  120  8  2013.10  H4
 INTC
 9.34  155%  72.56  3.62  283  47  8  -  M15
 CMCSA  8.68  144%  32.41  4.35  289  48  8  -  M15
 PG  10.28  171%  152.61  2.21  1 444  240  9  2013.04, 2016.03, 2019.01  M15

** 在链中使用算术方法增加手数

股票市场的结果非常有趣,. 和外汇市场的情况不同。

USDCAD:

在 N 个柱后入场, USDCAD

NZDUSD:

在 N 个柱后入场, NZDUSD

SBUX:

在 N 个柱后入场, SBUX

XOM:

在 N 个柱后入场, XOM

INTC:

在 N 个柱后入场, INTC

CMCSA:

在 N 个柱后入场, CMCSA

PG:

在 N 个柱后入场, PG

无条件测试入场

我们已经测试了打开第一个仓位的四种方法,但是,我们可以自由地不使用它们中的任何一个。让我们在没有条件的情况下测试打开第一个仓位,换句话说,如果EA当前没有打开的仓位,它会立即在设置中选择的方向上打开一个仓位。如果未禁用打开多头仓位,则EA将始终打开多头仓位。如果打开多头头寸被禁用,则EA将始终打开空头头寸。

让我们看一下测试结果:

交易品种
 恢复系数
每年 %
 最大回撤
 利润因子 交易总数
每年交易数
最大步数 止损 
 USDCAD
 7.92  88%
 1 236  1.98  2 484  276  9  -
 NZDUSD
 7.54  83%
 1 101  1.63  2 843  315  8  2011.10, 2013.04, 2013.10
 SBUX *
 8.49  141%
 122.29  3.15  413  68  8  2016.01, 2018.06
 XOM
 7.09  118%
 232.14  2.61  789  131  9  -
 INTC *
 5.08  84%
 81.65  2.07  481  80  7  2019.05
 CMCSA ** *  8.85  147%  48.59  2.9  611  101  9  2015.08, 2018.03
 PG  5.9  98%  118.29  1.87  514  85  7  2013.01, 2013.11, 2014.12, 2015.10, 2016.01, 2019.03
* 买入交易

** 在链中使用算术方法增加手数

即使没有任何入场条件,如果EA遵循全局趋势,马丁格尔也能够产生利润。对于几乎所有的股票市场工具,这当然是指买入。但是,如果使用任何方法来定义第一个仓位,结果可能会更好。

总结测试结果

根据测试,遵循之前的 D1 柱是外汇的最佳选择,而在股票市场,这个选择是最差的。在这种情况下,值得注意的是其他选项,特定的入场方法可能最适用于某些工具,而对于某些其他工具则更糟。只有测试才能帮助您找到特定工具的最佳策略。

此外,测试还表明,限制网格中的最大步数允许我们在控制风险和避免整个存款损失的同时,实际获得市场优势,除非您使用第一笔交易量,在这种情况下,最大回撤量超过了您的存款。网格应足够大,能够承受中期修正。从表中可以看出,股票市场每年的交易数量很少超过100笔。

对于增加手数的选项,只有几何级数在外汇市场有效,而几何级数和算术级数在股票市场都有效。

从测试中得出的另一个结论是,在长期交易中,没有必要期望外汇每年超过100%的利润,股票市场每年超过150%的利润,特别是如果你不想冒超过90%的存款风险来做这件事。如果您需要的最大回撤量不超过存款的20%,那么预期利润不可能超过每年20-25%。

实时测试

创建了两个交易信号来测试EA操作。

第一个是模拟帐户信号。它交易以下工具:USDCAD、SBUX、CMCSA、GM、KO、MCD、MSFT、ORCL和HPE。应用的交易量是最小的,这意味着信号只能用于根据EA的平衡和盈利能力定义移动的一般性质。它不能显示考虑到存到存款上的资金可以获得多少利润百分比。

第二个信号是最近在真实账户上启动的。在撰写本文时,它只交易股票市场工具:SBUX、MCD、KO、MSFT、NKE、ORCL、ADBE、CMCSA、LLY和HPE。

两个账户的EA交易是本文所述账户的修改版本,它使用的入场方法与我在这里描述的方法不同,这将在后面的系列文章中讨论。

还有第三个信号,这是以前使用反方向进行交易时使用的旧信号(该系列的最后一篇文章)。然后,网格EA从系列的前一部分开始使用它。目前,该EA使用的是 USDCAD 和 NZDUSD上的跟随前一个柱方向入场的方法,然而,前一个EA的USDCHF交易仍在信号中。它们最终将随着时间的推移而关闭,只有当前EA的交易将保留。

结论

我们开发的EA有两个显著的缺点:

  • 首先,较长的获利在测试中表现最好。所以,如果我们能在一开始就猜到交易的方向,我们必须等待很长时间,直到价格达到我们的获利。在某些情况下,可能需要一个多月才能实现获利。问题是在链条的第一步使用的是最小交易量的仓位,如果价格立即有利变动,则不会有额外的头寸。
  • 我们已经提到了第二个缺点:遵循存款最大回撤不超过20%的原则,盈利能力很小。

我们将在本系列的后续部分中尝试克服这些缺点。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/7013

附加的文件 |
griderKatOneEA.ex5 (124.21 KB)
griderKatOneEA.mq5 (79.84 KB)
griderKatOneEA.ex4 (47.19 KB)
griderKatOneEA.mq4 (79.84 KB)
最近评论 | 前往讨论 (3)
ddwin668
ddwin668 | 5 9月 2019 在 10:18
为何该EA在MT5中无法完成测试,日志没有显示错误,只有不断的requote但没有任何成交,有人能完成测试吗?能否告诉我是怎么回事?
Aaron JF
Aaron JF | 24 2月 2021 在 08:47
我的也是这样
vito hong
vito hong | 29 4月 2023 在 13:15
一样
轻松快捷开发 MetaTrader 程序的函数库(第十二部分)。 轻松快捷开发 MetaTrader 程序的函数库(第十二部分)。
上篇文章中,我们在函数库中为 MQL4 定义了平仓事件,并删除了若干未使用的订单属性。 在此,我们将研究创建 Account 对象,开发帐户对象的集合,并筹备跟踪帐户事件的功能。
轻松快捷开发 MetaTrader 程序的函数库(第十一部分)。 与 MQL4 的兼容性 - 平仓事件 轻松快捷开发 MetaTrader 程序的函数库(第十一部分)。 与 MQL4 的兼容性 - 平仓事件
我们继续大型跨平台函数库的开发,简化 MetaTrader 5 和 MetaTrader 4 平台程序的开发。 在第十部分中,我们重启与 MQL4 函数库兼容性的工作,并定义了开仓和激活挂单的事件。 在本文中,我们将定义平仓事件,并剔除未使用的订单属性。
轻松快捷开发 MetaTrader 程序的函数库(第十三部分):帐户对象事件 轻松快捷开发 MetaTrader 程序的函数库(第十三部分):帐户对象事件
本文研究如何处理帐户事件,跟踪影响自动交易的重要帐户属性变化。 在开发帐户对象集合时,我们已在上一篇文章中实现了一些跟踪帐户事件的功能。
优化管理 (第一部分): 创建一个GUI(图形用户界面) 优化管理 (第一部分): 创建一个GUI(图形用户界面)
本文描述了为MetaTrader终端创建扩展的过程,所讨论的解决方案有助于通过在其他终端中运行优化来自动化优化过程。关于这个话题,我们将再写几篇文章。扩展是使用C#语言和设计模式开发的,它还展示了通过开发自定义模块扩展终端功能的能力,以及使用首选程序的功能创建自定义图形用户界面的能力。