下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2014.01.24 08:22
EA

"MCM 控制面板" 用于多币种 EA和指标 - MetaTrader 5EA

| Chinese English Русский Español Deutsch 日本語 Português

显示:
1088
等级:
投票: 28

MQL5 语言的一个优势是可以使用多币种指标和 EA。参见 Multicurrency OnTickMarketWatch tick event handler (多币种即时价格事件处理器) 在 MQL5 的代码基地

使用概念, 在脚本中提出不是很方便。例如, 在许多事件情况下, 这有 可能导致事件队列溢出。

这是来自 MQL5 参考 的注解:

客户端加入出现的事件至事件队列。因此, 事件按照它们收到的顺序依次处理。这里有一个 NewTick 事件是例外。如果队列已经有一个事件或事件正在被处理, 则新的 NewTick 事件不被排队。

事件队列的大小是有限的。在队列溢出时, 老的事件尚未处理即被清除, 以便接收新事件。因此, 建议编写高效的事件处理程序, 不推荐使用无限循环 (有一个例外脚本, 但是只处理 Start 事件)。

此外, 有时, 它十分有必要仅在新的柱线已经出现时, 再执行指标值的重新计算。其它情况, 若您需要在 "运行当中" 禁止多币种 EA 中的某些符号交易, 改变符号时间帧或者其它的什么事情。

这个 "其它的什么事情" 也许是外部数据。这个 MCM (多币种模式) 控制面板基于这个思路。

顺便提一下, 它也可以在单一货币交易中使用。

这个 "MCM 控制面板" (参赛版本) 特性:

它有最小函数数量, 需要在 EA 中使用多币种模式以及指标:

  • 添加/删除符号用于交易及分析。
  • 它允许跟踪任意符号和周期的 "新即时价格" 以及 "新柱线" 事件。
  • 所有设置可在 "运行当中" 被改变而无需重启 EA 或指标。 
  • 这个面板可以与我们的 EA 及 指标一起使用。
  • 此外, 它可以包含您的代码, 它将会加载它们。
  • 这是透明的。您无需加入 MCM 控制面板代码到您的 EA 或指标里。

使用 "MCM 控制面板" 您可以加入您自己的特性。参看以下详情。

保存/恢复控制面板设置在这个版本里不支持。


开始 MCM 控制面板

启动 "MCM 控制面板" 可以通过几种方式完成: 

  • 挂载 "iControl panel MCM" 至图标。
  • 启动 "scControl panel MCM" 脚本。这个脚本加载 "iControl panel MCM" 指标。
  • 从您的 EA 或指标加载面板。参见 "exControl panel MCM" 详情。

第三种情况, 面板将与我们的 EA 或指标一起加载至图表。

您的 EA 应该有 OnChartEvent() 事件处理器来处理 MCM 控制面板事件。

接口

用户接口很简单, 它以一个菜单形式实现。菜单的大小和颜色可以通过输入参数配置。

它看上去像以下这样:


 

设计

面板用来配置多币种 EA 和指标的事件。

面板的大小和位置依据图表大小和字体大小 (省缺在输入参数中)。为释放工作区, 面板可最小化。


 

面板的大小可以通过改变输入参数的字体大小 (字体大小=10 省缺) 来改变:

 

您可以设置您喜欢的任意颜色。

例如, 粉色方案:


这个 EMO 方案:


 

 

容易使用

该菜单直观, 很容易使用。

这个 "MCM 控制面板" 按钮包含附加特征 (未包含在这个版本中):


使用 "图表" 按钮您可以容易地改变符号和时间帧, 仅仅选择它:


 

这个 "事件" 允许您 "开启/禁止" 一些符号及指定需要的事件的 "运行当中" (无需重启 EA 或 指标) 。这些事件可以在 EA 或指标的 OnChartEvent() 函数内部处理。符号菜单仅包含符号, 选自 "市场观察"。您可以组合任意事件, 所有的它们均会被处理。

例如, 无需担心符号在时间帧内出现新的即时价或柱线, 面板引擎将会发送事件:


  

