算法交易以及可以在策略测试器中根据历史数据来检验交易思路,是 MetaTrader 5 交易平台最重要的功能。
但是,为了在自动交易模式下在实时图表中或者策略测试器中使用交易策略,需要进行编程并转化为可执行文件(EA交易文件 - EA),并不是每个交易者都有编程能力或者掌握它们的资源,
这篇文章提出了解决这个问题的一种方案 — 可视化的策略构建工具:Mission Automate (自动化任务). 在它的帮助下,任何人都可以不必写一行代码,就能自动化他们的交易,并且在历史数据中检验策略。下方有该程序免费版本的链接。它还包含了5个制作好的、免费的、基于常用策略的EA交易。它们是以模板的形式设计的,可以作为其他策略的基础。
用于 MetaTrader4: Mission Automate Demo MT4
用于 MetaTrader5: Mission Automate Demo MT5
尽管免费版本有“演示(Demo)”的字样,它具有完整版所有的功能,并且不包含任何重要的限制,它只是有几点 "不便之处"。在市场中免费版本的页面描述处有程序完整版的链接。
这个可视化策略构建工具是为“非程序员”设计的,对很多用户都是有用的,任何交易者在花费一点时间了解它并掌握它的工作原理之后,都可以创建完整功能的交易机器人,
这篇文章提供的是通过创建实际应用的EA交易来展示该策略构建工具的主要功能概览。
Mission Automate 应用程序可以使任何人把他们的想法转化为完成的交易机器人,直观的图形界面中支持 "拖曳"技术,使得这个过程简单而有趣。创建EA交易就像是使用已有的模块(元件)而把它们通过逻辑连接起来,组合成一个结构图一般。当结构图创建完毕,它可以立即上线执行或者自动转换为 MQL5 代码用于将来在策略测试器或者实时图表中使用。
下面列出的是一部分可用的元件:
这样大量的元件又构成了极大数量的可能组合,使任何人都能创建各种类型的交易机器人和工具。下面是使用 Mission Automate 策略构建工具可以创建出的部分成果列表:
在策略构建工具中以及在这篇文章中,"交易(trade)"和"仓位(position)"这两个词是作为同义词使用的。一个交易/仓位可以是当前活动的,还没有关闭的,或者是历史的, 也就是过去已经关闭的。文字中的"订单(order)"应当被当成"挂单(pending order)"。挂单在晚些时候可能会成为一个仓位或者被取消而移动到历史中。
总体来说,把想法转换为交易机器人的过程包含了下面几个阶段:
大多数交易者可以自己独立成功完成步骤 # 1 和 # 2。本文中所述的产品可以完成步骤 # 3, 它可以为任何交易者制作算法交易。
Mission Automate 策略构建工具使您可以从头创建您自己的策略,或者从已经制作好的模板/实例开始,这会更加简单。
策略是由模块组合的,这些模块被称为元件(elements).
所有可用的元件都位于元件条(elements bar)中.
元件可以使用逻辑链接(links)来连接起来.
常有的元件和链接的组合可以保存为片段(snippets).
所有创建好的片段都位于片段条(snippets bar)中。
元件可以使用"拖曳"来移动,
一组元件和链接可以构成一个设计图(scheme).
一个新的设计图可以使用模板(template)来创建,
所有可用的模板都位于模板条(templates bar)中.
新的设计图可以从一个可用的模板或者从头创建,
如需从模板创建设计图,要在面板中选择对应的模板并把它拖到工作空间(workspace)中,在点击模板的图标时,会出现模板的简要描述,
当创建好了设计图时,设计条(schemes bar)上会出现它的图标。设计图图标是用于快速访问设计可行的操作的,在单次点击了图标的时候,会出现设计图的控制面板。如果您双击图标,所选的设计图就会移动到屏幕的中心位置。每个设计图都可以起一个名字,您可以在工作空间中自由移动设计图。
如需把新的元件加到设计图中,只需要把它们从元件条中拖到设计图上就可以了。
如果一个元件被从元件条中拖到一个空白的空间中,就会创建一个新的只包含这个元件的设计图。每个元件也可以赋予一个名称。
在点击了元件之后, 就会出现它的设计面板,您可以修改元件参数的数值或者把它们设为默认值。除了设置参数,还有选项可以克隆元件,删除元件或者重置它的设置,以及访问元件的简短描述和它的参数。
在元件条上点击了元件之后,会弹出它的设置窗口,在这种情况下,如果您从面板上修改了元件的参数,它们就会用于这个元件以后的所有新的拷贝中。
元件可以被分为三组。
元件可以使用逻辑链接(links)来连接起来. 链接可以把数据从一个元件传送到另一个元件,
只有相同类型或者在转换之间不会丢失数据的元件和参数,才能使用链接来相连。
如需创建新的链接,只要“拖住”元件的边缘,在点击链接之后,会出现含有其设置的窗口。
上面的图片显示了“出现新柱提醒通知”工具看起来的样子,
链接只能用于连接相同类型或者在相互转换时不会丢失数据的元件和参数,
有些操作可以应用于一组选中的元件,
如需创建一组元件,可以按住 Ctrl 键来选择设计图,所有位于其中的元件都会被选择。另外,如果在点击的时候按住了 Ctrl 键,元件会被突出显示。
在选定的组中点击了一个元件之后,会出现组的设置窗口,被选中的组可以被复制,删除或者保存到一个文件中。另外,您可以在组里创建一个包含多个元件的片段(snippet),在片段条就将出现一个新的片段,可以加到新的设计图中。使用片段条,您可以修改任何片段中的元件参数。
程序的其他特性可以通过构建真实 EA 交易的实例来了解。
我们先来探讨一个经典的交易策略,它是基于两条移动平均线的交叉。
这个策略可以如下简要描述:
当快速移动平均(MA)向上与慢速MA交叉时,我们买入。当快速MA向下与慢速MA交叉时,我们卖出。当有反向信号出现时,我们关闭仓位,另外还有止损和获利。
现在让我们以更加正式的形式来把策略描述成一系列规则/条件:
这一系列规则作为 EA 交易的规范已经足够好了,让我们开始使用可视化策略构建工具来开发这个交易机器人。
移动平均的周期数应当创建为 EA 交易的输入参数,
为此,要使用一个 Input 元件。对于不同类型的输入参数都有单独的元件,
指标周期数是一个整数(integer),我们将会使用对应的元件。让我们创建一个新的设计图,在上面加上两个这样的元件,再设置它们的名称并调整它们的数值,对于快速 MA, 我们把默认值设为 14, 而慢速 MA = 28. 这些数值可以在策略测试器中进一步优化。
我们的策略使用了一个标准指标,但是使用了不同的周期数,
我们需要两个叫做Moving Average(移动平均)的元件。
让我们把它们加到设计图中,并且把指标周期数元件连接到 Indicator Period(指标周期数) 参数。在这之后,设计图看起来就像这样:
默认情况下,指标使用当前图表的交易品种和时段,这正是我们所需要的。计算指标的周期数将取自对应的元件,
现在,为了确定买入/卖出信号的条件,我们从每个指标中取得两个值 - 对于前一个柱和当前柱。
为了取得指标值, 应当使用Indicator Value(指标值) 元件。让我们在设计图中加入4个这样的元件并创建对应的链接。
柱是按照从现在到以前的顺序编号的,当前没有完成的柱的编号是 0. 前一个形成的柱编号赋值为 1, 再往前的柱编号为2,以此类推。
我们的策略中只使用已经完成的柱,所以,对于当前柱我们使用 value = 1, 而对于前一柱我们使用 value = 2. 所有四个元件都要设置对应的值。
现在,我们需要比较指标值并且检查入场条件是否满足。
为了比较数字, 我们要使用 Compare(比较) 元件, 这个元件在满足指定条件时会输出数值 "true" ,而不满足时数值为 "false"。让我们在设计图中加上两个这样的元件,在第一个元件中,我们将检查在前一个柱是否快速MA高于慢速MA,在第二个元件中,我们检查在当前柱是否快速MA高于慢速MA。让我们创建对应的链接并配置比较元件的参数。
买入信号要同时满足两个条件:
为了检验这些条件同时满足, 要使用 "logical AND"(逻辑“与”)元件。这个元件在全部条件都满足的情况下,输出"true",如果 至少它们中有一个不满足的时候就输出"false"。
在设计图上加上两个这样的元件,并且把它们与两个 Compare 元件都要连接起来。
当这样做的时候,我们需要 "反转" 其中一些链接。如果在前一个柱上快速 MA 高于慢速 MA,Compare 元件会取得"true",但是我们需要检查的是不高于的情况,所以,我们需要通过调整相应连接在元件参数中的链接来反转输出值。反转过的链接在设计图上是使用红色画出的.
让我们继续实现交易操作。在开启一个新的仓位之前,我们必须检查当前的状态,如果交易在期望的方向上已经开启,就忽略这个信号,或者有开启的反向仓位时就要关闭该仓位。为了做到这一点,我们需要知道已有买入或者卖出仓位在当前时刻的数量。
为了访问交易信息,要使用Trades Group(交易组)元件。这个元件构成的是一组满足某些条件的交易,交易可以通过各种参数来过滤,例如交易品种,幻数,注释,等等。
我们需要一个这种元件来用于买入交易,而另一个用于卖出交易,让我们在设计图中加入这样两个元件并相应地配置它们:
如需取得交易组的信息 (我们需要知道其中交易的数量), 我们将使用Trades Group Information (Integer) (交易组信息,整数)元件。 让我们在设计图中加上两个这种元件。它们的输出值将会使用Compare元件来与0作比较。
现在我们需要创建最后的条件 - 交易操作的触发器。每个触发器包含两个条件:
因为我们需要检查几个条件的满足情况,我们将再次会使用逻辑与元件,每个触发器用一个。在设计图上加上4个这样的元件,并创建对应的链接。
请注意,对于开启仓位的触发器,Compare 元件的链接必须要反转。
触发器做好了,剩下的事情只有加上交易元件了。
如需开启一个仓位,要使用的是Open Trade(开启交易)元件. 我们需要一个用于开启买入仓位,而另一个用于开启卖出仓位。
如需关闭交易,需要使用的是 Close Trades Group(关闭交易组)元件。这里我们还需要一个元件用于关闭卖出交易,而另一个来用于关闭买入交易。
除了触发器,我们还需要把交易组自身与 Close Trades Group 元件相连。在把这些元件加上,并创建对应链接之后,设计图看起来就像这样了:
EA 的交易逻辑已经完成了,现在我们需要确认的是交易手数大小,交易注释和止损/获利值可以通过 EA 交易的输入参数来进行调整,为此,我们又一次需要来自 Input Parameters(输入参数) 组的元件。
交易手数是一个小数, 交易注释是一个字符串, 而幻数、止损和获利都是整数。在设计图上加入这些元件,并把它们附加到交易元件的对应参数中。
设计图已经完成了,现在您需要的是创建一个可执行的 EA 文件。
如果您想要把 EA 的输入参数按照一定顺序排列,您可以使用Arrange Inputs 选项。这将会列出所有用于输入参数的元件,它们可以上下移动,指定它们在 EA 设置窗口中出现的顺序。
编译成功之后,会生成与源代码文件名相同的,以.ex5 为扩展名的 EA 文件 ,并且位于源文件 (.mq5) 所在相同的文件夹中。
这个 EA 文件应当放在交易终端的 Experts 文件夹中,然后它就可以在交易终端中使用了。
如果我们在策略测试器中运行创建好的 EA 交易,我们将会看到下面的画面:
EA 已经完成了,并且完全符合交易策略的原始规则。
让我们探讨另一个常见的基于马丁格尔系统的交易策略。该策略可以描述如下:
我们使用初始手数大小在任意方向上开启一个仓位;我们设置相同大小的止损和获利值;如果仓位获利关闭,下一个将会再次以初始手数大小开启;如果仓位亏损关闭,下一个交易将会有加大的手数大小,并且使用抵消之前亏损的利润来关闭。
这样的机器人的技术规格像这样:
让我们开始使用可视化策略构建工具来创建这个 EA 交易。
为了实现这个策略,我们需要有当前状态的信息(是否存在已经开启的仓位)以及交易历史 (我们需要知道前一个交易的方向,利润和手数大小).
构建两个交易组: 一个用于已经关闭的仓位 (历史),而另一个用于开启的仓位 (当前). 另外,为幻数设置加上 Input Parameter 元件。
如果不存在已经开启的仓位,必须开启仓位。就像在之前例子中那样,使用 Trades Group Information 元件来确定已经开启仓位的数量,并且把取得的数值和0作比较。如果没有仓位,就会触发开启一个新的交易,在我们的例子中,链接必须要反转。
如果已经有了开启的仓位,我们需要为它设置止损和获利。
在前面的例子中,这是在交易开启之后立即进行的,但是不是所有的执行模式 /经纪商都允许这样做。所以,要考虑开启仓位时没有止损和获利,而在将来设置它们的方法。
设置 (修改) 止损和获利水平是通过Modify Trades Group(修改交易组)元件来进行的,
另外,要加入用于交易注释的输入参数和止损以及获利点数的输入参数。
为了确定之后交易的类型,我们需要知道之前最后关闭仓位的方向。为了取得仓位的信息,要使用Trade Information(交易信息) 元件。为此,我们需要知道最后一次交易的单号,我们可以使用 Trades Group Information(交易组信息) 元件来取得它。
让我们取得最近交易的类型,看它是买入还是卖出,为此,我们要使用Equal(相等)元件. 它允许比较不同类型数据的数字,如果它们是相等的,就会输出 "true" 。
使用Variable(变量)元件, 为下一个交易创建一个类型. 这个元件在不同条件满足情况下会输出不同的数值,类似于一种 switch.
如果之前的交易是买入,则下一个交易将是卖出,反之亦然。如果最近交易的类型未知 (如果还没有仓位开启过), 则使用输入设置中的类型。在对应元件的协助下创建它。
现在我们需要做的就是计算下一个交易的交易量,为此,我们需要最近所关闭仓位的结果、以及它的交易量。交易的利润和交易量是使用 Trade Information 元件来获得的,利润将会与0做比较,来确定交易关闭时是盈利还是亏损。
如果这是第一个交易,或者最近仓位是以获利关闭的,我们就是用初始手数大小设置一个新的循环,
为了确定新循环开始的条件,使用 逻辑 OR(或) 元件. 如果至少有一个条件满足,它就返回"true",如果所有的条件都没有满足,它就返回"false"。我们需要检查两个条件:(1) 是否获利关闭仓位的条件是通过Compare元件取得的, 它会检查交易是否是以0来比较的 (连接或元件的连接必须要被反转。(2) 检查是否这是第一个交易,要使用 AND 元件, 在那里我们会连接来自Equal元件转换过来的数值。然后,如果之前的交易既不是买入也不是卖出,也就是说在这种情况下没有之前的仓位。
如果没有之前的仓位,我们就需要计算下一个交易的交易量,为此,我们要使用 Arithmetic(算术) 元件,它可以进行两个数字的各种数学计算。在本例中,我们要把之前交易的手数乘以 Lot Multiplier 参数指定的系数, 它是用 Input Parameter 元件创建的。对于我们的策略,把它的默认值设为 2。
对于下一次交易手数大小的计算,要使用 Variable 元件, 与确定下次交易类型类似。如果我们要开始一次新的循环,我们就需要使用初始手数,但是如果我们是在一次亏损交易后继续循环,我们就需要在后一次交易中使用根据之前阶段计算所得的手数。
另外,还要增加一个元件用于初始手数大小(输入参数). 完成后的设计图看起来是这样的:
如需快速浏览设计图/策略中所有元件的参数,您可以使用 Parameters Layout view(参数布局视图) 功能。
在这种情况下,设计图会改变它的外观,被分成两个区域。第一个区域列出所有设计图中的参数,而第二部分列出所有包含这些参数的元件。在这种布局中,我们可以检查所有元件的每个参数的设置。
让我们确保所有元件都是使用 EA 交易所运行图表的当前交易品种,要做到这一点,先把设计图切换到 Parameter Layout 模式,然后在左边的列表中选择 Symbol Name 参数,然后,在右手边的区域,您可以看到这个参数位于设计图的三个元件中,并且每个都被设为 Current Symbol (当前交易品种),意思就是使用当前图表的资产。如有必要,这个值可以改成市场报价(Market Watch)中任何其他货币对的名称。
让我们在策略测试器中检验我们已经完成的 EA 交易,要做到这一点,就像在前一个例子中那样,我们需要生成一个源代码文件并在 MetaEditor 程序中编译它。
这个策略是有风险的,但是根据给出的算法它是有效的!有很多空间可以进一步提高这个策略,优化它的参数以及降低风险,您可以增加不同的入场过滤器,增加一个点差过滤器,在周末之前的星期五禁止开始新的循环,限制最大手数大小或者循环中交易的最大数量,或者其他一些内容。
使用可视化策略构建工具,用户不仅能够创建交易策略,也可以创建更简单的工具 - 交易小工具.
现在我们将创建一个小工具,它可以在一组交易达到指定的利润水平时关闭它们。
交易必须满足下面的要求:
最后一点需求是因为并不是永远在第一次尝试关闭仓位的时候就会成功,这种情况的原因可能有所不同,最常见的是所请求的报价过期了 (requotes). 所关闭交易组中的仓位数量越多,就越有可能它们不会在第一次尝试的时候就都被关闭,特别是在动荡加剧的时候。
关闭一组交易的触发器将是这些仓位达到了给定的利润水平,所以,我们需要访问这组仓位和它们的参数。
使用指定的幻数(Input Parameter 元件)创建一个交易组(Trades Group 元件),得到其中交易的数量再把它与0做比较,确定是否至少有一个仓位需要监控。
取得交易组的当前总利润 (Trades Group Information 元件) 并把这个值与指定的平仓利润水平 (Input Parameter 元件)做比较。
现在我们可以使用 Compare 元件作为触发器来立即关闭整个交易组,但是我们会使用少许不同的方法来这样做。因为在实际应用中 EA 交易是在每个分时执行的 - 每个分时执行一次。而在真实交易中可能有以下情况,关闭所有交易的条件达到了,这个工具开始关闭它们,但是因为一些原因在这个分时只有这些交易的一部分能被关闭,有些还会保持开启,在下一个分时,工具将会再次检查条件,但是就可能无法再达成了,因为有些仓位在前一个分时已经被关闭,它们不再是交易组的一部分了。
解决方案是要在 Variable 元件中 "记住" 交易组达到条件的事实,EA 会在变量保持为 "true" 的时候在后面的分时中关闭所有交易,直到它们全部被成功关闭。当所有的交易被关闭之后,把条件重新置为关闭 (把变量值设为"false") 再等待下一个平仓的触发器。
仓位的关闭是使用Close Trades Group元件完成的。
工具的交易逻辑已经完成,它已经有了全部功能了,现在我们要加上的就是记录尝试关闭交易组次数的功能,
为此,我们要再次使用 Variable 元件, 但是这一次它是作为计数器使用的。当交易组中没有开启的交易时,我们把它的数值重置为0,而当我们每次尝试关闭一组仓位的时候就把它的值增加1 (使用 Arithmetic 元件)。
除了这两个元件,我们还需要一个元件来把小数转换为整数 (Transformation), 因为我们在计数器中使用了整型变量,而 Arithmetic 元件返回的值是小数类型。如果我们使用小数类型的 Variable 元件,就可以不需要这个转换。
把元件加到图表中并且做好配置,显示如下:
剩下的唯一事情就是生成消息文本,并且在关闭仓位的时刻做提醒了,消息文本可以使用 Combine String(组合字符串)元件来构成, 它可以把消息部分组成一个字符串。
MetaTrader5 标准提醒功能是使用Alert(提醒)元件来实现的。
让我们回顾一下这个例子中的另一个功能,每个设计图可能含有多个ends(结局) - 即设计图执行完毕而不触发任何操作后必须执行的一些行为,在这个设计图中,它是一个提醒以及交易组的关闭。
如果您希望这些操作以某种顺序执行,例如,在关闭交易之前做提醒 - 您需要使用Arrange Ends(处理结局)选项。随后就会出现一个对话框,就像处理输入参数那样,您可以在那里上下移动元件来指定它们的执行顺序。
我们的工具已经完全做好了,因为这个 EA 交易不开启任何订单,而只是一个交易助理,就不需要在策略测试器中测试它了。
交易图可以立即执行,甚至不必生成源代码和创建 EA 文件 (尽管可以这样做,这样制作好的 EA 可以运行于终端中的独立图表中)。如需实时运行交易图,只要按下 Start / Stop Executing 按钮。当点击了它时,设计图会按照 EA 文件在独立图标中载入的相同方式开始执行。这个选项可以用于同时执行多个简单工具,而不必为它们生成源代码并且不用在独立图表中运行它们的情况。
本文包含了可视化策略构建工具 Mission Automate 的概览,通过使用例子,它展示了任何人怎样不通过编程就能创建交易机器人。
从市场上下载此应用程序并实际尝试它都是免费和简单的,它包含了5个制作好的、基于常用策略的 EA 交易。
对于 MetaTrader4: Mission Automate Demo MT4
对于 MetaTrader5: Mission Automate Demo MT5
我对这一项目的未来开发还有大的计划,所以有任何提高此程序的建议和留言,我都会非常感谢。
让我们使每个人都可以创造算法交易!
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程