Multicurrency OnTick Event-Handler für MetaTrader 5: Praktische Anleitung

Mike 2011.02.02 03:03 14 0 0
Anhang

In diesem Beitrag werfen wir einen Blick auf die neue Implementierung des voll funktionsfähigen Multicurrency-Modus in MetaTrader 5. Diese Funktion ist im erweiterten OnTick(string symbol) integriert und bietet eine Vielzahl von Vorteilen für Trader.

Vorteile:

  • Es ermöglicht den echten Multicurrency-Modus sowohl auf Demokonten als auch auf Live-Konten.
  • Die Einstellungen sind einfach zu handhaben.
  • Die Ereignisliste für OnTick(string symbol) kann konfiguriert werden: Neue Tick- und/oder Neue Kerze.
  • Die Liste der Symbole kann angepasst werden (alle Symbole aus der Marktübersicht oder bestimmte ausgewählte Symbole).
  • Beim Arbeiten mit Symbolen aus der Marktübersicht können die Ereignisse "live" im OnTick(string symbol) verwaltet werden.
  • Es ist nicht notwendig, die Details der Funktionsweise zu verstehen. Der gesamte Code ist in der Include-Datei enthalten.
  • Es kann im Strategietester genutzt werden.

Das Template für den Expert Advisor sieht wie folgt aus:

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

#property copyright   "Copyright 2010, Lizar"
#property link        "https://www.mql5.com/ru/users/Lizar"
#property version     VERSION
#property description "Template des Expert Advisors"
#property description "mit Multicurrency OnTick(string symbol) Ereignis-Handler"

//+------------------------------------------------------------------+
//|                MULTICURRENCY MODUS EINSTELLUNGEN                       |
//|           des OnTick(string symbol) Ereignis-Handlers                 |
//|                                                                  |
//| 1.1 Liste der Symbole, die für die Ereignisse benötigt werden:             |
#define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF"
//| 1.2 Wenn Sie alle Symbole aus der Marktübersicht verwenden möchten, nutzen Sie dies:         |
//#define  SYMBOLS_TRADING    "MARKET_WATCH"
//|     Hinweis: Wählen Sie nur einen Weg aus 1.1 oder 1.2.                   |
//|                                                                  |
//| 2.  Ereignistyp für OnTick(string symbol):                        |
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//|     Hinweis: Der Ereignistyp muss der                 |
//|                 ENUM_CHART_EVENT_SYMBOL Enumeration entsprechen.             |
//|                                                                  |
//| 3.  Include-Datei:                                                |
#include <OnTick(string symbol).mqh>
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert-Initialisierungsfunktion                                   |
//| Diese Funktion muss deklariert werden, auch wenn sie leer ist.                |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Fügen Sie hier Ihren Code hinzu...
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Expert-Multi-Tick-Funktion                                       |
//| Verwenden Sie diese Funktion anstelle der Standard-OnTick() Funktion      |
//+------------------------------------------------------------------+
void OnTick(string symbol)
  {
   //--- Fügen Sie hier Ihren Code hinzu...
   Print("Neues Ereignis für Symbol: ",symbol);
  }
  
//+------------------------------------------------------------------+
//| ChartEvent-Funktion                                              |
//| Diese Funktion muss deklariert werden, auch wenn sie leer ist.                |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // Ereignis-ID
                  const long& lparam,   // Ereignisparameter vom Typ long
                  const double& dparam, // Ereignisparameter vom Typ double
                  const string& sparam) // Ereignisparameter vom Typ string
  {
   //--- Fügen Sie hier Ihren Code hinzu...
  }
  
//+------------------------------------------------------------------+
//| Expert-Deinitialisierungsfunktion                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   //--- Fügen Sie hier Ihren Code hinzu...
  }

//+------------------------------ Ende -------------------------------+

Einige Merkmale:

1. Einstellungen