此处是 "帮助":


 

了解它是如何实现

我的方案以经发表在 Multicurrency OnTickMarketWatch tick event handler (多币种事件处理), 但面板有一些附加特征:

  • "MCM 控制面板 MCM" 提供接口, 未在客户终端直接实现。它允许您通过 OnChartEvent() 事件处理器使用这个多币种代码。其它特征是可以 "运行当中" 改变设置。
  • 为了生成 OnChartEvent() 事件, MCM 控制面板的事件处理器使用它自己的 "代理" (指标, 由 MCM 控制面板在一些符号上启动), 提供用于多币种交易的信号。
  • 面板可以包含在 EA 或 指标中。
  • 这个 MCM 控制面板对于 MQL5 程序员提供了新的可能。
  • IMHO, 面板是 EA 和指标新结构的一个例子。我将之后提供一些例子。

有关事件和报警的信息

面板有一个状态条来显示事件。


安装 MCM 控制面板

解压缩文件 mcm_control_panel.zip 至客户端文件夹。当以下这些文件出现:

  • /mql5/experts/exControl panel MCM.mq5 - EA 例子;
  • /mql5/scripts/scControl panel MCM.mq5  - 脚本例子;
  • /mql5/indicators/iControl panel MCM.mq5 - 指标, "MCM 控制面板" 主引擎;
  • /mql5/indicators/Spy Control panel MCM.mq5 - 指标, "MCM 控制面板" 代理
  • /mql5/include/Control panel MCM.mqh - 一组 "MCM 控制面板" 类和函数的集合。

下一步, 编译指标, 脚本和 EA。


启动 MCM 控制面板

启动 MCM 控制面板, 挂载 iControl panel MCM.mq5 指标至任意图表。

面板可以启动自 EA, 仅需挂载 "exControl panel MCM" EA 至图表:


 

作为多币种例子, 我编写了 MultiTrend EA。这个指标绘制 USD 趋势, 基于分析 4 个货币对:

这是代码:

//+------------------------------------------------------------------+ 
//|                                                   MultiTrend.mq5 | 
//|                                            Copyright 2010, Lizar | 
//|                            https://www.mql5.com/ru/users/Lizar | 
//+------------------------------------------------------------------+ 
#define VERSION       "1.00 Build 2 (09 Dec 2010)" 
#property copyright   "Copyright 2010, Lizar"
#property link        "https://www.mql5.com/ru/users/Lizar"
#property version     VERSION
#property description "这个 EA 使用 MCM 控制面板"
input color bg_color=Gray;        // 菜单颜色 
input color font_color=Gainsboro; // 文本颜色 
input color select_color=Yellow// 选择文本颜色 
input int font_size=10;          // 字体大小 
#include <Control panel MCM.mqh> //<--- 包含文件 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {    //--- MCM 控制面板初始化.     
//--- 没必要设置颜色, 若未指定, 省缺使用颜色是红色.      
   InitControlPanelMCM(bg_color,font_color,select_color,font_size);
//---    
  return(0);   
  } 
//+------------------------------------------------------------------+ 
//| Expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason)
  {
   DeinitControlPanelMCM();   //<--- MCM 控制面板卸载  
  }
//+------------------------------------------------------------------+ 
//| OnChartEvent event handler.                                      | 
//| 参见 MQL5 参考详情.                                  | 
//| 可使用 MCM 控制面板于多币种交易     | 
//+------------------------------------------------------------------+ 
void OnChartEvent(const int id, // 事件标示:                                      
                  // 若 id-CHARTEVENT_CUSTOM==0 - 初始化事件 (当 prev_calculated==0)
                  // 若 id-CHARTEVENT_CUSTOM!=0 - 在 "市场观察" 窗口中的符号索引   
                  const long&   lparam, // 时间帧 
                  const double& dparam, // 价格    
                  const string& sparam  // 符号 
                  )
  {
   if(id>=CHARTEVENT_CUSTOM)
     {
      Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -> id=", id-CHARTEVENT_CUSTOM,
                         ":  ",sparam," ",EventDescription(lparam)," price=",dparam);
     }
  }
