图形EA交易: AutoGraf

Сергей Ковалев | 11 一月, 2016

哪一个交易者没有过这样的梦想呢: 只用鼠标拖拖放放, 就可以轻松设置止损和获利水平?如果一个交易者每天做交易, 一个方便的界面对他或她是非常重要的.

MetaQuotes 语言版本4 (MQL4) 和它的前任MQL2相比更加友好, 因为通过它可以处理形状对象的坐标. 这是它不可低估的重要优势.

AutoGraf 是一个图形EA交易, 它使用了形状图形对象来创建一个方便的界面. 我们将把AutoGraf称为复合软件或者应用程序, 因为它包含了EA交易, 脚本程序以及指标.

这个应用程序比较大(87 个文件, 超过10000行代码). 因而, 只在一篇探索性的文章中考虑所有的技术解决方案是不实际的. 所以, 开发者可能感兴趣的其他材料将发布于其他的文章中, 在那里我们将详细介绍相对独立的代码段以及它们的特点.

而在这里让我们只考虑应用程序的结构以及对用户重要的特性.

 

1. 应用程序的基本属性和特征

该应用程序有如下基本功能:

1. 不使用MT4工具栏的"新订单"功能创建各种类型的订单.

2. 使用"Delete"键关闭一个或多个各种类型的订单.

3. 使用鼠标移动根据订单特征设置的水平线来修改各种类型的订单.

4. 使用工具中预先定义的算法自动修改订单.

 

2. 应用程序概览

为了了解此图形工具的价值, 最好的方法就是在计算机上安装该应用程序并练习使用它. 为此, 我们需要把归档中的全部文件移动到MetaTrader 4客户终端的同名目录中. 关闭MT4客户终端, 复制文件并重新启动终端. 然后需要编译三个文件. 我们需要这样做: 运行 MetaEditor.exe (在MT4根目录中), 依次编译以下文件: AutoGraf_expert.mq4, AutoGraf_script.mq4, 和 AutoGraf_indic.mq4. 现在, 文件应该需要附加在窗口上并开始工作了.

让我们研究一下这个应用程序的基本组件.

 

指标窗口位于屏幕底部. 它用于应用程序运行时产生消息. 在指标窗口的右下角, 有一个图标显示控制面板.

在终端窗口的右侧部分, 有打开的控制面板以及排布之上的工具. 使用此图标可以显示或者隐藏控制面板. 使用鼠标可以选择, 移动以及拖动它,这样, 控制面板就可以在终端的主窗口中显示或者隐藏.

 

3. 订单线

主窗口中显示了已开的订单和挂单. 让我们进一步详细研究订单的操作.

窗口中显示了每种类型订单的订单线 (建仓价位, 止损和获利), 线的颜色可以在EA交易的设置中定义. 交易者可以修改线的颜色. 但是线型是在应用程序中预先严格定义的, 交易者不能修改:

- 实线 - 用于已经开启的订单;
- 短划虚线 - 用于挂单;
- 点划线  - 用于任何订单的止损;
- 点虚线 - 用于任何订单的获利.

交易者可以移动除了已开订单建仓价格线之外的任何订单线, 也就是说可以修改订单参数, 删除订单或者把某参数变成零. 为此, 需要能够选择订单中的"水平线"对象, 并且可以使用鼠标把它拖动到想要的地方或者使用相应的按键删除它. 一旦交易者松开水平线(或者删除它), 将会发生以下的事件:

1. "水平线"对象将会返回到订单线的当前水平以确认其当前位置.

2. 应用程序将根据交易者的控制发送命令至服务器以修改或者删除订单.

3. 如果交易者的操作不合理或者超出允许的范围, 应用程序可以拒绝向服务器发送命令, 也可以修改交易者设定的参数并且在指标窗口中作通知.

4. 当命令在服务器上执行过后, 订单线将移动到新的位置, "水平线"也移动并覆盖订单线.

