English Русский Español Deutsch 日本語 Português
交易者的工具箱: 拖动交易库(Drag Trade Library)

交易者的工具箱: 拖动交易库(Drag Trade Library)

MetaTrader 4示例 | 11 四月 2016, 12:27
3 120 0
TheXpert
TheXpert

简介

在开发的时候,已经存在一些产品,它们在一定程度上实现了该库提供的功能性或类似功能。 我无法说这个库比它们好还是坏。 该库在功能性上逊于它们当中的一些,例如,其便利性不如著名的 Autograph 等。 但是, 拖动交易库(Drag Trade Library) 有自己的特点,很有可能大受欢迎。



1. 开发的目的

初始的计划是创建一个 Expert Advisor,能够利用鼠标和控制对象在图表上直接交易和处理订单,同时保留易用性和简约的界面。 也就是说,该 Expert Advisor 的一个重要特点是完全使用终端的源语言开发,不可能包含恶意代码,因此对用户来说是安全的。 另外,该 Expert Advisor 最初打算作为免费软件。

这个项目上的工作导致了该库的产生,它包含了上述功能并可以轻松集成到几乎任何 EA。 另外,库代码包含了很多有用的函数,可以在库以外的范围使用。



2. 结构

库的功能可以分为四块:

  1. 交易块
  2. 信息块
  3. 订单处理块
  4. 设置块

图 1 库的功能

EA 的功能显示基于跟块划分相同的原则——用户界面分为 3 个独立块,根据运行需要,可以通过启用和禁用所需的块来联合和独立使用。 此外,这种方法可以在处理不必要的逻辑块时避免资源浪费或者在禁用功能块时占用最少的资源。 所有的功能块默认为禁用。


2.1. 启用/禁用块的原则

所有的块绘制和处理函数均位于 Expert Advisor 内。 但是,信息和大多数控制和信息对象并非在主工具窗口绘制。 绘制空间由同时用于启用和禁用功能块的伪指标提供。 这意味着如果图表上出现了某指标,则 Expert Advisor 的相应功能块就会启用和运行。

这里没有使用这种指标。 它们的唯一用途是提供绘制空间。

图 2 辅助指标

指标的使用上有一些限制。 任何外部指标都可以拖动到伪指标窗口,但不能反过来,因为窗口的出现由伪指标名称确定,根本不能启用相应的功能块。



3. 用户界面

3.1. Expert Advisor 设置

将设置从库中移出,形成单独的功能块。 这使我们可以选出整个功能块并放在库内,并在 Expert Advisor 运行前和运行过程中从外部进行设置。 另外,这些设置可以分为独立的逻辑块,而无需在规定上折衷。

过程本身包含了在所需的图表上应用适当的脚本。

现在,有 3 个设置脚本:

  • DragTrade_CommentsSettings.mq4 – 注释设置(在交易子窗口显示的记录)。
  • DragTrade_ObjectsSettings.mq4 – 用户界面的一般设置——控制和信息对象的样式。
  • DragTrade_TradeSettings.mq4 – 库交易设置。

脚本提供了对每项属性的描述,所以弄清楚如何对它们进行设置应该没有问题。

该功能的实现是基于终端全局变量的使用,用于存储设置。 这对其使用产生了一些限制——无法用这种方式传递行,因为传输信息的最大大小受到限制,等于 double 类型,即 8 个字节。

参见如下设置 Expert Advisor 属性的示例。 对于正在运行的 Expert Advisor,注释和对象输出的设置被更改:

为了在测试程序中自由测试策略而无需担心重置或更改在线交易的参数,在线和测试模式使用不同的参数。 其中一个的参数设置不会影响另一个。

因此,如果你想在测试程序中更改默认参数,应该使用跟测试模式相似的脚本:

  • DragTrade_TesterCommentsSettings.mq4 – 注释设置(显示在交易子窗口的记录)。
  • DragTrade_TesterObjectsSettings.mq4 – 用户界面的一般设置——控制和信息对象的样式。
  • DragTrade_TesterTradeSettings.mq4 – 库交易设置。
3.2. 功能

这样,界面分为了 3 个可以禁用的独立区域:

  • DragTrade_Infobar (信息块)
  • DragTrade_OrdersBar (订单处理块)
  • DragTrade_Toolbar (交易块)

整体呈现如下:


我们对其中的每一个进行仔细查看。

3.2.1. 信息面板

信息面板是显示信息的区域。 这是功能中最不复杂的部分。 它显示了一般的账户或证券信息以及当前库的设置。

图 3 信息面板

可以轻松扩展显示的信息,但需要对库代码进行修改。

