MQL5 TUTORIAL GRUNDLAGEN – 82 SIMPLER SMA SELL TRAILING STOP

video
play-sharp-fill

In diesem Video wollen wir uns einmal anschauen, wie man einen Sell Trailing Stop für einen gleitenden Durchschnitt programmieren kann. Wenn wir hier hineinzoomen dann sehen wir, dass wir eine Sell Position haben. Hier ist der gleitende Durchschnitt und der Stop Loss wird hier nachgezogen, also lassen Sie uns einmal schauen, wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie im Metatrader bitte auf dieses kleine Symbol hier oben 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 mal den Namen SimplerSMASellTrailingStop, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb der OnTick-Funktion hier entfernt werden und wir löschen auch die beiden Kommentarzeilen. Im ersten Schritt nutzen wir die include-Anweisung, um die Datei Trade.mqh zu importieren. Die ist Bestandteil von MQL5 und stellt uns vereinfachte Handelsfunktionen bereit. Dazu erstellen wir uns zunächst eine Instanz von der Klasse CTrade und geben ihr den Namen trade. In der OnTick-Funktion erstellen wir eine statische Variable vom Typ double. Die bekommt den Namen LastStopMovingAverageValue und wird den jeweils vorhergehenden Wert für unseren StopMovingAverage-Wert aufnehmen. Außerdem benötigen wir die Werte für den Ask Preis und den Bid Preis. Die liefert uns 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 stellen wir sicher, dass wir die richtige Anzahl von Nachkommastellen für jedes Währungspaar automatisch berechnen. Damit wir einen Stop Loss nachziehen können brauchen wir auch eine Testposition. Wenn also die Funktion PositionsTotal einen Wert kleiner 1 zurückliefert, dann heißt das: wir haben keine geöffnete Position. Und dann nutzen wir trade.Sell, um eine Position für 10 Microlot zu verkaufen. Im nächsten Schritt setzen wir hier den Wert für LastStopMovingAverageValue auf einen unrealistisch hohen Wert von 1.000. Man könnte hier den Wert auch hier auf 0 setzen, dann müssten wir aber eine zusätzliche Überprüfung einbauen, denn in der Regel wird bei einem SellTrailingStop geprüft, ob der aktuelle Stop Loss tiefer ist als der vorhergehende Wert und der wird niemals kleiner als 0. Darum machen wir das in diesem Fall einfach mal so. Für unseren einfachen gleitenden Durchschnitt erstellen wir jetzt ein Array. Das wird im nächsten Schritt mit ArraySetAsSeries von der aktuellen Kerze an abwärts sortiert. Und mit der in MQL5 enthaltenen Funktion iMA erstellen wir uns jetzt für das aktuelle Währungspaar auf dem Chart und die auf dem Chart ausgewählte Zeiteinheit für 500 Kerzen, ohne eine Verschiebung zu nutzen einen SimpleMovingAverage. Darum nutzen wir MODE_SMA. SMA steht für SimpleMovingAverage. Und wir möchten gerne, dass die Ergebnisse anhand der Schlusskurse berechnet werden. Mit CopyBuffer füllen wir jetzt unser MovingAverageArray anhand der Definition, die wir hier oben getroffen haben, und zwar für Buffer 0. Das ist diese Linie hier von dem gleitenden Durchschnitt. Wir starten bei der aktuellen Kerze 0 und füllen unser MovingAverageArray mit Werten für 3 Kerzen. Danach können wir den aktuellen Wert ermitteln indem wir uns einfach den Wert für Kerze 1 aus unserem Array herausholen. Zunächst einmal möchten wir wissen, ob der Wert für den Stop Loss Moving Average größer ist als der aktuelle Ask Preis und außerdem macht es nur dann Sinn, wenn sich der Wert so verändert hat, dass er jetzt niedriger ist als der letzte gemessene Wert, denn bei einem SellTrailingStop macht es keinen Sinn den Stop weiter nach oben zu schieben. Und wenn diese beiden Bedingungen wahr sind, dann möchten wir eine Funktion mit dem Namen CheckSMASellTrailingStop aufrufen. Der übergeben wir dann den aktuellen Bid Preis und den berechneten Wert für den StopMovingAverage-Wert. Anschließend weisen wir den aktuellen Wert der Variable LastStopMovingAverage-Wert zu. Denn diese Variable wird beim nächsten Mal ja genutzt. Und der aktuelle Wert ist beim nächsten Funktionsaufruf ja der letzte Wert. Unsere benutzerdefinierte Funktion hat keinen Rückgabetyp, also nutzen wir hier void. Der Name ist CheckSMASellTrailingStop und wir übergeben hier als Parameter 1 den Bid Preis und als zweiten Parameter den StopMovingAverage-Wert. Im Anschluss nutzen wir eine Vorschleife, um alle geöffneten Positionen durchzugehen so lange bis keine mehr übrig ist. Jetzt können wir mit der Funktion PositionGetSymbol für den aktuellen Schleifenzähler das Währungspaar ermitteln, zu dem die jeweilige Position gehört. Denn natürlich können wir Positionen von unterschiedlichen Währungspaaren haben. Wir möchten aber nur dann weiter machen, wenn das Währungspaar auf dem Chart mit dem Währungspaar von der Position übereinstimmt. Falls das passt, nutzen wir PositionGetInteger und übergeben den Parameter POSITION_TICKET. Das wird uns die Ticketnummer für die aktuelle Position liefern. Mit der Funktion PositionGetDouble und dem Parameter POSITION_SL holen wir uns für diese Position noch den aktuellen Stop Loss. Und jetzt prüfen wir, ob der aktuelle Stop Loss größer ist als der Wert für unseren gleitenden Durchschnitt oder ob wir gar keinen Stop Loss haben. In dem Fall ist der Wert 0 und wenn alle diese Bedingungen zutreffen können wir jetzt mit trade.PositionModify für das aktuelle Positionsticket den Stop Loss verschieben und auf den aktuellen Wert für StopMovingAverageValue anpassen. Dieser zweite Parameter hier steht auf 0. Den könnte man nutzen, um den TakeProfit-Wert anzupassen. Das wollen wir aber in diesem Beispiel nicht tun. Zum Schluss machen wir hier noch die beiden Schleifen zu und beenden die Funktion. Und das wars auch so weit. Wenn Ihnen das hier alles zu schnell ging oder wenn Sie keine Ahnung haben, was diese Codezeilen hier bewirken sollen, dann möchten Sie sich vielleicht die anderen Videos in dieser Grundlagenserie noch einmal anschauen. Vielleicht ist aber auch unser Premiumkurs auf der Webseite interessant für Sie, aber jetzt klicken wir hier erstmal auf kompilieren oder drücken die F7-Taste. Bei mir gab es keine Fehler und wenn das bei Ihnen auch so ist, dann können Sie jetzt hier oben klicken oder 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 hier die neu erstellte Datei SimplerSMASellTrailingStop.ex5 aus, markieren Sie hier unten die Option für den visuellen Modus und starten Sie Ihren Test. Hier sehen wir eine erste Position, die eröffnet worden ist. Wir müssen etwas in das Chart hineinzoomen dann sehen wir hier den Moving Average, also den gleitenden Durchschnitt. Und tatsächlich wird hier auch der Preis für den TrailingStop immer wieder angepasst. Unser Expert Advisor funktioniert also wie gewünscht. Und Sie haben in diesem kurzen Video gelernt, wie Sie für einen gleitenden Durchschnitt einen TrailingStop für Verkaufspositionen programmieren können. Und Sie haben das selbst getan, mit diesen paar Zeilen hier in MQL5.