Der innere Aufbau eines Expert Advisors


EA ProgrammierenIn diesem Artikel schauen wir uns die Grundstruktur eines jeden Expert Advisors an. Automatisierte Handelssysteme bei anderen Handelsplattformen und in anderen Programmiersprachen werden vermutlich sehr ähnliche Grundstruktur besitzen. Dieser Aufbau ist in einem Quelltext des EAs zu erkennen. In MT4 entwickeln wir unsere EAs in der Programmierumgebung MetaEditor.

Für diejenigen, die mein Buch Algorithmisches Trading bereits gelesen haben, werden diese Struktur aus zahlreichen Beispielen erkennen können.

Externer Input

Expert Advisor StrukturAls Input bezeichnen wir jede Information die unseren EA von außen, also nicht durch den Quelltext, erreicht. In MetaTrader4 wird dieser Input in den Einstellungen eines EAs angezeigt. So kann man beispielsweise die Positionsgröße, welche der EA verwenden soll, von außen anpassen. In dem Screenshot rechts ist ein solches Input-Fenster für einen EA zu sehen. MT4-Nutzer werden es sofort erkennen – man bekommt dieses Fenster entweder beim Einstellen des EAs auf einem Chart oder bei einem Backtest zu sehen.

Somit kann man als Entwickler oder Auftragsgeber festlegen, welche Werte einer Strategie/eines EAs man von außen festlegen möchte. Diese Werte kann man im Laufe eines Backtest automatisch optimieren. Im Quelltext erkennt man diese Werte durch das Markieren einer Variable als “Input-Variable”.

Eigene Funktionen

Jede Programmiersprache bietet viele Bibliotheken mit vielen umfangreichen Funktionen. Auch die Programmiersprache MQL4 bietet bereits importierte Funktionen an. So kann man mit nur einer Code-Zeile den Wert des MACDs oder eines anderen Indikator herausfinden, ohne dabei die mathematische Formeln ausführlich niederschreiben zu müssen. Dennoch gibt es Fälle, in welchen man eigene Funktionen braucht: Mustererkennung wie Dreiecksformation, Support, Widerstand mit eigenen Algorithmen oder z.B das Schließen aller offenen Positionen.

Dadurch schafft der Entwickler für sich einen überblickbaren Quelltext, welcher sich leichter anpassen und verändern lässt. Das verschachteln von bestimmten Ausführungen (wie z.B das Schließen aller offenen Positionen) in eigene Funktionen führt zur Vermeidung von Code-Redundanz.

Initialisierung (OnInit())

Der Name OnInit() ist vorgegeben und im MQL4 reserviert – d.h. du kannst diesen Funktionsnamen nicht für dein Vorhaben verwenden. Die Funktion wird einmalig bei “installieren” des EAs auf ein Chart in MetaTrader4 ausgeführt. Hierbei können bestimmte Dinge/Informationen einmalig überprüft werden.

Beispielsweise kann der EA :

  1. überprüfen ob der Broker 4- oder 5-stellige Preise liefert
  2. ob die Kontonummer mit der Kontonummer des Käufers des EAs übereinstimmt
  3. ob das Kapital für die Strategie bzw. die Positionsgröße ausreichend ist
  4. bestimme Objekte wie Trendlinien, Benutzeroberfläche für den EA, Rechtecke, usw. erstellen
  5. und vieles mehr

Abschluss (DeInit())

Diese Funktion wird ebenfalls einmalig beim Löschen des EAs aus dem Chart ausgeführt. Der Name ist vorgegeben und reserviert. Der Abschluss kann mehrere Funktionen erfüllen wie z.B.:

  1. Alle im Verlauf des Tradings erstellte Dateien löschen
  2. Alle im Objekte (Trendlinie, Rechtecken, usw.), welche in OnTick() oder in OnInit() erstellt wurden, aus dem Chart entfernen
  3. Ein Abschlussbericht per Email, FTP oder als Datei senden/erstellen.
  4. und vieles mehr

Preisveränderung (OnTick())

Diese Funktion ist vorgegeben und reserviert. OnTick() wird nicht einmalig ausgeführt, sondern jedes mal wenn ein neuer Preis (eine Preisveränderung, ein Tick, ein Kurs) im Terminal eintrifft. Platziert man einen EA im EUR/USD, so wird die Funktion mehrere hunderte male in wenigen Sekunden/Minuten ausgeführt, weil dieses Handelsinstrument sehr volatil ist. Platziert man dagegen einen EA im USD/UAH, so wird die OnTick() vergleichsweise selten ausgeführt, weil USD/UAH seltener neue Kurse generiert.

Entwickler müssen beachten, dass diese Funktion schnellst möglich ausgeführt und ausgewertet wird, bevor die nächste Preisveränderung eintrifft. Schafft der EA es nicht die OnTick Funktion vor dem nächsten Tick vollständig auszuführen, so wird OnTick wichtige Befehle/Aufgaben nicht erledigen können. Zu diesen Aufgaben zählen: StopLoss setzten oder nachziehen, Position schließen, usw. Die Folgen können sehr teuer werden.

Ich hoffe du hast jetzt ein besseres Verständnis davon, wie ein EA im inneren aufgebaut ist – auch wenn nur sehr oberflächlich. Solltest mehr ins Detail gehen wollen, so kannst du dir das Buch “Algorithmisches Trading” von mir auf Amazon bestellen. Viel Spaß dabei wünsche ich dir!

Oder aber auch: Expert Advisor bestellen!

Profile photo of Andrey Bulezyuk

Andrey Bulezyuk

Analyst und Trader at In-Trading
Analyst und Trader bei In-Trading. Moderator und Leiter von In-Trading Youtube Programm.
Profile photo of Andrey Bulezyuk

Latest posts by Andrey Bulezyuk (see all)