In diesem Video wollen wir uns einmal anschauen, wie man für einen gleitenden Durchschnitt und für eine Verkaufsposition einen Trailing Stop programmieren kann. Also lassen Sie uns einmal schauen, wie man so etwas für MQL4 realisiert. Um das zu tun klicken Sie bitte hier oben auf dieses kleine Symbol oder drücken Sie die F4-Taste. 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 SimplerSMASellTrailingStop, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb der OnTick-Funktion gelöscht werden und auch die zwei Kommentarzeilen werden entfernt. Wir starten damit, dass wir eine statische Variable vom Typ double erstellen. Die bekommt den Namen LastStopMovingAverageValue und wird den jeweils letzten Wert für unseren Trailing Stop Wert aufnehmen. Damit wir aber einen Trailing Stop benutzen können müssen wir zunächst einmal eine Testposition eröffnen. Immer wenn die Funktion OrdersTotal uns einen Wert von 0 zurückliefert, dann eröffnen wir hier mit OrderSend eine Test Sell Position von 10 Mircolot und wir weisen danach unserer Variable LastStopMovingAverageValue einen unrealistisch hohen Wert von 1.000 zu. Man könnte hier auch den Wert 0 verwenden, aber dann müsste man eine zusätzliche Überprüfung einbauen. Denn in der Regel prüft man bei einem Trailing Stop für eine Sell-Position, ob der aktuelle Wert für den Trailing Stop kleiner ist als der letzte Wert und der kann niemals unter 0 sein. Darum machen wir das in diesem Fall einmal so. Jetzt können wir mit der Funktion iMA, die in MQL4 vorhanden ist, für das aktuelle Währungspaar auf dem Chart und die auf dem Chart ausgewählte Zeiteinheit für 500 Kerzen ohne einen Wert für die Verschiebung einen gleitenden Durchschnitt berechnen. Deswegen nutzen wir MODE_SMA. SMA steht für SimpleMovingAverage. Und die Ergebnisse sollen anhand der Schlusskurse für die Kerze 1 berechnet werden. Und jetzt, da wir diesen Wert kennen, können wir prüfen, ob der kleiner ist als der letzte bekannte Wert. Als zweite Bedingung interessiert mich noch, ob der aktuelle Wert über dem Ask Preis liegt. Und wenn diese beiden Bedingungen zutreffen, dann möchte ich gerne eine Funktion aufrufen mit dem Namen CheckSMASellTrailingStop. Und dieser Funktion übergeben wir den aktuellen Wert für den StopMovingAverageValue. Danach weisen wir den aktuellen Wert der Variable LastStopMovingAverageValue zu, denn beim nächsten Aufruf ist ja der aktuelle Wert der letzte Wert. So weit so gut, aber diese Funktion hier existiert noch überhaupt nicht, darum müssen wir die jetzt programmieren. Der Name der Funktion ist CheckSMASellTrailingStop. Wir nutzen hier void, da wir keinen Rückgabetyp benötigen. Und als Parameter übernehmen wir hier den StopMovingAverageValue, den wir hier oben übergeben haben. Im Anschluss nutzen wir eine Vorschleife, um durch alle Positionen durchzugehen bis keine mehr übrig sind. Und für jede Positionsnummer nutzen wir hier OrderSelect, um die entsprechende Position auszuwählen. Anschließend möchten wir gerne prüfen, ob das Währungspaar für die Position übereinstimmt mit dem Währungspaar auf unserem Chart und zusätzlich prüfen wir noch den OrderType ab. Wir wollen wissen ob es eine Verkaufs Order ist, denn nur dann macht es Sinn einen SellTrailingStop nachzuziehen. Und als letzte Bedingung interessiert uns noch ob der aktuelle OrderStopLoss größer ist als der aktuelle Wert für unseren gleitenden Durchschnitt oder ob wir einen Wert 0 für den Stop Loss haben. Das wäre beispielsweise der Fall, wenn wir für unsere Testposition keinen Stop Loss angegeben haben. Jetzt kommen wir endlich zum entscheidenden Teil, wo wir mit OrderModify für das aktuelle Ticket und den unveränderten Eröffnungspreis unserer Position den Stop Loss auf den StopMovingAverageValue anpassen. Der OrderTakeProfit und die beiden Werte für das Ablaufdatum und die Farbe bleiben unverändert.