下载MetaTrader 5

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

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

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

2014.02.06 07:20
EA

做货币对OnTick (string symbol) 事件句柄 - MetaTrader 5EA

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

显示:
638
等级:
投票: 27
onmultitick.zip (5.38 KB)

这是MetaTrader 5中全功能多货币对模式的新实现方式。在扩展的OnTick(string symbol)函数中实现。 

好处:

  • 它为模拟和实盘账户提供真正的多货币对操作模式。
  • 设置简单。
  • OnTick(string symbol)的事件列表: 可以配置为:NewTick 和或 NewBar。
  • 交易对象列表可配置(Market Watch中的所有货币对或者某些指定的货币对)。
  • 当使用Market Watch中的交易对象时,允许在 OnTick(string symbol)中“立即”管理事件。
  • 没必要去深究其实现细节。所有代码都在引用的文件中。
  • 可在策略测试器中使用。

EA模板如下:

//+------------------------------------------------------------------+
//|                                        OnTick(string symbol).mq5 |
//|                                            Copyright 2010, Lizar |
//|                            https://www.mql5.com/ru/users/Lizar |
//+------------------------------------------------------------------+
#define VERSION       "1.00 Build 1 (01 Fab 2011)"

#property copyright   "Copyright 2010, Lizar"
#property link        "https://www.mql5.com/ru/users/Lizar"
#property version     VERSION
#property description "Template of the Expert Advisor"
#property description "with multicurrency OnTick(string symbol) event handler"

//+------------------------------------------------------------------+
//|                MULTICURRENCY MODE SETTINGS                       |
//|           of OnTick(string symbol) event handler                 |
//|                                                                  |
//| 1.1 List of symbols needed to proceed in the events:             |
#define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF"
//| 1.2 If you want all symbols from Market Watch, use this:         |
//#define  SYMBOLS_TRADING    "MARKET_WATCH"
//|     Note: Select only one way from 1.1 or 1.2.                   |
//|                                                                  |
//| 2.  Event type for OnTick(string symbol):                        |
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//|     Note: the event type must corresponds to the                 |
//|                 ENUM_CHART_EVENT_SYMBOL enumeration.             |
//|                                                                  |
//| 3.  Include file:                                                |
#include <OnTick(string symbol).mqh>
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//| This function must be declared, even if it empty.                |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Add your code here...
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Expert multi tick function                                       |
//| Use this function instead of the standard OnTick() function      |
//+------------------------------------------------------------------+
void OnTick(string symbol)
  {
   //--- Add your code here...
   Print("New event on symbol: ",symbol);
  }
  
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//| This function must be declared, even if it empty.                |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event id
                  const long& lparam,   // event param of long type
                  const double& dparam, // event param of double type
                  const string& sparam) // event param of string type
  {
   //--- Add your code here...
  }
  
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   //--- Add your code here...
  }

//+------------------------------ end -------------------------------+

一些特性:

1. 设置

所有设置都可以通过使用 #define指令配置。要正确使用OnTick(string symbol)函数,你仅需要确认两个参数:SYMBOLS_TRADING 和 CHART_EVENT_SYMBOL。第一个参数 (SYMBOLS_TRADING) 确定用于事件处理的交易对象列表。第二个参数(CHART_EVENT_SYMBOL)确定所有交易对象的事件类型。

SYMBOLS_TRADING包含交易对象列表,例如:

#define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF"

列表必须是字符串形式,用逗号分隔。该列表结束与该行的末尾。

SYMBOLS_TRADING 定义如下

#define  SYMBOLS_TRADING    "MARKET_WATCH"

这表示Market Watch中的所有交易对象都被使用。这种方式可以用于“随时”改变交易对象列表。从Market Watch中添加或移除交易对象。

CHART_EVENT_SYMBOL事件类型由flag或ENUM_CHART_EVENT_SYMBOL枚举值的组合定义。详情参见这里(俄语)。

下面是事件类型的例子:

//--- 举例 1. OnTick 事件:
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//--- 举例 2. M1新柱形 和 H1新柱形:
#define  CHART_EVENT_SYMBOL CHARTEVENT_NEWBAR_H1|CHARTEVENT_NEWBAR_M1

2. 包含文件。

需要包含#include OnTick(string symbol).mqh,该文件中有OnTick(string symbol) 函数的实现。它为使用OnTick(string symbol)函数提供了一种简便的办法。一些标准函数必须在EA中声明,即使它们是空函数。

3. 策略测试器。

如你所知(目前),策略测试器不支持OnChartEvent。要解决这个问题,全局变量用于处理这一事件。这个方法仅用于策略测试器,在其他情况下(在实盘或模拟帐户上),该事件通过OnChartEvent函数来处理。 

以下是其功能。在策略测试器中OnTick(string symbol)函数将在交易对象的价格变动时运行,这可以在策略测试器的设置中进行配置。换句话说,它类似OnTick(),但也是在选中的交易对象的新tick到来时运行。在策略测试器中SYMBOLS_TRADING必须是交易对象列表。

4. “间谍”。

使用“间谍”(代理-指标)。"Spy 控制面板 MCM.ex5"文件必须放在 \MQL5\Indicators\ 文件夹下。

5. 文档中的文件必须放到\MQL5文件夹下。所需的文件:

  • /MQL5/Experts/OnTick(string symbol).mq5 - EA样例,模板的源代码;
  • /MQL5/Experts/OnTick(string symbol).ex5 - EA编译后文件的样例;
  • /MQL5/Indicators/Spy Control panel MCM.mq5 - 代理-指标,源代码;
  • /MQL5/Indicators/Spy Control panel MCM.ex5 - 代理-指标,编译后文件;
  • /MQL5/Include/OnTick(string symbol).mqh - 包含实现OnTick(string symbol) 函数所需的所有函数。

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

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

平均趋向指数(ADX) 平均趋向指数(ADX)

平均趋向指数指标(ADX)用来帮助判断市场是否存在趋势。

60 EMA profit 60 EMA profit

直观显示60EMA均线交易系统的赢利和亏损。

Ticks Volume 指标 Ticks Volume 指标

在期货市场上,交易量的数据会有一天的延迟,为了解决这个问题,许多分析员使用 tick volume 指标 (tick volume,订单交易量).