5. 如果服务器拒绝命令的执行, 应用程序将描述拒绝的原因, 而交易者的操作会被取消. 交易者的控制指令不会被重新请求和执行. 交易者可以重复对"水平线"对象进行移动或删除以重复他/她的操作.

任何订单线的组合, 包括已开订单和挂单, 可以被同时删除. 在这种情况下, 应用程序将根据如下优先级发送命令至服务器以关闭或删除订单:

1.  关闭订单.
    1.1. 关闭已开订单.
    1.2. 如果应该关闭两个反向订单(包括将要自动关闭的), 会进行反向关闭, 不论部分或者全部.
    1.3. 需要人工关闭的订单关闭仓位最重的.
    1.4. 删除挂单.
2.  修改订单.
    2.1. 修改已开订单.
    2.2. 修改挂单.
    2.3. 修改距离"目标方针"最远的订单.
    2.4. 修改仓位最重(同时需要人工修改)的订单.
3. 最新的订单拥有最高的优先级.

为了更好地理解实际情况下如何关闭多笔订单, 我们做如下练习. 开启一系列不同类型的订单, 例如买入1.5手, 卖出1手, 限价买入及限价卖出不同的手数. 然后为那些订单设置打乱顺序的止损和获利. 现在用鼠标选择买入, 卖出, 限价买入以及限价卖出的获利订单线, 然后按下"Delete"按键. 所有选择的订单和它们的参数都将被关闭或者删除. 现在您可以查看对应的*.log文件, 看程序是如何执行以及按照何种顺序执行的.

 

4. 控制面板

本程序允许使用自定义的图形工具进行交易, 这些图形工具就放置在控制面板上.
 

控制面板包含如下的元件:

1. 控制面板本身. 它是一个浅棕色的长方形. 该对象可以使用鼠标选择, 改变大小或者移动. 控制面板不能通过按"Delete"删除 - 如果您试图这样做, 程序会返回相应的警告信息. 如果您想隐藏控制面板, 使用控制图标.

如果图表上可见柱的数量改变了(例如有缩放), 控制面板保持用户设置的大小和位置. 不论控制面板是隐藏还是改变了位置, 图形工具都是可以使用的.

2. 控制线.

3. 箱线以及订单参数的尺度.

4. 手数图标和手数尺度.

5. 功能图标和功能尺度.

 

4.1. 控制线

一共有18种不同颜色的线用于决定不同类型订单的不同参数. 一个订单的参数是使用相同颜色的线来决定的.
 


在汇率上方的有色线定义的是价位高于汇率的订单, 下方的线则是价位低于汇率的订单. 在上方, 从左往右, 有止损买入, 买入以及限价卖出的订单. 下方的是限价买入, 卖出和止损卖出.

实线标记了已开订单的建仓价格, 短划线 - 挂单的建仓价格, 点划线 - 止损, 点虚线 - 获利.

控制线是用于设置挂单及其参数的. 一条控制线用于一个订单或者订单的参数.

创建订单

创建订单, 需要选择实线并使用鼠标把它拖到主窗口的某个位置. 此项操作的结果就是在当前价位水平创建了一个订单.

设置挂单

设置挂单, 需要选择短划线并把它拖到窗口中. 此项操作的结果是在交易者指定的价位创建一个挂单, 价位即是交易者放置控制线的地方.

定义订单或者挂单的参数

订单创建时预先定义的止损和获利是零, 为了定义这些订单的止损和获利水平, 需要使用点划线和点虚线. 定义的指令是相同的: 把线拖曳到窗口里需要的价位水平上.

如果在窗口中有两个或者多个名称相同的订单并且止损和获利都为零, 控制线定义的是最新那笔订单的相关水平. 即下一条控制线只作用于最新的一笔订单.

如果订单的止损获利水平不为零, 则控制线不会被应用于其中. 例如, 交易者已经画过了止损线, 订单的止损已经不为零, 新的控制线不会影响它. 交易者将会得到特定的警告通知.