如果这没有让你望而却步,该功能由以下两个函数表示:空隙函数 ClearInformation() 和空隙函数 DrawInformation()

3.2.2. 订单面板

该面板显示了当前(已打开)证券订单的信息并包含了处理它们的控件。

图 4 订单面板

启用该面板可以进行:

  • 从订单列表关闭对某货币对下的任意订单(以下根据 EA 幻数设置),包含市场和挂单。
  • 关闭所有买入订单
  • 关闭所有卖出订单
  • 删除所有挂单
  • 删除和关闭所有订单

下面的视频提供了该面板功能的图形展示:

3.2.3. 交易面板

该面板用于显示交易功能。 这是最重要也是必不可少的面板,因为它包含了库的主要功能。 启用该面板可以让你下单并直接在图表上使用某些控件对其进行处理。

图 5 交易面板

启用该面板可以进行:

  • 下单和关闭市场订单。
  • 打开挂单,无论是止损订单还是限价订单。 由于我还没有找到对挂单设置止损水平的足够好的方式,所以目前仍然缺失,并且只能使用内置的终端功能(即订单修改窗口)进行设置。
  • 删除挂单
  • 更改订单的止损水平。
  • 更改限价和止损订单的触发价格。

市场订单的下单方式如下:

  • 使用价格指针设置未来订单的止损价格
  • 叠加“Open Market Order”控件

只要将任何一个止损水平拖动到价格的另一侧,市场订单就会关闭。

下面的视频显示了处理市场订单的示例。

处理买入订单:




处理卖出订单:




挂单的下单方式如下:

  • 使用价格指针设置未来订单的触发价格
  • 如果你想下止损订单则叠加“Open Stop Order”控件,如果你想下限价订单则叠加“Open Limit Order”控件。

只要将订单行拖动到价格的另一侧,挂单就会关闭。

下面的视频显示了处理挂单的示例。

处理止损订单:




处理限价订单:


4. 集成到 Expert Advisor

终于来到了最有趣的部分。

该部分实际上非常简单。 由于在集成时只有必要的最低数量的设置传递到库,集成过程得到极大的简化,剩下的设置由外部脚本实现。

可以通过一个将库转为 Expert Advisor 的壳函数,作为最简单的 Expert Advisor 示例。 显示如下:

//+------------------------------------------------------------------+
//|                                      DragTrade_Example_v_1.0.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, TheXpert"
#property link      "theforexpert@gmail.com"

extern int      Magic          = 1111;
extern int      EAMagic        = 1234;
extern int      TimesToRepeat  = 3;
extern int      Slippage       = 3;

#include <DragTrade_v_1.0/DragTradeLib_v_1.0.mqh>

bool Testing;

int init()
{
   Testing = IsTesting();
   DragTrade_Init(Magic, EAMagic, TimesToRepeat, Slippage, "Drag Trade Example");

   Comment_("Test Example of using Drag Trade Library");

   return(0);
}

int deinit()
{
   DragTrade_Deinit();
   return(0);
}

int start()
{
   DragTrade_Start();
   
   return(0);
}

上面的代码可以用作使用鼠标进行交易的现成 Expert Advisor。

代码中的事件使用每个新的价格变动进行处理。

库集成的要点:

  • init deinit 函数 必不可少,须出现在 Expert Advisor 中。
  • 包含库的头文件 DragTradeLib_v_1.mqh ,并确保库的组件都在正确的位置。
  • 下面的库函数应该在相应的 EA 函数中调用:
  1. DragTrade_Init
  2. DragTrade_Deinit
  3. DragTrade_Start

本文随附的 DragTrade_Init 函数如下:

   void DragTrade_Init(int magic, int eaMagic, int timesToRepeat, int slippage, string ordersComment = "");

我们仔细查看一下要传递的参数:

  • int magic – 库使用的幻数。 利用库下的订单会带有这个数字。 如果传递的值等于 -1,订单将在幻数为 0 时打开,按照幻数进行的过滤选项在显示时将不可用。
  • int eaMagic –策略的幻数。 引入该参数后,执行的策略可以对自动和手动下的单进行区分。 如果你想要策略能够“看到”这些订单,可以设置相同的幻数或实现两个不同幻数的可追踪性。 如果值等于 -1,就不会使用额外的幻数。
  • int timesToRepeat – 交易参数。 如果错误原因允许立即重试,该参数为尝试下单的次数。
  • int slippage – 交易参数。 滑点数。
  • string ordersComment – 使用库所下订单的注释。

如果你想快速执行命令,可以对 EA 的 start 函数进行循环:

