MQL5 TUTORIAL GRUNDLAGEN – 102 SIMPLER BUY CROSSOVER STOP LOSS

video

In diesem Video wollen wir uns einmal anschauen, wie man einen Expert Advisor programmieren kann, der in der Lage ist, bei sich überkreuzenden gleitenden Durchschnitten eine Buy Position zu eröffnen oder zu schließen. Also lassen Sie uns einmal schauen, wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie bitte im Metatrader 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 den Namen SimplerBuyCrossoverStop, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann hier alles oberhalb der OnTick Funktion hier gelöscht werden. Und auch die zwei Kommentarzeilen werden entfernt. Zunächst importieren wir hier mit dem include Befehl die Datei Trade.mqh. Die stellt die Klasse CTrade bereit. Und davon erstellen wir uns eine Instanz die wir später benutzen, um Positionen zu öffnen. Innerhalb der OnTick Funktion berechnen wir zunächst den Ask Preis. Das geht mit der Funktion SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart. Wir nutzen als Parameter SYMBOL_ASK. Und mit NormalizeDouble und _Digits stellen wir sicher, dass wir automatisch die richtige Anzahl von Nachkommastellen ermitteln. Das Ganze wiederholen wir dann nochmal für den Bid Preis. Und anschließend erstellen wir uns eine Variable für unser Signal. Außerdem benötigen wir zwei Arrays für einen Smal und für einen BigMovingAverage. Der SmallMovingAverage soll mit Hilfe der Funktion iMA erstellt werden. Und zwar für das aktuelle Währungspaar auf dem Chart, für die aktuell ausgewählte Zeiteinheit. Wir möchten das berechnen für zwanzig Kerzen, ohne Verschiebung.

 

Und wir nutzen hier MODE_SMA für Simple Moving Average. Sie könnten aber auch genauso gut MODE_EMA für exponentielle Movong Averages nutzen. Und das Ganze soll berechnet werden anhand der Schlusspreise. Jetzt wiederholen wir das nochmal für den BigMovingAverage. Diesmal machen wir das für fünfzig Kerzen. Und mit Hilfe von CopyBuffer füllen wir jetzt unsere beiden gleitenden Durchschnitte anhand der Definitionen die wir getroffen haben, für Buffer null, das ist die Signallinie, angefangen von Kerze null, das ist die aktuelle Kerze, für drei Kerzen und speichern die Ergebnisse entweder im SmallMovingAveragerArray oder hier im BigMovingAverageArray. Damit lassen sich jetzt die Signale ermitteln. Wenn der BigMovingAverageArray für die Kerze eins kleiner ist, als der SmallMovingAverageArray für Kerze eins, dann setzen wir unser Signal auf buy für kaufen. Anderenfalls, wenn der BigMovingAverageArray für Kerze eins größer ist, als der SmallMovingAverageArray für Kerze eins, dann setzen wir unser Signal auf verkaufen.

 

Und wenn wir ein solches Verkaufssignal haben, dann möchten wir unsere buy Positionen schließen. Sofern wir mehr als eine geöffnete Position haben, rufen wir hier eine Funktion CloseAllBuyPositionsThisPair auf. Im anderen Fall, wenn wir ein Signal zum Kaufen haben und wir keine geöffneten Positionen haben, dann nutzen wir trade.buy, um zehn Mikrolot zu kaufen. Bitte denken Sie daran, dass das hier Testpositionen sind. Die brauchen wir, damit wir etwas haben, was wir schließen können. Auf einem Echtgeldkonto würde man das so nicht machen. Und damit wir auch etwas sehen, fügen wir hier noch eine Comment Ausgabe auf dem Chart hinzu. Die wird uns den Text ausgeben: das aktuelle Signal ist… gefolgt vom ermittelten Signal. Diese Funktion hier existiert aber noch gar nicht, also müssen wir die jetzt programmieren. Der Name unserer Funktion ist CloseAllBuyPositionsThisPair. Wir nutzen void, da wir keinen Rückgabetyp benötigen. Jetzt gehen wir mit einer for Schleife alle offenen Positionen durch. Mit Hilfe von PositionGetTicket und dem Zähler in unserer Schleife ermitteln wir für jedes Ticket die entsprechende Ticketnummer. Und über PositionGetSymbol für den aktuellen Zähler ermitteln wir das Währungspaar. Danach brauchen wir noch die Positionsrichtung. Die bekommen wir über PositionGetInteger. Und der Parameter dafür ist POSITION_TYPE. Und da wir nur für buy Positionen tätig werden möchten, prüfen wir jetzt, ob die Positionsrichtung uns sagt, dass wir eine buy Position haben.

 

Falls das so ist und das aktuelle Währungspaar auf dem Chart dem Währungspaar unserer Position entspricht, möchten wir dann mit Hilfe von trade.PositionClose das aktuelle Ticket schließen. Zum Schluss schließen wir hier noch den for loop und unsere Funktion. Das war es soweit. Wenn Ihnen das hier zu schnell ging oder wenn Sie keine Ahnung haben, was alle diese Code Zeilen bewirken sollen, dann möchten Sie sich vielleicht zunächst ein anderes Video aus der Grundlagenserie anschauen. Vielleicht ist aber auch der Premiumkurs interessant für Sie. Den können Sie auf unserer Webseite finden. Für den Moment klicken wir hier auf Kompilieren oder drücken die F7 Taste. Ich habe hier noch irgendwo eine überschüssige Klammer vergessen.

 

Die entfernen wir jetzt noch und kompilieren erneut. Das hat diesmal ohne Fehler funktioniert. Und wenn das bei Ihnen auch so ist, dann können Sie jetzt hier oben auf dieses kleine Symbol 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 Ctrl+R. Das ruft dann hier den Strategietester auf. Bitte wählen Sie hier die neu erstellte Datei SimplerBuyCrossoverStopLoss.ex5 aus, markieren Sie hier die Option für den visuellen Modus und starten Sie Ihren Test.

 

Hier läuft unser erster buy Trade schon los. Und wenn sich die zwei gleitenden Durchschnitte hier überkreuzen oder der take Profit erreicht wird, dann sollte die Position geschlossen werden, was jetzt grade passiert ist. Bei einer erneuten Überkreuzung wird eine neue Position eröffnet. Unser Expert Advisor funktioniert also wie gewünscht. Und Sie haben in diesem kurzen Video gelernt, wie Sie einen Expert Advisor programmieren können der in der Lage ist, bei sich überkreuzenden Durchschnitten eine Buy Position zu schließen. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier in MQL5.