Alle Einstellungen können mit den #define-Direktiven konfiguriert werden. Für das korrekte Funktionieren der OnTick(string symbol)-Funktion müssen nur zwei Parameter angegeben werden: SYMBOLS_TRADING und CHART_EVENT_SYMBOL. Der erste (SYMBOLS_TRADING) definiert die Symbol-Liste, die für die Ereignisse verwendet wird. Der zweite (CHART_EVENT_SYMBOL) definiert die Ereignistypen für alle Symbole.

Die SYMBOLS_TRADING enthält die Liste der Symbole, zum Beispiel:

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

Die Liste muss als Strings angegeben werden, durch Kommas getrennt. Die Liste endet mit dem Ende der Zeile.

Die SYMBOLS_TRADING kann wie folgt definiert werden:

#define  SYMBOLS_TRADING    "MARKET_WATCH"

Diese Methode bedeutet, dass alle Symbole aus der Marktübersicht verwendet werden. Diese Methode kann verwendet werden, um die Liste der Symbole "on the fly" zu ändern. Fügen Sie einfach die benötigten Symbole zur Marktübersicht hinzu oder entfernen Sie sie.

Der Ereignistyp CHART_EVENT_SYMBOL wird durch Flaggen oder deren Kombination aus der ENUM_CHART_EVENT_SYMBOL Enumeration definiert. Weitere Details finden Sie hier (in Russisch).

Hier sind Beispiele für die Ereignistypen:

//--- Beispiel 1. OnTick-Ereignis:
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//--- Beispiel 2. Neue Kerze M1 und Neue Kerze H1:
#define  CHART_EVENT_SYMBOL CHARTEVENT_NEWBAR_H1|CHARTEVENT_NEWBAR_M1

2.  Include-Datei.

Die #include OnTick(string symbol).mqh ist notwendig, dieses Datei enthält die Implementierung der OnTick(string symbol)-Funktion. Sie bietet eine einfache Möglichkeit, die gesamte OnTick(string symbol)-Funktion zu nutzen. Einige der Standardfunktionen sollten im Code des Expert Advisors deklariert werden, auch wenn sie leer sind.

3. Strategietester.

Wie Sie wissen, wird das OnChartEvent derzeit nicht im Strategietester unterstützt. Um dieses Problem zu lösen, werden globale Variablen verwendet, um die Ereignisse zu bearbeiten. Diese Methode wird nur im Strategietester verwendet, in allen anderen Fällen (auf echten/Demo-Konten) werden die Ereignisse über das OnChartEvent verarbeitet.

Hier ist das Feature. Im Strategietester funktioniert die OnTick(string symbol) auf den Ticks des Symbols, das in den Einstellungen des Strategietesters angegeben ist. Mit anderen Worten, es funktioniert wie OnTick(), wird aber auch aufgerufen, wenn neue Ticks für die ausgewählten Symbole eintreffen. Für die Arbeit mit dem Strategietester muss SYMBOLS_TRADING als Liste von Symbolen angegeben werden.

4. "Spione".

Es nutzt die "Spione" (Agenten-Indikatoren). Die Datei "Spy Control panel MCM.ex5" muss im Verzeichnis MQL5/Indicators/ abgelegt werden.

5. Die Dateien aus dem Archiv müssen ins MQL5-Verzeichnis extrahiert werden. Die benötigten Dateien sind:

  • /MQL5/Experts/OnTick(string symbol).mq5 - Beispiel des Expert Advisors, Quellcode des Templates;
  • /MQL5/Experts/OnTick(string symbol).ex5 - Beispiel des Expert Advisors, kompilierte Datei;
  • /MQL5/Indicators/Spy Control panel MCM.mq5 - Agent-Indikator, Quellcode;
  • /MQL5/Indicators/Spy Control panel MCM.ex5 - Agent-Indikator, kompilierte Datei;
  • /MQL5/Include/OnTick(string symbol).mqh - Include-Datei mit allen Funktionen, die für die Implementierung der OnTick(string symbol)-Funktion benötigt werden.
Liste
Kommentar 0