MQL5 TUTORIAL GRUNDLAGEN – 115 SIMPLER ENVELOPES BUY TRAILING STOP

video

 

In diesem Video wollen wir einmal anhand dieses Indikators hier einen Buy Trailing Stop programmieren. Der vom Envelopes-Indikator gesteuert wird. Also lassen Sie uns einmal schauen, wie man so etwas mit MQL5 programmieren kann. Um das zu tun, klicken Sie bitte hier oben auf dieses kleine Symbol oder drücken Sie die F4-Taste im Metatrader. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier einmal den Namen SimplerEnvelopesBuyTrailingStop, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb der OnTick-Funktion hier gelöscht werden und auch die zwei Kommentarzeilen werden entfernt. Wir starten hier mit einem include-Befehl.

 

Der wird uns die Datei trade.mph importieren. Die ermöglicht es uns von der Klasse C-Trade eine Instanz mit dem Namen trade zu erstellen und die werden wir gleich nutzen, um eine Testposition zu eröffnen. In der OnTick-Funktion starten wir mit einer statischen Variable vom Typ double. Die soll den Wert für den letzten Stop-Loss speichern. Danach ermitteln wir den Ask-Preis und den Bid-Preis. Das geht über die Funktion SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart. Wir nutzen entweder SYMBOL_ASK oder SYMBOL_BID und mit NormalizeDouble und _Digits ermitteln wir automatisch wie viele Nachkommastellen das jeweilige Währungspaar hat. Damit wir einen Stop-Loss testen können müssen wir eine Testposition eröffnen.

 

Das macht man natürlich nur auf einem Demokonto und immer, wenn PositionsTotal uns einen Rückgabewert von kleiner 1 zurückgibt, dann bedeutet das, dass wir keine geöffnete Position haben. Und dann eröffnen wir hier mit trade.Buy eine Testposition über 10 Microlot. Direkt im Anschluss setzen wir den letzten Stop-Loss-Wert zurück, denn mit einer neuen Position muss der Stop-Loss natürlich auch neu berechnet werden. Für unseren Envelopes-Indikator brauchen wir zwei Arrays. Die erstellen wir hier und im Anschluss nutzen wir ArraySetAsSeries, um diese beiden Arrays von der aktuellen Kerze an abwärts zu sortieren. Danach nutzen wir die in MQL5 eingebaute Funktion iEnvelopes für das aktuelle Währungspaar auf dem Chart und die auf dem Chart ausgewählte Zeiteinheit, um den Indikatorwert für 14 Kerzen zu berechnen. Den Verschiebungswert setzen wir auf 0.

 

Wir nutzen MODE_SMA für Simple Moving Average. Das Ergebnis soll anhand der Schlusskurse berechnet werden und dieser letzte Parameter hier ist der sogenannte Diviation-Wert. Wenn Sie einmal ein leeres Chart öffnen und auf Einfügen, Indikatoren, Tendenz, Envelopes klicken, dann sehen Sie auch hier diesen Wert als Abweichung von 0.100. Wir übernehmen hier mal die Standardwerte, klicken auf OK, klicken mit der rechten Maustaste in das Chart, speichern diese Vorlage unter dem Namen tester.tpl, denn das ist die Vorlage, die wir gleich im Strategietester sehen werden. Den alten Wert können Sie hier getrost ersetzen. Weiter geht´s im Metaeditor mit dem Befehl CopyBuffer. Der wird uns anhand der Envelopes-Definition, die wir hier oben getroffen haben, die Daten für Buffer 0 und für Buffer 1 in das obere beziehungsweise in das untere Band kopieren. Wir starten jeweils mit Kerze 0 und kopieren uns Preisdaten für drei Kerzen. Um den aktuellen Wert zu berechnen, brauchen wir nur in Kerze  des jeweiligen Arrays hineinzuschauen. Mit NormalizeDouble und ,6 kürze ich das Ganze hier auf sechs Nachkommastellen.

 

Uns interessiert in diesem Fall eher die Kerze davor. Die Werte lassen sich ähnlich ermitteln. Hier schauen wir einfach auf den Wert von Kerze 1 und natürlich müssen wir auch den Namen der Variablen entsprechend anpassen. Weiter geht´s mit den Prüfkonditionen, denn wir möchten gerne wissen, ob der letzte Wert für das untere Band kleiner ist als der Bid-Preis. Als nächstes überprüfen wir, ob der Wert für das letzte untere Band größer ist als der Wert für unseren letzten Stop-Loss und wenn beide Bedingungen zutreffen, dann möchten wir hier eine Funktion mit dem Namen CheckEnvelopesBuyTrailingStop aufrufen, der wir dann den letzten Wert unseres unteren Bandes übergeben. Diese Funktion existiert allerdings noch nicht. Die müssen wir gleich noch erstellen. Und als letzte Aktion in unserer OnTick-Funktion speichern wir uns den letzten Stop-Loss-Wert für den nächsten Aufruf. Kommen wir zu eigentlich interessanten Funktion mit dem Namen CheckEnvelopesBuyTrailingStop.

 

Die bekommt hier als double-Wert den letzten Wert für das untere Band zugewiesen. Wir gehen mit einer Vorschleife hier alle offenen Positionen durch und ermitteln zunächst einmal mit der Funktion PositionGetSymbol, für den aktuellen Schleifenzähler, das Währungspaar für die Position, denn dann können wir prüfen, ob das Währungspaar auf dem Chart zum Positionssymbol passt und wenn das so ist, dann müssen wir ein paar Werte ermitteln. Mit Hilfe von PositionGetInteger holen wir uns für den Parameter POSITION_TICKET die Ticketnummer für die Position und mit Hilfe von PositionGetDouble, POSITION_SL ermitteln wir den aktuellen Stop-Loss für die Position und wenn der aktuelle Stop-Loss kleiner ist als der Wert für das letzte untere Band, dann nutzen wir trade.PositionModify für das aktuelle Positionsticket und passen den Stop-Loss auf den Wert vom letzten unteren Band an. Zum Schluss machen wir hier noch die Klammern zu und das war´s auch schon so weit.

 

Wenn Ihnen das hier zu schnell ging oder wenn Sie keine Ahnung haben, was alle diese Funktionen hier bewirken sollen, dann möchten Sie sich vielleicht zunächst eines der anderen Videos aus der Grundlagenserie noch einmal anschauen. Vielleicht ist aber auch der Premiumkurs interessant für Sie. Den finden Sie auf unserer Webseite und da gibt´s jetzt auch Angebote für den Download von solchen Quellcodes, aber für den Moment klicken wir mal auf Kompilieren oder drücken die F7-Taste. Das hat bei mir ohne Fehler funktioniert und wenn das bei Ihnen auch so ist, dann können Sie jetzt hier oben klicken oder auf die F4-Taste drücken, um in den Metatrader zurückzukehren. Und im Metatrader klicken wir auf Ansicht, Strategietester oder drücken die Tastenkombination Steuerung und R.

 

Bitte wählen Sie die neu erstellte Datei SimplerEnvelopesBuyTrailingStop.ex5 aus, markieren Sie hier unten die Option für den visuellen Modus und starten Sie Ihren Test. Hier haben wir auch schon die erste Position und wir sehen, dass ein funktionierender Buy Trailing Stop für den Envelopes-Indikator nachgezogen wird. Unser Expert Advisor funktioniert also wie gewünscht und Sie haben in diesem kurzen Video gelernt, wie Sie den Trailing Stop für Buy-Positionen mit Hilfe des Envelopes-Indikators programmieren können und Sie haben das selbst getan, mit diesen paar Zeilen hier in MQL5.