请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化策略 帖子:3364704 新帖:25

MQL5 Wizard:新版本

SCSDV_d发表于:4 月 17 日 17:14回复(1)

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 交易程序的整个源代码。

全部回复

0/140

量化课程

    移动端课程