首页 系统交易 帖子

MCM控制面板:多货币EA与指标的最佳选择

附件
215.zip (19.4 KB, 下载 0次)

在MQL5语言中,多货币指标和专家顾问(EA)的使用是一个显著的优势。您可以查看 多货币OnTickMarketWatch事件处理器,它提供了MQL5的相关示例。

不过,现有脚本中提出的概念使用起来并不是很方便。在处理多个事件时,可能会导致事件队列溢出。

以下是MQL5参考文献的说明:

客户端终端会将出现的事件添加到事件队列中。因此,事件会按照接收顺序一个接一个地进行处理。对于新Tick事件有个例外:如果队列中已经存在此事件或该事件正在处理,新产生的Tick事件将不会被加入队列。

事件队列的大小是有限的。当队列溢出时,旧事件将被移除而不处理,以便允许新事件的接收。因此,建议编写高效的事件处理程序,而不建议使用无限循环(对仅处理Start事件的脚本有例外)。

此外,有时需要在新K线出现时才对指标的值进行重新计算。您可能还需要在多货币EA中“实时”禁用某个符号的交易,或者更改某个符号的时间框架等操作。

这里的“其他操作”可能涉及外部数据,而我们的MCM(多货币模式)控制面板就是基于这个理念设计的。

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

MCM控制面板(竞赛版)的特点:

它具有使用多货币模式所需的最少功能,具体包括:

  • 添加/移除交易和分析的符号。
  • 跟踪任何符号和周期的“新Tick”和“新K线”事件。
  • 所有设置都可以在不重启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()函数中处理。符号菜单仅包含从“市场观察”中选择的符号。您可以组合任何事件,所有事件都将被处理。

例如,您无需担心在时间框架上出现新Tick/K线,面板引擎将发送事件:


  

这里是“帮助”:


 

知识与其实现

我的解决方案已发布在 多货币OnTickMarketWatch事件处理器中,但此面板具有一些额外功能:

  • “MCM控制面板MCM”提供了客户端终端中未直接实现的接口。它允许您通过OnChartEvent()事件处理程序使用多货币模式。另一个特点是可以“实时”更改设置。
  • 为了生成OnChartEvent()事件处理程序的事件,MCM控制面板使用自己的“代理”(由MCM控制面板在某些符号上启动的指标),为多货币交易提供事件。
  • 该面板可以包含在EA或指标中。
  • MCM控制面板为MQL5开发者提供了新的可能性。
  • 在我看来,该面板是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专家顾问。该指标根据对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 "该专家顾问使用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> //<--- 包含文件 
//+------------------------------------------------------------------+ 
//| 专家初始化函数                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {    //--- MCM控制面板初始化。
//--- 如果未指定颜色,则无需设置颜色,将使用默认颜色。
   InitControlPanelMCM(bg_color,font_color,select_color,font_size);
//---    
  return(0);   
  } 
//+------------------------------------------------------------------+ 
//| 专家去初始化函数                                 | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason)
  {
   DeinitControlPanelMCM();   //<--- MCM控制面板去初始化  
  }
//+------------------------------------------------------------------+ 
//| OnChartEvent事件处理程序。                                      | 
//| 有关详细信息,请参阅MQL5参考文献。                                  | 
//| 可与MCM控制面板一起用于多货币交易     | 
//+------------------------------------------------------------------+ 
void OnChartEvent(const int id, // 事件标识符:                                      
                  // 如果id-CHARTEVENT_CUSTOM==0 - 初始化事件(当prev_calculated==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:
          如果id-CHARTEVENT_CUSTOM !=0 - 它等于“市场观察”窗口中的符号索引;
  • lparam  -  事件标志。请参阅Control panel MCM.mqh中的ENUM_CHART_EVENT_SYMBOL枚举。
  • dparam -  某个时间框架上的Tick价格或新K线的开盘价。
  • sparam -  符号名称

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

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

  • “初始化”事件(Initialization);
  • “新Tick”事件(tick);
  • “新K线”事件在M1图表(M1);
  • “新K线”事件在M2图表(M2);
  • “新K线”事件在M3图表(M3);
  • “新K线”事件在M4图表(M4);
  • “新K线”事件在M5图表(M5);
  • “新K线”事件在M6图表(M6);
  • “新K线”事件在M10图表(M10);
  • “新K线”事件在M12图表(M12);
  • “新K线”事件在M15图表(M15);
  • “新K线”事件在M20图表(M20);
  • “新K线”事件在M30图表(M30);
  • “新K线”事件在H1图表(H1);
  • “新K线”事件在H2图表(H2);
  • “新K线”事件在H3图表 (H3);
  • “新K线”事件在H4图表(H4);
  • “新K线”事件在H6图表(H6);
  • “新K线”事件在H8图表(H8);
  • “新K线”事件在H12图表(H12);
  • “新K线”事件在日线图(D1);
  • “新K线”事件在周线图(W1);
  • “新K线”事件在月线图(MN1); 

EventDescription()返回的事件描述以括号形式表示(Initialization, tick, Mxx等)。EventDescription函数可以在Control panel MCM.mqh中找到(遵循ENUM_CHART_EVENT_SYMBOL枚举)。

当prev_calculated=0时,会生成“初始化”事件,可用于准备数据,例如重新计算指标值。


设置事件

要设置所需的事件,请点击“事件”按钮,选择符号和事件类型。所选事件将显示为黄色(或指标输入参数中的选中颜色)。您可以选择一个或多个事件,所有这些事件都可以由我们的多货币EA处理。要应用更改,请点击“启用/禁用事件”按钮。

同样的过程可以对所有必要的符号进行。


 

以下是来自“专家”选项卡的日志: 


 

相关帖子

评论 (0)