下载MetaTrader 5

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

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

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

2014.02.06 07:20
EA

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

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

显示:
719
等级:
投票: 28
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

无参数Zig Zag,A-la Clyde Lee 模式 无参数Zig Zag,A-la Clyde Lee 模式

无参数Zig Zag,基于"a-la Clyde Lee 模式"。

无参数Zig Zag,源于价格走势 无参数Zig Zag,源于价格走势

无参数Zig Zag。ZigZag上升阶段的单调性条件:后续任何柱形的高点不应该比上升阶段的低点低。

eKeyboardTrader eKeyboardTrader

本EA允许使用键盘进行交易。

TrendMagic TrendMagic

趋势魔法指标。