Ereignisbehandlung

Die Sprache MQL5 ermöglicht die Behandlung bestimmter vordefinierter Ereignisse. Die Funktionen zur Behandlung dieser Ereignisse sollten in einem MQL5-Programm definiert werden: Funktionsname, Rückgabetyp, eine Reihe von Parametern (falls vorhanden) und deren Typen sollten genau der Beschreibung einer Ereignisbehandlungsfunktion entsprechen.

Die Ereignisbehandlung des Client-Terminals verwendet die Rückgabe- und Parametertypen, um Funktionen zu identifizieren, die ein Ereignis verarbeiten. Wenn eine bestimmte Funktion einige Parameter oder einen Rückgabetyp hat, der nicht den nachfolgenden Beschreibungen entspricht, kann eine solche Funktion nicht zur Behandlung eines Ereignisses verwendet werden.

Funktion

Beschreibung

OnStart

Die Funktion wird aufgerufen, wenn das Ereignis Start auftritt, um Aktionen auszuführen, die im Skript aufgeführt sind.

OnInit

Die Funktion wird von Indikatoren und EAs aufgerufen, wenn das Ereignis Init eintritt, um ein gestartetes MQL5-Programm zu initialisieren.

OnDeinit

Die Funktion wird von Indikatoren und EAs aufgerufen, wenn das Ereignis Deinit auftritt, um ein laufendes MQL5-Programm zu de-initialisieren.

OnTick

Die Funktion wird von EAs aufgerufen, wenn das Ereignis NewTick eintritt, um einen neuen Tick abzuarbeiten.

OnCalculate

Die Funktion wird von Indikatoren aufgerufen, wenn das Ereignis Calculate eintritt, um Preisdatenänderungen abzuarbeiten.

OnTimer

Die Funktion wird von Indikatoren und EAs während des periodisches Ereignis Timer aufgerufen, das vom Terminal in festen Zeitintervallen erzeugt wird.

OnTrade

Die Funktion wird von EAs während des Trade Ereignisses aufgerufen, das am Ende einer Handelsoperation auf einem Handelsserver generiert wird.

OnTradeTransaktion

Die Funktion wird von EAs aufgerufen, wenn das Ereignis TradeTransaction auftritt, um die Ergebnisse einer Handelsanfrage zu verarbeiten

OnBookEvent

Die Funktion wird von EAs aufgerufen, wenn das Ereignis BookEvent auftritt, um Änderungen in der Markttiefe zu verarbeiten.

OnChartEvent

Die Funktion wird von Indikatoren und EAs aufgerufen, wenn das Ereignis ChartEvent auftritt, um Änderungen im Chart zu verarbeiten, die von einem Benutzer oder einem MQL5-Programm vorgenommen wurden.

OnTester

Die Funktion wird von EAs aufgerufen, wenn das Ereignis Tester auftritt, um notwendige Aktionen durchzuführen, nachdem ein EA mit historischen Daten getestet wurde.

OnTesterInit

Die Funktion wird von EAs aufgerufen, wenn das Ereignis TesterInit auftritt, um notwendige Aktionen vor der Optimierung im Strategie-Tester durchzuführen.

OnTesterDeinit

Die Funktion wird von EAs aufgerufen, wenn das Ereignis TesterDeinit nach der EA-Optimierung im Strategie-Tester auftritt.

OnTesterPass

Die Funktion wird von EAs aufgerufen, wenn TesterPass auftritt, um die Ankunft eines neuen Datenrahmens während der EA-Optimierung im Strategie-Tester zu handhaben.

Das Client-Terminal sendet eingehende Ereignisse an entsprechende offene Charts. Außerdem können Ereignisse durch Charts (chart events) oder mql5 Programme (custom events) erzeugt werden. Die Generierung von grafischen Ereignissen zur Objekterstellung/Löschung kann durch Setzen von CHART_EVENT_OBJECT_CREATE und CHART_EVENT_OBJECT_DELETE Chart-Eigenschaften aktiviert oder deaktiviert werden. Jede mql5-Anwendung und jedes Diagramm haben ihre eigene Warteschlange von Ereignissen, in der alle neu eingetroffenen Ereignisse platziert werden.

Ein Programm holt Ereignisse nur aus dem Chart, auf dem es läuft. Alle Ereignisse werden nacheinander in der Reihenfolge ihres Eingangs behandelt. Wenn die Warteschlange (Queue) bereits das Ereignis NewTick enthält oder sich dieses Ereignis in der Verarbeitungsphase befindet, wird das neue Ereignis NewTick nicht in die Warteschlange der mql5-Anwendung hinzugefügt. Wenn sich ChartEvent bereits in einer mql5-Programmwarteschlange befindet oder ein solches Ereignis behandelt wird, dann wird ein neues Ereignis dieses Typs nicht die Warteschlange gestellt. Das Timer-Ereignis wird auf die gleiche Weise verarbeitet - wenn das Ereignis Timer bereits in der Warteschlange ist oder behandelt wird, wird kein neues Timer-Ereignis in eine Warteschlange gestellt.

Ereigniswarteschlangen haben eine begrenzte, aber ausreichende Größe, so dass ein Überlauf der Warteschlange für ein korrekt entwickeltes Programm unwahrscheinlich ist. Wenn die Warteschlange überläuft, werden neue Ereignisse verworfen und nicht in die Warteschlange gestellt.

Es wird dringend empfohlen, keine Endlosschleifen zur Behandlung von Ereignissen zu verwenden. Mögliche Ausnahmen sind Skripte, die ein einzelnes Ereignis Start behandeln.

Bibliotheken behandeln keine Ereignisse.