//+------------------------------------------------------------------+ 

函数 OnChartEvent() 参数。

控制面板生成自定义事件。这些事件可以在 EA 或指标的 OnChartEvent() 事件处理器中被处理。

输入参数:

  • id - 事件标识:
          若 id-CHARTEVENT_CUSTOM !=0 - 它等于在 "市场观察" 窗口中的符号索引;
  • lparam  -  事件旗帜. 参见在控制面板 MCM.mqh 中的 ENUM_CHART_EVENT_SYMBOL 枚举。
  • dparam -  即时价格或在一些时间帧的新柱线开盘价格。
  • sparam -  符号名称

在 MCM 控制面板中支持的事件列表

使用 lparam 参数, 控制面板可以发送至多 64 个不同的符号自定义事件。在此版本中支持以下事件: 

  • "初始化" 事件 (初始化);
  • "新即时价格" 事件 (即时价格);
  • 在 M1 图表上 (M1) 的 "新柱线" 事件;
  • 在 M2 图表上 (M2) 的 "新柱线" 事件;
  • 在 M3 图表上 (M3) 的 "新柱线" 事件;
  • 在 M4 图表上 (M4) 的 "新柱线" 事件;
  • 在 M5 图表上 (M5) 的 "新柱线" 事件;
  • 在 M6 图表上 (M6) 的 "新柱线" 事件;
  • 在 M10 图表上 (M10) 的 "新柱线" 事件;
  • 在 M12 图表上 (M12) 的 "新柱线" 事件;
  • 在 M15 图表上 (M15) 的 "新柱线" 事件;
  • 在 M20 图表上 (M20) 的 "新柱线" 事件;
  • 在 M30 图表上 (M30) 的 "新柱线" 事件;
  • 在 H1 图表上 (H1) 的 "新柱线" 事件;
  • 在 H2 图表上 (H2) 的 "新柱线" 事件;
  • 在 H3 图表上 (H3) 的 "新柱线" 事件;
  • 在 H4 图表上 (H4) 的 "新柱线" 事件;
  • 在 H6 图表上 (H6) 的 "新柱线" 事件;
  • 在 H8 图表上 (H8) 的 "新柱线" 事件;
  • 在 H12 图表上 (H12) 的 "新柱线" 事件;
  • 在日线图表上 (D1) 的 "新柱线" 事件;
  • 在周线图表上 (W1) 的 "新柱线" 事件;
  • 在月线图表上 (MN1) 的 "新柱线" 事件; 

事件描述, 由 EventDescription() 返回, 在括号中表示 (初始化, 即时价, Mxx 等)。这个 EventDescription 函数可以在控制面板 MCM.mqh (ENUM_CHART_EVENT_SYMBOL 枚举以下) 发现。

当 prev_calculated=0, "初始化" 事件生成, 它可以用作数据准备, 例如, 您可重计算指标数值。


设置事件

设置需要的事件, 点击 "事件" 按钮, 选择符号及事件类型。选择的事件显示为黄色 (或指标输入参数中的选择颜色)。您可以选择一个或多个事件, 所有的它们均可由我们的多币种 EA 处理。令更改有效, 点击 "允许/禁止事件" 按钮。

所有必要的符号可通过相同的步骤完成。


 

此处是来自 "专家" 标签的日志: 


 

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/215

20/200 点 - 简单可盈利 EA 20/200 点 - 简单可盈利 EA

它有简单的代码和交易规则。它没有使用任何马丁尔格资金管理策略。

CIniFile 类 CIniFile 类

这个类提供存取 Windows *.ini 文件的方法。

FAT 面板 FAT 面板

这个面板设计用于 "Best Graphic Panel in MQL5 (最佳 MQL5 图形面板)" 大赛。这个图形面板允许自动手工交易。它有许多功能, 包括可视化交易策略构造。

eInTradePanel eInTradePanel

这个 eInTradePanel 是一款用于手工交易的面板, 它有一些有用的功能。它需要最小的图表空间。