控制线不能被删除.

 

4.2. 框组线

有三种相同颜色的线用于定义不同类型订单的对应特征. 相同颜色的线定义相同的订单.


 

框组内容为了设置将要创建的订单, 需要选择和移动任何一条控制线. 三条线是同一种颜色, 这样通过框组打开的订单可以被清晰地定义.

删除任何一条框组线都会清空框组, 但是它对交易没有影响.

框组订单可以通过在订单设定中选择对应的数值来进行设置.

为了查看设置的尺度, 需要选择并移动止损, 获利或者右边的图形. 在EA交易设置面板上, 预先设置的止损和获利是距离值.

需要在给定尺度内选择一个止损/获利数值的话, 需要选择并移动选定的数值. 交易者的选择将会在相应的设定旁边显示出来. 零值也是允许的.

通过在主窗口中拖曳建仓价格(OpenPrice)的中心线就可以下单. 而止损/获利线是不能进行拖曳的. 订单的建立依据框组中显示的设定.

如果想要下单, 需要使用鼠标选择中心线并把它拖曳到主窗口的任意位置. 这样就会以当前的价格水平开启一个订单.

想要创建挂单的话, 就需要选择点划线并将之拖曳到主窗口中. 这样就能在交易者定义的价位, 也就是交易者放置控制线的部位建立挂单.  

 

4.3. 决定交易手数

如果需要决定交易手数, 则需要在标尺上选择一个数值.

不论何种订单, 手数的多少是直接影响的它们在创建的时候, 但是不影响在订单修改时的手数.

选择并移动绿色数字可以显示手数标尺. 这将能显示部分手数标尺, 它的周围有一些绿色数字.

下移手数标志可以显示标尺的左边部分, 而上移则可以显示标尺的右面部分.

创建订单的交易量就可以通过在标尺上向任意方向上做移动来进行选择. 选择好的数值会以数字形式显示, 而标尺就消失了.

标尺的数值和数字符号不能被删除.

 

4.4. 选择一个功能

为了选择一个控制功能, 需要在标尺上选择一个数值.


 

如需显示功能标尺, 请选择并移动当前功能的符号(在我们上面的例子中就是Fn). 这样功能标尺显示出来了.

交易者就能够在标尺的任意方向上移动并选择数值了. 选定好的数值显示为一个符号, 标尺就消失了.

标尺的数值和功能符号不能被删除.

任何选定的功能将会停止之前功能的运行, 所有的相关设置也会被取消. 如果选定了Fn, 所有的功能都停止.

 

5. 控制工具

本程序允许通过AG功能中的控制工具进行交易.

 


 

AG功能支持以下的控制工具: 向上拖曳, 向下拖曳, 跟随趋势, 止损0买入, 止损0卖出, 限高拖曳, 限低拖曳, 点击关闭.

控制的优先级如下:


1. 关闭订单.
    1.1. 关闭已开订单.
    1.2. 挂单不会被自动关闭.
    1.3. 关闭需要关闭的仓位最重的订单.
2. 修改订单.
    2.1. 修改距离"目标区间"最远的订单.
    2.2. 修改已开订单.
    2.3. 修改挂单.
    2.4. 修改需要修改的仓位最重的订单.
    2.5. 修改订单中最新创建的订单.
3.  不自动开启订单.
 

5.1. 向上拖曳  

AG 功能中向上拖曳控制设定的目的是修改开启的订单和挂单 - 把订单的对应特征向上方拖曳(不要和MT4中称为移动止损的标准设置混淆, 它拖动的只是订单的止损, 并且只在趋势方向的正向区域内). 根据订单的类型, 订单线将在趋势的正向或反向, 被拖到用户预先定义的距离. 可以对以下订单线进行设置:

任何类型的已开订单的止损值.

任何类型的已开订单的获利值.

任何类型的挂单的建仓价格.

向下拖曳的控制设定不能用于其它订单线.

