做货币对OnTick (string symbol) 事件句柄 - MetaTrader 5EA
- 显示:
- 2704
- 等级:
- 已发布:
- 2014.02.06 07:20
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
这是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 Ltd译自俄语
原代码: https://www.mql5.com/ru/code/280
无参数Zig Zag,基于"a-la Clyde Lee 模式"。
无参数Zig Zag,源于价格走势无参数Zig Zag。ZigZag上升阶段的单调性条件:后续任何柱形的高点不应该比上升阶段的低点低。