In diesem Video schauen wir uns diesen Indikator hier an. Der wird durch eine rote Linie symbolisiert, und es handelt sich um den Adaptive Moving Average. Der sieht zwar aus, wie ein normaler gleitender Durchschnitt, tatsächlich ist er aber gewichtet. Erfunden hat diesen Indikator Perry Kaufman. Und er soll weniger Fehlsignale produzieren, als ein normaler gleitender Durchschnitt. Darum wollen wir uns in diesem Video einmal anschauen, wie man einen Expert Advisor erstellen kann, der mit diesem Adaptive Moving Average Signal automatisch handeln kann.
Um das zu tun, klicken wir hier oben auf diesen kleinen Button, oder drücken die F4-Taste im MetaTrader. Das ruft dann hier den Meta-Editor auf. In meinem Fall nutze ich das Forex Trading Framework als Hauptmodul. Vom Prinzip handelt es sich um eine Sammlung von Funktionen, die in einer Bibliothek importiert werden. Z.B. hier wird die Positionsgröße gesetzt. Und mit dieser kompletten Handelsbibliothek ist man dann in der Lage, so ziemlich jeden Einstieg zu handeln, denn alle diese einzelnen Funktionen hier sorgen zusammen dafür, dass einmal geöffnete Positionen verwaltet werden.
In unserem Fall möchten wir den Einstieg für den Adaptive Moving Average erstellen und handeln. Das entsprechende MQ5-Modul wird „CheckEntry_AMA.mq5“ heißen. Und um das zu erstellen, klicken wir jetzt auf „Datei/ Neu/ Expert Advisor (Vorlage)/ Weiter“. Ich vergebe hier den Namen „CheckEntry_AMA“, wie es hier unten steht, klicke auf „Weiter/ Weiter/ Fertigstellen“. Und jetzt können alle Einträge über dieser OnTick-Funktion hier entfernt werden, und das gilt auch für die beiden Kommentarzeilen. Diese Funktion hier benennen wir um, denn wir rufen im Hauptmodul eine Funktion mit dem Namen „CheckEntry“ auf. Die wird uns eine String-Variable für den Einstieg zurückliefern.
Im ersten Schritt erstellen wir uns ein PreisArray. Das geht mit MqlRates, das ist eine eingebaute Funktion von MQL5, die die Information über Preise, Volumen und Spread für alle Kerzen aufbewahrt. Danach sortieren wir das Array von der aktuellen Kerze an abwärts. Das tun wir mit dem Befehl ArraySetAsSeries, der gehört ebenfalls zu MQL5. Und um unser Array mit Preisdaten zu füllen, nutzen wir noch einen Befehl, der heißt CopyRates. Der wird für das aktuelle ausgewählte Chart und die auf diesem Chart ausgewählte Zeiteinheit, von der aktuellen Kerze 0 für alle Kerzen auf dem Chart, die Preisinformationen in unserem Array speichern. Mit diesem Ausdruck hier bekommt man alle Kerzen, die das Chart hergibt. Wenn Sie für Ihren Expert Advisor weniger als alle Kerzen brauchen, dann können Sie hier auch einfach eine Zahl wie 20 oder 50 eingeben; das macht den Expert Advisor hinterher schneller. Jetzt brauchen wir noch eine String-Variable, die nennen wir „Signal“. Ein Wert wird noch nicht zugewiesen, denn der wird gleich berechnet.
Für unseren Expert Advisor brauchen wir noch ein Array, das bekommt den Namen „meinPreisArray“ und ist vom Typ Double, damit es auch Nachkommastellen für die Preise aufnehmen kann. Jetzt definieren wir die Eigenschaften für unseren Expert Advisor. Dazu nutzen wir die MQL5-Funktion iAMA, die gibt uns das Handle für den Adaptive Moving Average zurück. Als Parameter übergeben wir das aktuelle Währungspaar auf dem Chart, die auf dem Chart eingestellte Zeiteinheit. Und Sie werden sich fragen, was diese drei Zahlen hier bedeuten: nun, wenn man sich die Eigenschaften vom Adaptive Moving Average einmal genauer ansieht, dann sieht man eine 9 für die Periode, auf die der Expert Advisor berechnet werden soll. Hier gibt es eine 2 für den Schnellen Exponentiellen Moving Average und eine 30 für den Langsamen Exponentiellen Moving Average, und darum finden sie sich auch in dieser Form bei uns in den Parametern wieder. Hier gibt es noch eine 0 und einen Eintrag „PRICE_CLOSE“. Das bedeutet, wir nutzen eine Verschiebung von 0, und unsere Werte werden berechnet aufgrund der Schlusskurse. Alles in allem kommt dann ein einziger Wert raus, in diesem Fall hier unter „Value“ zu sehen.
Aber zunächst sortieren wir auch dieses Array von der aktuellen Kerzen an abwärts, indem wir ArraySetAsSeries für unser PreisArray verwenden. Mit CopyBuffer füllen wir jetzt unser PreisArray anhand der AdaptiveMovingAverageDefinition, die wir hier oben getroffen haben, für Buffer 0 -also diese rote Signallinie hier- von der aktuellen Kerze, das ist die Kerze 0, für 3 Kerzen -darum diese 3 hier- und speichern das Ergebnis in unserem PreisArray. Dadurch sind wir jetzt in der Lage, den aktuellen Wert für die aktuelle Kerze zu berechnen, indem wir auf Kerze 0 aus unserem PreisArray zurückgreifen. Und mit NormalizeDouble und dieser 6 hier sorgen wir dafür, dass wir auch 6 Nachkommastellen für unseren Wert bekommen, so wie hier zu sehen. Und wenn der AdaptiveMovingAverageWert größer ist, als der Schlusskurs der letzten Kerze aus unserem PreisInfo Array, dann setzen wir unser Signal auf „Verkaufen“, indem wir den Begriff „Verkaufen“ unserem Signal zuweisen. Im anderen Fall, wenn der AdaptiveMovingAverageWert unter dem Schlusskurs der letzten Kerze liegt, wenn also der Wert des Indikators kleiner ist, als der Schlusskurs der letzten Kerze aus unserem PreisInfo Array, dann setzen wir unser Signal auf „Kaufen“.
Im letzten Schritt liefern wir unser Signal noch an das Hauptmodul zurück, indem wir den Return-Befehl nutzen. Mein Hauptmodul ist hier das Forex Trading Framework vom 22. Januar 2018. Sie können aber auch einen eigenen Expert Advisor einsetzen, oder sich das Forex Trading Framework von meiner Seite herunterladen. Blenden wir mal die Werkzeugleiste ein und klicken auf „Kompilieren“. Das hat hier ohne Fehler funktioniert, und darum kann ich jetzt hier oben klicken, oder F4 drücken, um in den MetaTrader zurückzukehren. Und im MetaTrader klicke ich auf „Ansicht/ Strategietester“, oder drücke die Tastenkombination Strg+R. Das ruft dann hier das Strategietester-Panel auf. Hier wähle ich das Forex Trading Framework aus, markiere die Option für die Visualisierung und starte meinen Test. Und so sieht unser Expert Advisor dann bei der Arbeit aus. Und Sie haben das selbst programmiert, mit den paar Zeilen hier in MQL5.