该设定是与称为"向下拖曳"和"跟随趋势"的设定互斥的.

如需设置选择的订单线, 只要使用鼠标选择并拖动设置符号到线上即可. 如果交易者根据设置选择了此线, 它的符号将"滑动"到线上, 跟随订单一起直到订单关闭或者设置符号被删除.

删除设置符号将会取消向上拖曳的订单线.

设置符号旁边显示的数字意思是订单线跟随(或者远离)的距离.

如果订单线因为拖曳而改变了它距离当前价位的位置, 作为交易者对其操作控制的结果, 显示距离的数字会根据交易者的设置而改变.

(例如, 当我们为买入订单设置止损时:

- 如果交易者把订单线下移, 距离会延长;

- 如果交易者把订单线上移, 距离将保持不变.)

垂直移动控制符号会直接改变订单线跟随的距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

如果将要修改的订单线达到了限高拖曳设置的价位, 向上拖曳和限高拖曳I会一起被自动取消.

 

5.2. 向下拖曳

在AG功能中被称为向下拖曳的控制设置用于修改已经开启的订单或者挂单 - 把订单的对应特征向下方拖曳(不要把它和MT4中称为移动止损的标准设置混淆, 它只是拖曳订单的止损, 并且只在趋势方向的正方). 根据订单的类型, 订单线将在趋势的正向或反向, 被拖到用户预先定义的距离. 可以对以下订单线进行设置:

任何类型的已开订单的止损值.

任何类型的已开订单的获利值.

任何类型的挂单的建仓价格.

向下拖曳的控制设定不能用于其它订单线.

此设置与称为"向上拖曳"和"跟随趋势"的设置是互斥的.

如需设置选择的订单线, 只要使用鼠标选择并拖动设置符号到线上即可. 如果交易者根据设置选择了此线, 它的符号将"滑动"到线上, 跟随订单一起直到订单关闭或者设置符号被删除.

删除设置符号将会取消向下拖曳的订单线.

设置符号旁边显示的数字意思是订单线跟随(或者远离)的距离.

如果订单线因为拖曳而改变了它距离当前价位的位置, 作为交易者对其操作控制的结果, 显示距离的数字会根据交易者的设置而改变.

(例如, 当设置卖出订单的止损时:

- 如果交易者把订单线下移, 距离还是保持不变;

- 如果交易者把订单线上移, 距离将被延伸.)

垂直移动控制符号会直接改变订单线跟随的距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

如果将要修改的订单线达到了限低拖曳预设的价位, 向下拖曳和限低拖曳都会被自动取消.

 

5.3. 跟随趋势

AG功能中的跟随趋势控制是用于修改已经开启的订单或者挂单的 - 把订单的对应特征保持在"跟随趋势"的位置. 订单线与当前汇率的距离是用户预先设置好的. 如果订单线距离当前汇率的改变超过了交易者在EA交易设定中预先设定的值, 订单线就会被修改可以在以下订单线中设置跟随趋势:

任何类型的已开订单的止损值.

任何类型的已开订单的获利值.

任何类型的挂单的建仓价格.

向下拖曳的控制设定不能用于其它订单线.

此处设定是与称为"向上拖曳"和"向下拖曳"的设置互斥的.

如需设置选择的订单线, 只要使用鼠标选择并拖动设置符号到线上即可. 如果交易者根据设置选择了此线, 它的符号将"滑动"到线上, 跟随订单一起直到订单关闭或者设置符号被删除.

删除设置符号也会删除"跟随趋势"的订单线设定.

在设置符号旁边的数字表示订单线与趋势线之间的距离.

如果订单线不是因为交易者拖曳, 而是因为其他操作而改变了位置, 显示距离的数字不会发生改变. 在这种情况下, 执行设置的程序会根据交易者预先设定的距离下命令到服务器修改订单线.

垂直移动控制符号会直接改变订单线跟随的距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

 

54. 止损0买入 

AG功能中的止损0买入设定是用于修改买入订单的止损的. 止损0买入的控制设定不能用于其他订单线.

