外汇EA编写教程:MQL5 Wizard:新版本

MetaTrader 5 客户端将继续改进并提供新的功能。新的 MetaTrader 5 build 439 包含更新后的 MQL5 Wizard,它允许依据更加灵活的交易规则创建 EA 交易程序。在本文中,我们将介绍 MQL5 Wizard 的新可能性并解释使用此应用程序生成的 EA 交易程序的架构的变化。

背景知识

最初,MQL5 Wizard 是作为一个帮助交易者轻松创建MQL5程序的便利工具设计的。在 MQL5 Wizard的第一版中,您已经能作为一组简易模块快速创建一个随时可使用的 EA,获得其 MQL5源代码。重要的一点是,您无需知道 MQL5 语言 – 您需要的只是阅读《用 MQL5 Wizard 创建您自己的 EA 交易程序》一文。

向导(Wizard)生成的 EA 交易程序包含三个模块:

每个 EA 模块以某个类为基础,提供大量的机会来修改您的 EA 交易程序的行为。

标准库包含一组功能完善、准备就绪的类,用于实施各种机制的资金管理、未平仓位维护和交易信号生成。

这种方法允许基于历经证明和卓有成效的模块创建交易机器人。您只需要经过几个步骤并指定必需的参数即可。但是经验表明,即使是解释编写自定义类的原则的优秀例子也并不是始终都能对 MQL5 入门程序员有所帮助。

前一版本的 MQL5 Wizard 另一个缺点是要实施一个新的稍有改动的交易算法,您需要编写一个新的类。

借助从用户获取的经验和评论,MetaQuotes 决定创建一个具有更多功能、更加先进的 MQL5 Wizard 版本。

生成交易信号的新概念

前一版本的 MQL5 Wizard 的一个主要缺点与创建自己的交易信号时会发生的问题有关。因此,在开发新版本的向导时,重点在于依据简单原则简化组合交易信号的创建。

为此,对交易信号生成器的基类(以下称为“信号”)进行了以下更改:

  • 任何信号(派生自 CExpertSignal 类)都是基于“顾问”的预测,这些顾问对可能的价格变动提供它们的意见。这些顾问又派生自 CExpertSignal 类,因此可以有它们自己的顾问。每个信号中顾问的数量最多可达 64 个。
  • 向 CExpertSignal 类添加了新方法,在价格变动方向实施“投票”。此外,它还包含参与此类“投票”的新机制。
  • 为了增大决策的灵活性,现在,在决策中涉及的每个信号(不要忘记“顾问”也是信号)能够从其自己的市场工具(不同于当前市场工具)和/或从其自己的时间表接收信息。

因此,现在可以采用有关以一个方向或另一方向进入市场的“全体”决定,即考虑每个顾问“深思熟虑的意见”。

信号依据嵌入的市场情形检测算法(因该信号而异)对价格变动方向进行“投票”。例如,基于随机动量指标的信号能够识别反向、价格分歧等。

标准库已经包含基于各种指标的二十个准备就绪信号

进行交易决策的新机制

按信号进行交易决策的机制可以通过以下关键规定来表示:

  • 每个信号有其自己的一组市场情形(价格和指标值的某种组合)。
  • 每种商场情形有 1 至 100 的权重值。值越大,情形的强度就越大。
  • 每种情形生成某个方向上价格变动的预测。
  • 通过比较从适用情形收到的预测,选择最强的一个,并且提供一个在 -100 至 +100 范围内的预测,其中符号确定预测变动的方向(负号 — 价格下跌,加号 — 价格上涨)。绝对值对应于找到的最佳情形的强度。然后将此结果发送到一般投票。
  • 模块内每个顾问的预测都加入投票,权重因子为 0 至 1.0,在设置 “Weight”(权重)中指定。
  • 投票结果是一个 -100 至 +100 的数字,其中符号确定预测变动的方向,而绝对值表示信号的强度。它作为模块的所有顾问的算术加权平均预测值来计算。此结果是信号的预测,绝对值是信号强度指示。

生成的每个 EA 交易程序的设置包含两个参数 — 做出建仓或平仓决定的门槛值(ThresholdOpen 和 ThresholdClose) 值的范围可从 0 至 100。如果信号强度超过门槛值,则做出进行交易操作的决定。

