MQL5 Tutorial Deutsch – Simpler Order Cancels Order Expert Advisor

video
play-sharp-fill

Heute möchten wir uns mit einem Expert Advisor beschäftigen der oberhalb und unterhalb des aktuellen Kurses eine pending Order in Form eines Buy Stop oder eines Sell Stop erstellt und sobald hier unser Preis eine der beiden Linien erreicht, wird aus der Order eine Position erstellt und die jeweils andere Order soll gelöscht werden.

Diese Technik nennt man „Order cancels Order“.

Wir beschleunigen das hier mal ein wenig um zu zeigen wie das funktioniert.

Und jetzt ist hier unten eine Buy Position erstellt worden und die offene Order ist verschwunden.

Wie können wir jetzt einen Expert Advisor erstellen der genau diese Funktionalität bereit stellt?

Um das zu tun klicken wir hier oben auf den kleinen Button oder drücken die F4-Taste, das ruft dann hier den Metaeditor auf und hier wählen wir Datei – Neu – Expert Advisor aus Vorlage – Weiter – ich vergebe hier einmal den Namen „SimplerCancelOrderEA“ – klicke auf Weiter – Weiter – Fertigstellen.

Jetzt können wir alles oberhalb der OnTick Funktion löschen und auch die Kommentarzeilen werden entfernt.

Damit wir etwas haben, was wir handeln können, importieren wir zunächst einmal die Datei „Trade.mqh“ und erstellen uns, aus der dort enthaltenen Klasse CTrade, eine Instanz mit dem Namen „trade“.

In der OnTick Funktion möchten wir zunächst einmal die Konto Balance ermitteln.

Das machen wir mit „AccountInfoDouble“ und dafür benutzen wir die Konstante „ACCOUNT_BALANCE“.

Ähnlich wird die Equity ermittelt, auch hier nutzen wir „AccountInfoDouble“ und die Konstante „ACCOUNT_EQUITY“.

Die Variable Balance nimmt also unser Brutto Guthaben auf und die Variable Equity enthält unser nicht gebundenes Netto Guthaben, nach Abzug aller offenen Trades und Kosten.

Für Long Trades benötigen wir den Ask Preis, der wird mit „SymbolInfoDouble“ für das aktuelle Chart und die Konstante „SYMBOL_ASK“ ermittelt.

Die Funktion „NormalizeDouble“ in Verbindung mit „_Digits“ sorgt dafür, dass wir die richtige Anzahl von Nachkommastellen ermitteln, denn es gibt Währungspaare mit 3 und andere mit 5 Nachkommastellen.

Ähnlich ermitteln wir den Bid Preis, allerdings nutzen wir hier „SYMBOL_BID“.

Den Bid Preis benötigen wir für Short Trades.

Wir möchten Test Orders eröffnen wenn keine Positionen und auch keine Order geöffnet sind, das ist der Fall wenn die Funktion „PositionsTotal“ und „OrdersTotal“ jeweils den Wert 0 ergeben.

Und wenn das der Fall ist, dann eröffnen wir mit „trade.BuyStop“ und „trade.SellStop“ jeweils eine Order von 10 Microlot.

Die Long Order wird 100 Punkte über dem derzeitigen Ask Preis liegen und die Short Order liegt 100 Punkte unterhalb des Bid Preises.

Das gilt jeweils für das aktuelle Chart, wir haben keinen Stop Loss definiert und unser Take Profit soll für die Long Order 300 Punkte oberhalb des derzeitigen Ask Preises liegen und genauso gilt das für den Bid Preis, da liegt sie 300 Punkte darunter.

Diese Konstante hier „ORDER_TIME_GTC“ wird benutzt wenn die Order solange gültig sein soll bis wir sie selbst löschen.

In Deutsch ist das etwas unglücklich mit „Warteorder vor der Ablehnung“ übersetzt.

Andernfalls würden wir hier und hier ein Ablaufdatum setzen, das wir aber in diesem Fall nicht nutzen und auch der letzte Parameter wird mit einer 0 besetzt, denn für dieses einfache Beispiel benötigen wir keinen Kommentar.

Und wenn wir gerade traden, wenn also unser Brutto Guthaben ungleich ist zu unserem Netto Guthaben, dann rufen wir die noch zu erstellende Funktion „CancelOrder“ auf, die unsere offene Order löschen soll.

Dazu erstellen wir hier eine neue Funktion vom Typ Void, da wir keine Rückgabewerte benötigen und diese Funktion bekommt den Namen „CancelOrder“.

Das erste was wir in der Funktion tun, ist mit einer for-Schleife über den Zähler i, von der, mit OrdersTotal ermittelten Gesamtanzahl aller offenen Orders, abzüglich 1, solange wie noch offene Order bestehen, den Zähler herunter zu zählen und für den Zähler der jeweiligen Position mit OrderGetTicket, das aktuelle Order Ticket zu ermitteln.

Denn mit dem Ticket können wir mittels „trade.OrderDelete“ und der ermittelten Orderticket Nummer, alle ungeöffneten Orders der Reihe nach löschen.

Im letzten Schritt schliessen wir noch den for-Loop, mit dem wir hier die Orders durchgezählt haben und mit dieser Klammer hier definieren wir das Ende unserer Funktion.

Jetzt klicken Sie bitte hier oben auf den kleinen Button oder drücken die F7-Taste um den Code zu kompilieren und wenn alles geklappt hat, sollten Sie hier keine Fehler haben und dann können wir hier klicken oder mit der F4-Taste zurückkehren in den Metatrader.

Im Metatrader klicken wir auf Ansicht – Strategietester, oder drücken die Tastenkombination STRG+R und hier wählen wir die Funktion SimplerCancelOrderEA.ex5 aus, aktivieren hier die Visualisierung und starten unseren Test.

Und wie man sieht werden hier zwei offene Orders erstellt und sobald sich unser Preis dieser Linie nähert, wird daraus eine Buy Position generiert.

Sie haben in diesem Video hier gelernt wie man einen Expert Advisor erstellt, der einen Buy Stop und einen Sell Stop, oberhalb und unterhalb des aktuellen Preises platziert und beim Erreichen der entsprechenden Linie, die andere Position löscht.

Und Sie haben das selbst programmiert, mit diesen paar Zeilen in MQL5.
Download “MQL5 - Simpler Order Cancels Order Expert Advisor vom MQL5 Tutorial” SimplerCancelOrderEA.txt – 267-mal heruntergeladen – 1,50 kB