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 的一个主要缺点与创建自己的交易信号时会发生的问题有关。因此,在开发新版本的向导时,重点在于依据简单原则简化组合交易信号的创建。
为此,对交易信号生成器的基类(以下称为“信号”)进行了以下更改:
因此,现在可以采用有关以一个方向或另一方向进入市场的“全体”决定,即考虑每个顾问“深思熟虑的意见”。
信号依据嵌入的市场情形检测算法(因该信号而异)对价格变动方向进行“投票”。例如,基于随机动量指标的信号能够识别反向、价格分歧等。
标准库已经包含基于各种指标的二十个准备就绪信号。
按信号进行交易决策的机制可以通过以下关键规定来表示:
生成的每个 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。考虑一下获得的交易信号的两个选项:
价格向上穿越一个上升的 MA 指标。这对应于一种暗示价格上涨的市场情形,该情形嵌入在 MA 模块中。其重要性为 100。同时,随机动量动态指标向下,构成一个价格分歧。这是一种暗示价格下跌的市场情形,该情形在随机动量指标模块中实施。此情形的重要性为 80。
计算最终投票的结果。从 MA 模块获得的加权预测,经计算为 0.4 * 100 = 40。随机动量指标模块的加权预测经计算为 0.8 * (-80) = -64。最终的预测是两个加权预测的算术平均值:(40 - 64)/2 = -12. 这是条件强度为 12 的卖出信号。没有达到门槛值 20。因此,不会进行交易操作。
价格向下穿越一个上升的 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,必须首先决定我们在什么工具上以及在什么时间表内交易。其次,我们应依据我们用于交易的指标选择信号。
对于 我们的例子,我们将具备以下条件:
IntradayTimeFilter - 按每天中的时间和星期几进行筛选的筛选条件。
在 MetaEditor 使用 MQL5 Wizard 生成 EA 的源代码。
交易策略的基类位于 terminal_data_folder\MQL5\Include\Expert\ 中。准备就绪的交易信号类、跟踪未平仓位类和资金与风险管理类的算法分别位于 Signal、Trailing 和 Money 子文件夹中。MQL5 Wizard 解析这些文件夹中的文件,并用这些文件生成 EA 的代码。
图 2. MQL5 Wizard 的基类
要启动 MQL5 Wizard,您需要在工具栏上单击 "New"(新建),或从 "File"(文件)菜单选择 "New"(新建)(或按 Ctrl+N):
图 3. 启动 MQL5 Wizard
然后选择要创建的程序的类型。在我们的例子中,选择 "Expert Advisor (generate)"(EA 交易程序(生成)) 选项:
图 4. 选择程序的类型
步骤 1. EA 交易程序的一般属性
接下来打开一个对话框,您可以在其中设置 EA 交易程序的一般属性:
图 5. EA 交易程序的一般属性
在 "Name"(名称)、"Author"(作者)和 "Link"(链接)字段中分别指定您的 EA 交易程序的名称、作者姓名和您的网站的链接。
EA 交易程序还有以下输入参数:
默认情况下,两个选项都被设置为 "current"(当前),即 EA 交易程序将在任何交易品种/时间表进行测试和交易。
但这始终都是很好的选择?例如,您意外地在 AUDNZD 周线图上运行了为在 EURUSD 上进行当天交易而设置的 EA 交易程序(此外,它使用来自交叉对的确认)。它似乎没有什么好的。
因此,最好设置必需的参数。下一步,选择 EA 据其进行交易的交易信号的类型。要进行交易品种选择,请单击 "Next"(下一步)。
步骤 2. 选择交易信号的模块
建仓和平仓的算法是由交易信号模块确定的。交易信号模块包含建仓/平仓/反向仓位的规则。
EA 交易程序能够同时使用最多 64 种不同(或相同,但设置不同)的交易信号模块。
图 6. EA 信号的参数(开始)
标准库拥有以下准备就绪的交易信号模块:
图 7. 选择信号
依据我们的“参考说明”,我们首先选择 "Signals of indicator 'Moving Average''(移动平均线指标信号)。
配置必需的参数(PeriodMA 和 Method)。双击 "Name"(名称)字段以从优化中(默认情况下信号的所有参数都被标记为输入参数)排除除 Weight(权重)以外的所有参数。
在这里,我们需要提及字段 "Symbol"(交易品种)和 "TimeFrame"(时间表)。如果信号的相应设置不同于当前参数,则应设置这些字段。对于一个信号,当前设置为“高智能”的设置(在这个例子中为 EA 交易程序的设置)。
图 8. 信号参数的配置
添加余下的信号并配置必需的参数。对于优化,为所有信号仅留下 Weight(权重)参数。
信号配置即已完成。单击 "Next"(下一步)继续。
图 9. EA 信号的参数(结束)
步骤 3. 选择“跟踪未平仓位”模块
下一步是选择跟踪未平仓位的算法(跟踪止损)。使用跟踪让您能够兑现赚得的利润。
在 《MQL5 Wizard:无需编程即可创建 EA 交易程序》一文中详细说明了这一模块的配置。在我们的例子中,我们将不使用跟踪。
图 10. 选择仓位跟踪算法
步骤 4. 选择“资金与风险管理”模块
在最后一步中,您需要选择将在您的 EA 交易程序中使用的资金与风险管理系统。在 《MQL5 Wizard:无需编程即可创建 EA 交易程序》一文中详细说明了这一模块的配置。在我们的例子中,我们将使用固定手数。
图 11. 选择资金管理算法
就这些了。单击 "Finish"(完成)。
如果存在标准库的所有组件,则生成的 EA 交易程序的代码将会成功编译。可以在 MetaTrader 5 策略测试程序中进行优化之后找出一组最佳的 EA 交易程序参数。
要进行 EA 优化,选择从 2010 年 1 月 1 日至 2011 年 1 月 1 日的时间段,分为两个阶段运行。
第一阶段:“选择信号权重、触发进入/退出条件的门槛值和交易价格水平。”
图 12. EA 交易程序优化的参数
以下是最佳优化运行的结果。
图 13. EA 交易程序优化的结果
我们已经获得良好的结果(从盈利及最大亏损而言)。我们千万不能忘记我们是通过固定手数“交易”的。
但是让我们尝试进一步改进结果。为此,我们采用另一个信号(我们尚未使用此设置)。通过优化参数找到的值说明 EA 交易程序认识到的市场情形。
但是请记住,生成的市场情形并不始终都会同样高效工作。让我们应用时间筛选条件以优化结果。
为此,让我们依据 "IntradayTimeFilter"(当日时间筛选)信号的 "Bad hours"(不好时间)参数优化 EA 交易程序。"Bad hours"(不好时间)参数是一个 24(一天的小时数)位的位掩码。位掩码的每一位都与小时数相对应(掩码中位的序数与一天中小时的序数相对应)。值等于 1 的任何位将覆盖投票的任何结果,如果当前小时的序数等于此位的序数的话(即该小时被视为不适合交易的时间)。
为了经历“好”和“不好”时间的所有可能组合,我们从 0 至 2^24-1(即 16 777 215)以 1 的步长优化参数。
图 14. EA 交易程序优化的参数
作为优化的结果,我们得到 11 665 415。为了理解这有何含义,让我们用二进制来表示该数:
以下是经过所有优化之后 EA 交易程序的参数。
图 15. EA 交易程序优化的属性
附带了具有最佳参数的单一测试的报告。盈利较高,亏损较少。可以得出这样的结论:在经过时间筛选之后,交易系统在历史时段内的结果得到改进。
使用交易策略类显著简化了在 MetaEditor 中使用 MQL5 Wizard 创建用于测试交易理念的机器人的过程。现在,可以依据标准库中准备就绪的模块的组合或使用您自己的模块构建 EA 交易程序的整个源代码。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程