如果汇率等于或者高于止损0买入的设定, 订单线将会被修改. 买入订单的止损订单线会被自动放在订单的建仓价格处.

止损0买入的控制设定不与其他设定互斥.

如需设置已选订单线, 只要使用鼠标选择并拖动设置图标至订单线上. 如果根据设置选择了订单线, 设置图标会位于订单线上方, 距离是EA交易设定中Tjaga值. 它会跟随订单直到关闭或者设置被删除或做修改.

如果根据止损0买入的设置修改买入订单的止损, 设置会被取消, 设置图标会被删除.

删除设置图标将取消止损0买入的设置.

在设置图标旁边的数字代表高于订单建仓价格的点数, 它不能低于交易中心设置的最小距离.

垂直移动控制符号会直接改变设置执行距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

止损0买入可以与向上拖曳的设置同时使用. 止损0买入在执行后可以被取消而向上拖曳设置可以继续保持.

不推荐把止损0买入设置和跟随趋势设置一起使用. 当这些设置一起使用时, 止损0买入的设置会在执行后取消, 而跟随趋势设置会根据自身设定的距离重新设置买入订单的止损.

 

5.5. 止损0卖出 

AG功能中的止损0卖出控制设置是为了修改卖出订单的止损. 止损0卖出的设定不能用于其他的订单线.

如果汇率等于或高于止损0卖出的设置, 订单线将会被修改. 卖出订单的止损订单线将自动置于订单建仓价格的上方.

止损0卖出的控制设定不与其他设定互斥.


如需设置已选订单线, 只要使用鼠标选择并拖动设置图标至订单线上. 如果交易者根据设置选择了订单线, 订单线下方会根据EA交易设定中的Tjaga值出现设置的图标, 之后会跟随订单直到关闭或者设定被删除或根据设定修改..

如果根据止损0卖出的订单止损被改变, 设置就会被取消, 而设置图标会被删除.


删除了设置图标也就会取消止损0卖出.

在设置图标旁边的数字表明低于订单建仓价格的点数, 它不能小于交易中心要求的最小点数.

垂直移动控制符号会直接改变设置执行距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

止损0卖出可以与向下拖曳设定同时使用. 在执行后如果止损0卖出被取消, 向下拖曳设定将继续保持.

不推荐把止损0卖出与跟随趋势设定一起使用. 当这些设定一起使用时, 在止损0卖出执行并被取消后, 跟随趋势设定会重新把止损设回到跟随趋势设定中的止损位.

5.6. 限高拖曳

AG功能中的限高拖曳设置用于在使用向上拖曳或跟随趋势时作为修改的限制.

该设定只能用于使用了向上拖曳或者跟随趋势设置的订单线:

任何类型的已开订单的止损值.

任何类型的已开订单的获利值.

任何类型的挂单的建仓价格.

限高拖曳控制设置不能用于其他的订单线.

限高拖曳控制设置也不能修改订单.

如需设置已选订单线, 只要使用鼠标选择并拖动设置图标至订单线上. 如果交易者根据设置选择了订单线, 根据EA交易设置中的Tjaga值, 将会在订单线相应距离下方出现设置图标, 并且它会一直跟随订单直到订单关闭或者限高拖曳(或向上拖曳, 或跟随趋势)设置被删除, 或者是根据设定被修改.

当放置设定时, 限高拖曳设置图标将会根据设定对应订单线的颜色而改变自身颜色.

如果修改订单等于或者超过了限高拖曳设置的汇率, 将会取消限高拖曳的设置, 而一起的向上拖曳设置及其设置图标也会被一并删除.

如果修改了跟随趋势的水平, 达到或者超过了限高拖曳的设置, 将会禁止根据跟随趋势设置对订单的修改, 而不会取消限高拖曳的设置, 也不会删除一起的跟随趋势或者相关图标.

删除图标会取消限高拖曳的设定.