使用 MQL5 Wizard 创建的 EA 包含三个部分,其中最重要的是包含用于生成交易信号的模块的头部。然后,在模块中对信号的处理可按以下方式表示:



该图显示信号模块可包含两个部分 – 市场情形部分和顾问部分。市场情形部分从各个情形形成预测,之后从中选择最强的一个。顾问(其他信号)的预测乘以对应的权重,然后在投票期间将生成的值加在一起以生成算术平均预测。在这个例子中,信号模块为当前情形生成的值为 -36.6 = (-100+60-54)/3。这意味着绝对强度为 36.6 的卖出预测。

考虑一下两个简单例子中的决策机制。

假定有一个 EA 交易程序,其 ThresholdOpen=20,ThresholdClose=90。在交易决策中涉及基于 MA 的信号模块,权重为 0.4,以及基于随机动量指标的信号模块,权重为 0.8。考虑一下获得的交易信号的两个选项:

  • 选项 1。

    价格向上穿越一个上升的 MA 指标。这对应于一种暗示价格上涨的市场情形,该情形嵌入在 MA 模块中。其重要性为 100。同时,随机动量动态指标向下,构成一个价格分歧。这是一种暗示价格下跌的市场情形,该情形随机动量指标模块中实施。此情形的重要性为 80。

    计算最终投票的结果。从 MA 模块获得的加权预测,经计算为 0.4 * 100 = 40。随机动量指标模块的加权预测经计算为 0.8 * (-80) = -64。最终的预测是两个加权预测的算术平均值:(40 – 64)/2 = -12. 这是条件强度为 12 的卖出信号。没有达到门槛值 20。因此,不会进行交易操作。

  • 选项 2。

    价格向下穿越一个上升的 MA 指标。这对应于一种暗示价格上涨的市场情形,该情形嵌入在 MA 模块中。其重要性为 10。同时,随机动量动态指标向下,构成一个价格分歧。这是一种暗示价格下跌的市场情形,该情形随机动量指标模块中实施。此情形的重要性为 80。

    计算最终投票的结果。从 MA 模块获得的加权预测,经计算为 0.4 * 10 = 4。随机动量指标模块的加权预测经计算为 0.8 * (-80) = -64。最终的预测是两个加权预测的算术平均值:(4 – 64)/2 = -30. 这是条件强度为 30 的卖出信号。已经达到门槛值 20。因此,结果是一个建立短仓的信号。

图 1. 以图表表示的市场情形的例子

上图显示了在例子中描述的市场情形:

a) 在选项 1 和选项 2 中使用了价格分歧和随机动量指标。
b) 价格从下到上穿越 MA 指标
– 在选项 1 中使用。
c) 价格从上到下穿越 MA 指标 – 在选项 2 中使用。

在 EA 中组合信号

要创建我们自己的 EA,必须首先决定我们在什么工具上以及在什么时间表内交易。其次,我们应依据我们用于交易的指标选择信号。

对于 我们的例子,我们将具备以下条件:

  1. 交易品种为 EURUSD。我们的时间表为 M10。
  2. 使用的信号:
    • EMA(‘EURUSD’,M10,31) – 依据指数移动平均线的信号;
    • Stochastic(‘EURUSD’,M10,8,3,3) – 依据随机动量指标的信号;
    • EMA(‘EURUSD’,H1,24) – 依据来自不同时间表的指数移动平均线的信号;
    • Stochastic(‘EURJPY’,H4,8,3,3) – 依据来自不同交易品种和时间表的随机动量指标的信号;
    • IntradayTimeFilter – 按每天中的时间和星期几进行筛选的筛选条件。

在新的 MQL5 Wizard 中创建交易机器人

在 MetaEditor 使用 MQL5 Wizard 生成 EA 的源代码。

交易策略的基类位于 terminal_data_folder/MQL5/Include/Expert/ 中。准备就绪的交易信号类跟踪未平仓位类和资金与风险管理类的算法分别位于 Signal、Trailing 和 Money 子文件夹中。MQL5 Wizard 解析这些文件夹中的文件,并用这些文件生成 EA 的代码。

MQL5 Wizard 的基类

