大家好!今天我们来聊聊MetaTrader 5的新功能——多货币模式的OnTick事件处理器。这一功能实现了全能的多货币交易,提升了我们在交易过程中的灵活性。
功能优势
- 支持真实和模拟账户的真正多货币模式。
- 设置简单,易于使用。
- OnTick事件列表可配置,包括新滴答和/或新K线。
- 可以配置交易品种列表(从市场观察中选择全部品种或指定的某些品种)。
- 在处理市场观察中的品种时,允许实时管理OnTick事件。
- 无需深入了解内部工作机制,所有代码已包含在引入文件中。
- 可以在策略测试器中使用。
专家顾问模板如下:
//+------------------------------------------------------------------+ //| 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 "专家顾问模板" #property description "包含多货币OnTick事件处理器" //+------------------------------------------------------------------+ //| 多货币模式设置 | //| OnTick事件处理器的设置 | //| 1.1 需要处理事件的符号列表: | #define SYMBOLS_TRADING "EURUSD","GBPUSD","USDJPY","USDCHF" //| 1.2 如果要使用市场观察中的所有符号,可以使用: | //#define SYMBOLS_TRADING "MARKET_WATCH" //| 注意:只能选择1.1或1.2中的一种方式。 | //| 2. OnTick事件的类型: | #define CHART_EVENT_SYMBOL CHARTEVENT_TICK //| 3. 引入文件: | #include <OnTick(string symbol).mqh> //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 专家初始化函数 | int OnInit() { //--- 在此添加代码... return(0); } //+------------------------------------------------------------------+ //| 专家多滴答函数 | void OnTick(string symbol) { //--- 在此添加代码... Print("新事件在符号: ",symbol); } //+------------------------------------------------------------------+ //| ChartEvent函数 | void OnChartEvent(const int id, // 事件ID const long& lparam, // long类型事件参数 const double& dparam, // double类型事件参数 const string& sparam) // string类型事件参数 { //--- 在此添加代码... } //+------------------------------------------------------------------+ //| 专家去初始化函数 | void OnDeinit(const int reason) { //--- 在此添加代码... } //+------------------------------ 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"这种方式表示将使用市场观察中的所有符号。可以通过这种方法“实时”更改符号列表。只需添加或移除所需的符号即可。
CHART_EVENT_SYMBOL事件类型由标志或它们的组合定义,详细信息请查看这里(俄文)。
2. 引入文件。
需要引入OnTick(string symbol).mqh文件,这个文件包含OnTick(string symbol)函数的实现。它提供了使用OnTick(string symbol)函数的简单方法。即使某些标准函数为空,也应该在专家顾问的代码中声明。
3. 策略测试器。
如您所知,目前,OnChartEvent在策略测试器中不被支持。为了解决这个问题,使用全局变量来处理事件。此方法仅在策略测试器中使用,在所有其他情况下(真实/模拟账户)通过OnChartEvent处理事件。
在策略测试器中,OnTick(string symbol)将在策略测试器设置的符号的滴答上工作。换句话说,它的工作方式类似于OnTick(),但在所选符号上有新滴答时也会被调用。对于策略测试器,SYMBOLS_TRADING必须指定为符号列表。
4. “间谍”。
它使用“间谍”(代理指标)。文件“Spy Control panel MCM.ex5”必须位于\MQL5\Indicators\文件夹中。
5. 从压缩包中提取的文件必须放在\MQL5文件夹中。所需文件:
- /MQL5/Experts/OnTick(string symbol).mq5 - 专家顾问示例,模板的源代码;
- /MQL5/Experts/OnTick(string symbol).ex5 - 专家顾问编译文件;
- /MQL5/Indicators/Spy Control panel MCM.mq5 - 代理指标,源代码;
- /MQL5/Indicators/Spy Control panel MCM.ex5 - 代理指标,编译文件;
- /MQL5/Include/OnTick(string symbol).mqh - 包含文件,包含OnTick(string symbol)函数所需的所有函数。