Heute möchten wir uns einmal einen Break Even Stop ansehen. Das bedeutet, sobald hier der Kaufpreis um 200 Punkte nach oben überschritten wird, wird der Stop auf den Kaufpreis gesetzt damit wir keine Verlust mehr machen. In diesem Fall warten wir jetzt hier bis die 200 Punkte erreicht sind, dann dürfte diese grüne Linie hier rot werden und sich vom Buypreis in den aktuellen Stop verwandeln, das ist jetzt hier gerade geschehen. Und ab hier kann man dann den Trade laufen lassen oder den Stop von Hand nachziehen. Wie kann man jetzt einen solchen Break Even Stop programmieren? Um das zu tun, klicken wir im Metatrader hier oben auf den kleinen Button oder drücken die F4-Taste. Das startet dann hier den Metaeditor und hier wählen wir, Datei – Neu – Expert Advisor aus Vorlage – Weiter – Ich vergebe hier einmal den Namen FortgeschrittenerBreakEvenStop – klicke auf Weiter – Weiter – Fertigstellen. Alles oberhalb der OnTick Funktion hier kann jetzt gelöscht werden und danach entfernen wir die zwei Kommentarzeilen. Damit wir etwas traden können, was einen Break Even Stop nachzieht, importieren wir erst einmal die Datei Trade.mqh. Es handelt sich hierbei um eine interne Bibliothek von MQL5 die Verwaltungs- und Öffnungs- und Schliess-Funktionen für Trades enthält. Und jetzt erstellen wir uns von Ctrade eine Instanz mit dem Namen trade. Hier steht es auch, Klasse CTrade: Ctrade ist eine Klasse für den vereinfachten Zugriff auf die Handelsfunktionen. Da wir uns eine Buyposition eröffnen möchten, holen wir uns zunächst einmal den Askpreis. Das machen wir mit der Funktion SymbolInfoDouble, für das aktuelle Währungspaar und wir nutzen die Konstante SYMBOL_ASK um den Askpreis zu ermitteln. Wenn man hier F1 drückt, dann sieht man dass man sich mit SYMBOL_BID, den Bidpreis, also das beste Verkaufsangebot, holen kann. Das würden wir brauchen wenn wir einen Shorttrade eröffnen möchten. Mit NormalizeDouble und _Digits stellen wir sicher, dass wir die richtige Anzahl von Nachkommastellen erhalten, denn es gibt Währungspaare mit drei oder mit fünf Nachkommastellen. Wenn keine Positionen geöffnet sind, wenn also die Funktion PositionsTotal kleiner eins ist, dann eröffnen wir eine Buyposition zu Testzwecken, deswegen bitte nicht auf einem Echtgeldkonto handeln. Wir machen das in diesem Falle mit Trade.Buy, unsere Positionsgröße beträgt zehn Microlot, wir handeln das auf dem aktuellen Chart, kaufen zum Askpreis, der initiale Stoploss wird 1000 Punkte unter unserem Askpreis gesetzt und unser Takeprofit liegt 500 Punkte darüber. Der letzte Parameter hier wäre ein Kommentar, den benötigen wir nicht, also nutzen wir hier NULL. Nachdem wir jetzt eine Position eröffnet haben rufen wir eine Funktion auf die den Break Even Stop setzen soll, die wird den Namen CheckBreakEvenStop haben und bekommt als Parameter den Askpreis, den wir hier oben ermittelt haben. Unsere neue Funktion ist vom Typ void, hat also keinen Rückgabewert, bekommt den Namen CheckBreakEvenStop und benötigt den Askpreis als übergebenen Parameter. Im ersten Schritt zählen wir hier alle offenen Positionen durch, das machen wir mit dieser for-Schleife hier, unser Zähler bekommt den Namen i, zählt von der Gesamtanzahl der Positionen minus 1 runter, solange wie i noch grösser ist als null, also wie wir noch offene Positionen haben wird von i eins abgezogen und die Schleife geht von vorne los. Und in dieser for-Schleife werden wir mit PositionGetSymbol für unseren Zähler das Währungspaar für die aktuelle Position ermitteln. Wenn das Währungspaar auf dem Chart mit dem Währungspaar für unsere aktuelle Position identisch ist, if, _Symbol==Symbol, dann ermitteln wir die aktuelle Ticket Nummer für die Position. Das geht mit PositionGetInteger und wir benutzen die Konstante POSITION_TICKET. Danach berechnen wir den Eröffnungspreis der Position, das geht mit PositionGetDouble und wir nutzen POSITION_PRICE_OPEN. Die beiden ermittelten Werte werden in der Variable PositionTicket und PositionBuyPrice gespeich...