图 2. MQL5 Wizard 的基类

要启动 MQL5 Wizard,您需要在工具栏上单击 “New”(新建),或从 “File”(文件)菜单选择 “New”(新建)(或按 Ctrl+N):

图 2. 启动 MQL5 Wizard

图 3. 启动 MQL5 Wizard

然后选择要创建的程序的类型。在我们的例子中,选择 “Expert Advisor (generate)”(EA 交易程序(生成)) 选项:

图 3. 选择程序的类型

图 4. 选择程序的类型


步骤 1. EA 交易程序的一般属性

接下来打开一个对话框,您可以在其中设置 EA 交易程序的一般属性:

图 4. EA 交易程序的一般属性

图 5. EA 交易程序的一般属性

在 “Name”(名称)、”Author”(作者)和 “Link”(链接)字段中分别指定您的 EA 交易程序的名称、作者姓名和您的网站的链接。

EA 交易程序还有以下输入参数:

  • Symbol(交易品种,字符串类型)                            – EA 运行所在交易品种;
  • TimeFrame(时间表,ENUM_TIMEFRAMES 类型)- EA 运行所在时间表。

默认情况下,两个选项都被设置为 “current”(当前),即 EA 交易程序将在任何交易品种/时间表进行测试和交易。

但这始终都是很好的选择?例如,您意外地在 AUDNZD 周线图上运行了为在 EURUSD 上进行当天交易而设置的 EA 交易程序(此外,它使用来自交叉对的确认)。它似乎没有什么好的。

因此,最好设置必需的参数。下一步,选择 EA 据其进行交易的交易信号的类型。要进行交易品种选择,请单击 “Next”(下一步)。


步骤 2. 选择交易信号的模块

建仓和平仓的算法是由交易信号模块确定的。交易信号模块包含建仓/平仓/反向仓位的规则。

EA 交易程序能够同时使用最多 64 种不同(或相同,但设置不同)的交易信号模块。

图 5. EA 信号的参数(开始)

图 6. EA 信号的参数(开始)

标准库拥有以下准备就绪的交易信号模块:

  1. 加速动量指标信号
  2. 自适应移动平均线指标信号
  3. 动量振荡指标信号
  4. 熊市力量动量指标信号
  5. 牛市力量动量指标信号
  6. 商品通道指数动量指标信号
  7. DeMarker动量指标信号
  8. 双指数移动平均线指标信号
  9. 轨道线指标信号
  10. 分形自适应移动平均线指标信号
  11. 当日时间筛选信号
  12. MACD指数平滑移动平均线动量指标信号
  13. 移动平均线指标信号
  14. 抛物线转向指标信号
  15. 相对强弱指数动量指标信号
  16. 相对活力指数动量指标信号
  17. 随机动量指标信号
  18. 三重指数平均线动量指标信号
  19. 三重指数移动平均线指标信号
  20. 威廉动量指标信号

图 6. 选择信号

图 7. 选择信号

依据我们的“参考说明”,我们首先选择 “Signals of indicator ‘Moving Average”(移动平均线指标信号)。

配置必需的参数(PeriodMA 和 Method)。双击 “Name”(名称)字段以从优化中(默认情况下信号的所有参数都被标记为输入参数)排除除 Weight(权重)以外的所有参数。

在这里,我们需要提及字段 “Symbol”(交易品种)和 “TimeFrame”(时间表)。如果信号的相应设置不同于当前参数,则应设置这些字段。对于一个信号,当前设置为“高智能”的设置(在这个例子中为 EA 交易程序的设置)。

图 7. 信号参数的配置

图 8. 信号参数的配置

添加余下的信号并配置必需的参数。对于优化,为所有信号仅留下 Weight(权重)参数。

信号配置即已完成。单击 “Next”(下一步)继续。

图 8. EA 信号的参数(结束)

图 9. EA 信号的参数(结束)


步骤 3. 选择“跟踪未平仓位”模块

下一步是选择跟踪未平仓位的算法(跟踪止损)。使用跟踪让您能够兑现赚得的利润。

《MQL5 Wizard:无需编程即可创建 EA 交易程序》一文中详细说明了这一模块的配置。在我们的例子中,我们将不使用跟踪。