在设置符号旁边的数字表明订单线高于当前汇率的点数, 它被严格限定为1, 而和交易中心要求的距离限制没有关系.

垂直移动控制符号会直接改变设置执行距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

 

5.7. 限低拖曳

AG功能中的限低拖曳的目的是对使用了向下拖曳或者跟随趋势设定的订单线做限制.

该设定可以用于进行了向下拖曳或者跟随趋势设定的订单线:

任何类型的已开订单的止损值.

任何类型的已开订单的获利值.

任何类型的挂单的建仓价格.

限低拖曳的控制设置不能用于其他订单线.

限低拖曳的控制不能修改订单.

如需设置已选订单线, 只要使用鼠标选择并拖动设置图标至订单线上. 如果交易者根据设定选择了订单线, 根据EA交易设定中的Tjaga值, 会在订单线下方的相应距离处出现设置图标, 它会一直跟随订单直到订单关闭, 或者限低拖曳(或向下拖曳, 或跟随趋势)设定被删除, 或者根据设置发生修改.


在进行设置时, 限低拖曳的图标会根据设置订单线的颜色而改变自身的颜色.

如果修改订单的水平等于或者低于限低拖曳的设置, 将会取消限低拖曳, 以及和它一起的向下拖曳图标和设置.

如果修改跟随趋势设置的订单水平等于或者低于限低拖曳的设置, 将会禁止根据跟随趋势设置进行的订单修改, 而不会取消限低拖曳的设置, 也不会删除一起的跟随趋势设置或者图标.

删除了图标也就取消了限低拖曳的设置.

设置符号旁边的数字代表了低于订单线当前汇率的点数, 它被严格限制等于1, 而不是根据交易中心设置的最小距离.

垂直移动控制符号会直接改变设置执行距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

5.8. 接触关闭  

AG功能中的接触关闭设置用于关闭买入或者卖出订单. 该设置只能够应用于买入/卖出订单的建仓价格订单线. 该设置不能用于其他订单线.

如果当前汇率等于或者高于(对于卖出订单-低于)接触关闭中的设置水平, 订单就会被关闭. 

接触关闭的设置不和其他设置互斥.

如需应用此设置, 只需使用鼠标选择并拖曳设置图标并放置于订单的建仓价格订单线上. 如果交易者选择了订单线并设置, 将会根据在EA交易设置中的Tjaga值, 在订单线的上方(对于卖出订单-下方)出现设置的图标, 它会一直跟随订单直到订单关闭, 或者设置被删除.

在进行设置时, 限低拖曳的图标会根据设置订单线的颜色而改变自身的颜色.

执行了触控关闭设定将会取消设定并删除设定图标.

删除图标也会取消接触关闭的设置.

在设置符号旁边的数字是指订单线建仓价格上方的点数, 它被严格规定为1, 而不是交易中心要求的最小距离限制.

垂直移动控制符号会直接改变设置执行距离.

水平移动控制符号不会改变控制设置. 这种操作是允许的, 可以使得交易者把符号放在方便的地方(例如, 在趋势线终点).

显示距离的数字不能被移动也不会被影响.

 

6. 应用程序细节

当选择图形对象的时候要小心注意. 因为应用程序中的细节, 以及一些控制设置符号距离订单水平线很近. 一不小心, 所选的图形对象可能并非交易者的本意. 这些图形对象位置的改变(或者删除)可能产生意外的结果.

如果你选择对象有困难, 可以使用主窗口中的对象列表(按F3).

同时推荐使用声音. 在初始阶段, 可能会认为声音没有用. 但是使用声音会让获得交易信息更加方便.

 

7. 怎样使用

本文所提供的应用程序版本是作为免费软件发布的, 没有任何限制.

您可以在附件中找到程序的源代码, 使用手册以及其他一些我认为有用的文件.

本应用程序的扩展版本正在开发过程中. 新版本的有关信息可以在作者网站上找到:  http://AutoGraf.dp.ua/ .