int start()
{
   while (!IsStopped())
   {
      DragTrade_Start();
      Sleep(200);
   }
   return(0);
}

但是,无法在测试程序中测试这种 Expert Advisor,因为它会冻结。

通过为测试程序的不同行为附加条件,可以找到解决方法:

int start()
{
   if (Testing)
   {
      DragTrade_Start();
   }
   else
   {
      while (!IsStopped())
      {
         RefreshRates();
         
         DragTrade_Start();
         Sleep(200);
      }
   }
   
   return(0);
}

本文随附的标准程序包包含了这个特别简单的 Expert Advisor。

另外,程序包还包含了具有集成的库和库交易函数的标准 MACD 样本 Expert Advisor。

除了集成所需的函数之外, DragTradeLib_v_1.0.mqh 文件提供了一整套函数,在执行交易策略时可能会非常有用。该库使用了这些函数,你也可以在执行代码时使用。



5. 库的安装

安装很简单——你需要将附件解压缩到终端文件夹,完成后重新启动终端,这样可执行文件就会显示在终端的可用文件列表中。



6. 许可

/* =============================================================================================== */
/* Copyright (c) 2010 Andrey Nikolaevich Trukhanovich (aka TheXpert)                               */
/*                                                                                                 */
/* Permission is hereby granted, free of charge, to any person obtaining a copy of this software   */
/* and associated documentation files (the "Software"),                                            */
/* to deal in the Software without restriction, including without limitation the rights            */
/* to use, copy, modify, merge, publish, distribute,                                               */
/* sublicense, and/or sell copies of the Software, and to permit persons                           */
/* to whom the Software is furnished to do so, subject to the following conditions:                */
/*                                                                                                 */
/*                                                                                                 */
/* The above copyright notice and this permission notice shall be included                         */
/* in all copies or substantial portions of the Software.                                          */
/*                                                                                                 */
/* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS                        */
/* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                     */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR          */
/* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                                     */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR         */
/* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                   */
/* =============================================================================================== */


总结

该库已经在真实账户上进行了测试,证明是一个有用、可靠和稳定的工具。

我想再次对 Viktor Khabibulaevich Rustamov 致以深深的感谢。 他是创建这个库的理念发起者,同时也是该创意实现过程中的测试者并提供了宝贵的建议。

代码量比较大,因此很有可能出现一些小错误和失误。 如果你能及时进行通知,我将不胜感谢。

我会尝试提供适当的(无法保证)代码维护。 对于其他人在许可范围内的项目深入开发,我会大力支持。 关于库的任何评论和建议都会在未来版本中尽可能予以考虑。

祝好运以及交易顺利!


本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/1354

附加的文件 |
Mac OS 上的 MetaTrader 4 Mac OS 上的 MetaTrader 4
Apple 产品已经变得非常流行。 MetaQuotes Software Corp. 密切关注着 IT 行业的进展,已经为基于 iOS 的设备发布了专门的移动应用程序,包括适用于 iPhone 的 MetaTrader 4 和适用于 iPhone 的 MetaTrader 5。 在 MQL4.community 论坛,很多主题是关于寻求在 Mac OS 操作系统下运行 MetaTrader 4 的解决方法。 本文中,你将学会如何在 Apple 的流行操作系统上使用 MetaTrader 4。
合成柱 - 显示价格图形信息的新视角 合成柱 - 显示价格图形信息的新视角
使用柱和日本蜡烛图显示价格信息的传统方法的主要缺点是受到时间周期的限制。 这些方法在创建的时候可能是最好的,但如今市场变动有时过于迅速,用这种方式在图表上显示的价格不能及时反映新的变动。 本文所提到的价格图表显示方法没有这个缺点,并且提供了非常熟悉的布局。
深入了解累积/派发以及它的作用 深入了解累积/派发以及它的作用
累积/派发 (A/D) 指标有一个有趣的功能 - 突破此指标图表中绘制的趋势线暗示着一定概率上会即将突破价格图表中的趋势线。本文对于那些刚开始在 MQL4 中进行编程的人来说很有帮助和趣味性。为此,我尝试用易于理解的方式呈现信息并使用最简单的代码结构。
Chuvashov 的叉子机械交易系统 Chuvashov 的叉子机械交易系统
本文对基于 Stanislav Chuvashov 提出的技术的机械交易系统的方法和程序代码进行了简单的介绍,希望读者予以注意。 本文所探讨的市场分析跟 Thomas DeMark 以分形作为构建趋势线的参考点为最近的时间间隔绘制趋势线的方法有一些共同之处。