图 9. 选择仓位跟踪算法

图 10. 选择仓位跟踪算法


步骤 4. 选择“资金与风险管理”模块

在最后一步中,您需要选择将在您的 EA 交易程序中使用的资金与风险管理系统。在 《MQL5 Wizard:无需编程即可创建 EA 交易程序》一文中详细说明了这一模块的配置。在我们的例子中,我们将使用固定手数。

图 10. 选择资金管理算法

图 11. 选择资金管理算法

就这些了。单击 “Finish”(完成)。

在 MetaTrader 5 策略测试程序中检查创建的 EA 交易程序

如果存在标准库的所有组件,则生成的 EA 交易程序的代码将会成功编译。可以在 MetaTrader 5 策略测试程序中进行优化之后找出一组最佳的 EA 交易程序参数。

要进行 EA 优化,选择从 2010 年 1 月 1 日至 2011 年 1 月 1 日的时间段,分为两个阶段运行。

第一阶段:“选择信号权重、触发进入/退出条件的门槛值和交易价格水平。”

图 11. EA 交易程序优化的参数

图 12. EA 交易程序优化的参数

以下是最佳优化运行的结果。

图 12. EA 交易程序优化的结果

图 13. EA 交易程序优化的结果

我们已经获得良好的结果(从盈利及最大亏损而言)。我们千万不能忘记我们是通过固定手数“交易”的。

但是让我们尝试进一步改进结果。为此,我们采用另一个信号(我们尚未使用此设置)。通过优化参数找到的值说明 EA 交易程序认识到的市场情形。

但是请记住,生成的市场情形并不始终都会同样高效工作。让我们应用时间筛选条件以优化结果。

为此,让我们依据 “IntradayTimeFilter”(当日时间筛选)信号的 “Bad hours”(不好时间)参数优化 EA 交易程序。”Bad hours”(不好时间)参数是一个 24(一天的小时数)位的位掩码。位掩码的每一位都与小时数相对应(掩码中位的序数与一天中小时的序数相对应)。值等于 1 的任何位将覆盖投票的任何结果,如果当前小时的序数等于此位的序数的话(即该小时被视为不适合交易的时间)。

为了经历“好”和“不好”时间的所有可能组合,我们从 0 至 2^24-1(即 16 777 215)以 1 的步长优化参数。

图 13. EA 交易程序优化的参数

图 14. EA 交易程序优化的参数

作为优化的结果,我们得到 11 665 415。为了理解这有何含义,让我们用二进制来表示该数:

  •  101100100000000000000111 – 即“不好”时间为 0、1、2、17、20、21 和 23。

以下是经过所有优化之后 EA 交易程序的参数。

图 14. EA 交易程序优化的属性

图 15. EA 交易程序优化的属性

附带了具有最佳参数的单一测试的报告。盈利较高,亏损较少。可以得出这样的结论:在经过时间筛选之后,交易系统在历史时段内的结果得到改进。

总结

使用交易策略类显著简化了在 MetaEditor 中使用 MQL5 Wizard 创建用于测试交易理念的机器人的过程。现在,可以依据标准库中准备就绪的模块的组合或使用您自己的模块构建 EA 交易程序的整个源代码。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/275

附加的文件 |

sample.mq5
(15.75 KB)

 

 


MyFxtop迈投(www.myfxtop.com)-靠谱的外汇跟单社区,免费跟随高手做交易!

 

免责声明:本文系转载自网络,如有侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与迈投财经无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。

風險提示

MyFxtops邁投所列信息僅供參考,不構成投資建議,也不代表任何形式的推薦或者誘導行為。MyFxtops邁投非外匯經紀商,不接觸妳的任何資金。 MYFXTOPS不保證客戶盈利,不承擔任何責任。從事外彙和差價合約等金融產品的槓桿交易具有高風險,損失有可能超過本金,請量力而行,入市前需充分了解潛在的風險。過去的交易成績並不代表以後的交易成績。依據各地區法律法規,MyFxtops邁投不向中國大陸、美國、加拿大、朝鮮居民提供服務。

邁投公眾號

聯繫我們

客服QQ:981617007
Email: service@myfxtop.com

MyFxtops 邁投