MQL4 TUTORIAL GRUNDLAGEN – 102 SIMPLER BUY CROSSOVER STOP LOSS

video

 

In diesem Video wollen wir uns einmal anschauen, wie man einen Expert Advisor erstellen kann, der bei sich überkreuzenden gleitenden Durchschnitten hier eine Buy Position schließen kann. Das ist jetzt grade passiert. Also lassen Sie uns einmal schauen, wie man so etwas programmiert. Um das zu tun klicken Sie im Metatrader 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 mal den Namen SimplerBuyCrossoverStop, klicke auf Weiter, Weiter und Fertigstellen.

 

Jetzt kann hier alles oberhalb der OnTick Funktion gelöscht werden. Und auch die zwei Kommentarzeilen können weg. Wir starten damit, dass wir uns zunächst einmal eine Signal Variable erstellen. Die ist vom Typ String, damit sie einen Text aufnehmen kann und bekommt den Namen signal. Wir weisen hier aber noch keinen Wert zu. Danach berechnen wir uns den SmallMovingAverage. Das übernimmt die Funktion iMA für das aktuelle Währungspaar auf dem Chart und die auf dem Chart aktuell ausgewählte Zeiteinheit. Wir möchten den Wert gerne für zwanzig Kerzen berechnen. Der Verschiebungswert ist null. Wir nutzen hier MODE_SMA für Simple Moving Average. Man könnte aber beispielsweise auch EMA für exponentielle Moving Averages nutzen.

 

Das Ergebnis soll anhand der Schlusspreise berechnet werden und zwar für Kerze eins. Jetzt wiederholen wir das Ganze nochmal für den BigMovingAverage. Alles ist in etwa gleich, bis auf den Namen der Variable. Und diesmal berechnen wir das Ganze für fünfzig Kerzen. Das ermöglicht uns jetzt die Signale zu ermitteln. Und wenn der BigMovingAverage größer ist als der SmallMovingAverage für Kerze eins, dann setzen wir unser Signal auf sell. Im anderen Fall, wenn der BigMovingAverage für Kerze eins kleiner ist, als der SmallMovingAverage, dann halten wir das für ein buy Signal, also weisen wir den Begriff buy unserer Signal Variable zu. Und damit wir Positionen schließen können, wenn zwei gleitende Durchschnitte sich überkreuzen, müssen wir natürlich zunächst Positionen öffnen. Das bedeutet, wenn wir ein Kaufsignal haben und die Funktion OrdersTotal und einen Rückgabewert von null zurückliefert, das bedeutet, wir haben keine offene Position, aber ein Kaufsignal, dann nutzen wir OrderSend, um eine Testorder für zehn Mikrolot zu eröffnen.

 

Natürlich würde man das auf einem Echtgeldkonto nicht mit einer Testposition machen. Aber wenn wir keine geöffnete Position haben, können wir auch nichts schließen. Und sofern unser Signal den Wert sell hat und wir eine geöffnete Position haben, dann rufen wir diese Funktion mit dem Namen CloseBuyPositionsThisPair auf. Am Ende der OnTick Funktion möchte ich gerne noch eine Comment Ausgabe für das Chart haben. Die wird uns anzeigen: das aktuelle Signal ist… gefolgt von dem ermittelten Signal. Soweit so gut. Diese Funktion hier existiert aber noch gar nicht, also müssen wir die jetzt noch programmieren. Der Name unserer Funktion soll sein: CloseBuyPositionsThisPair. Wir nutzen hier void, da wir keinen Rückgabetyp benötigen.

 

Mit Hilfe einer for Schleife gehen wir alle offenen Positionen der Reihe nach durch. Für jede Order nutzen wir OrderSelect für den aktuellen Schleifenzähler, um die Position zu selektieren. Danach ermitteln wir das Währungspaar für die Position. Das übernimmt die Funktion OrderSymbol. Und nur, wenn das Währungspaar auf unserem Chart und das Währungspaar der Position übereinstimmen, möchten wir tätig werden. Zusätzlich prüfen wir noch, ob es sich um einen Kaufposition handelt. Das wäre der Fall, wenn die Funktion OrderType uns den Wert OP_BUY zurückliefert. Treffen diese Bedingungen zu, dann nutzen wir OrderClose für das aktuelle Order-Ticket und die aktuelle Positionsgröße, um die Position für den Bid Preis zu schließen. Unser Toleranzwert ist drei. Und der letzte Parameter hier steht für eine Farbe. Ich habe hier keinen Wert zugewiesen.

 

Aber üblicherweise wird das in Rot dargestellt. Zum Schluss schließen wir noch die for Schleife und die Funktion. Und das war es soweit auch. 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 finden Sie auf unserer Webseite. Für den Moment klicken wir hier auf Kompilieren oder drücken die F7 Taste. Das hat bei mir ohne Fehler funktioniert. Und wenn das bei Ihnen auch der Fall 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 Strg+R. Bitte wählen Sie hier die neu erstellte Datei SimplerBuyCrossoverStop.ex4 aus, markieren Sie die Option für den visuellen Modus und starten Sie Ihren Test.

 

Hier läuft unser Expert Advisor schon los. Wir sehen aber nichts von den gleitenden Durchschnitten. Darum stoppen wir das Ganze mal. Jetzt tauchen hier die beiden Durchschnitte auf. Und wir klicken mit der rechten Maustaste in das Chart. Wählen Vorlagen, Vorlage speichern. Und speichern das Ganze unter dem Namen tester.tpl, denn das ist der Name der Schablone, die beim nächsten Strategietest angezeigt wird. Den alten Wert können Sie hier überschreiben. Und wenn wir den Test jetzt erneut starten, dann sollten die gleitenden Durchschnitte direkt auf unserem Chart auftauchen. Das ist hier der Fall. Und sobald wir hier die erste Überkreuzung sehen, sollten wir auch sehen, dass unsere Position hier oben geschlossen wird. Das ist jetzt grade passiert.

 

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, für zwei sich überkreuzende gleitende Durchschnitte Buy Positionen zu eröffnen und bei erneuter Überkreuzung auch wieder zu schließen. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier in MQL4.