MQL5 TUTORIAL GRUNDLAGEN – 56 SIMPLER POSITION CLOSE TIMER

video
play-sharp-fill

In diesem Video wollen wir uns einmal anschauen, wie man Positionen nach einer bestimmten Zeit schließen kann. In unserem Fall haben wir hier zwei Testpositionen eröffnet. Wir sehen hier eine Lokalzeit. Wir sehen eine Eröffnungszeit für die Position. Und sobald eine Stunde rum ist, werden Positionen geschlossen, die im Minus sind. Wir haben hier schon ein paar Positionen eröffnet und geschlossen. Das Ganze war eine Anfrage von einem Kursmitglied aus dem Premiumkurs. Und wir wollen uns jetzt einmal anschauen, 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 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 SimplerCloseTimer, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb der OnTick Funktion hier gelöscht werden. Und wir entfernen auch die zwei Kommentarzeilen. Wir starten mit einem include Befehl für die Datei Trade.mqh. Danach erstellen wir uns eine Instanz mit dem Namen trade. Die benötigen wir gleich zur Eröffnung von Testpositionen. Dazu müssen wir zunächst den Ask-Preis und den Bid-Preis ermitteln. Das übernimmt für uns die Funktion SymbolInfoDouble. Wir nutzen SYMBOL_ASK beziehungsweise SYMBOL_BID. Und mit NormalizeDouble und _Digits formatieren wir das Ganze je nach Währungspaar. Denn manche Währungspaare haben drei und andere fünf Nachkommastellen. Danach möchten wir ermitteln, ob der Wert für die Funktion PositionsTotal gleich null ist. Denn dann haben wir keine Position geöffnet. Und in dem Fall nutzen wir trade.Buy beziehungsweise trade.Sell, um jeweils eine Testposition zu eröffnen. Das würde man natürlich nicht auf einem Echtgeldkonto machen. Aber um Positionen im Strategietester schließen zu können, muss ich Positionen zunächst eröffnen. In diesem Fall ohne besonderes Einstiegskriterium. Denn, wir möchten ja unsere Positionen nach einer Stunde schließen, wenn sie nicht im Profit sind. Dazu rufen wir eine Funktion CheckCloseTimer auf. Die gibt es aber noch nicht. Also müssen wir die jetzt noch programmieren. Die Funktion selbst hat keinen Rückgabewert. Darum nutzen wir hier void. Und wir nutzen eine for Schleife, um alle Positionen der Reihe nach durchzugehen. Für jede gefundene Position ermitteln wir die Ticket Nummer mit der Funktion PositionGetTicket. Danach ermitteln wir die Eröffnungszeit der Position. Das geht über die Funktion PositionGetInteger. Und als Parameter übergeben wir hier POSITION_TIME. Wenn man das markiert und die F1 Taste drückt, dann lernen wir, POSITION_TIME gibt uns die Eröffnungszeit der Position im datetime Format zurück. Und datetime unterstützt hier bestimmte Formatierungstypen. Grundsätzlich bekommen wir aber eine Sekundenanzahl seitdem 1. Januar 1970 zurück. Für Menschen ist das nicht besonders gut lesbar. Darum erstellen wir uns jetzt hier eine Struktur vom Typ MqlDateTime. Eine Struktur kann man sich als Zusammenschluss von logischen Elementen vorstellen. In unserem Fall gibt es alle diese Rückgabewerte hier. Und wir möchten gerne die Stunde haben, damit wir nach einer oder mehreren Stunden Positionen schließen können, die nicht in den Profit gelaufen sind. Erstellen wir uns also hier eine Struktur mit dem Namen MyOpenTime. Danach nutzen wir diese Funktion hier, um unsere Zeit in eine Struktur zu konvertieren. Denn das ermöglicht es uns, innerhalb dieser Struktur auf die Stunde zuzugreifen. Jetzt wiederholen wir das Ganze nochmal. Diesmal für die Lokalzeit. TimeLocal gibt uns die lokale Zeit des Computers zurück. Aber nicht vom Windows Betriebssystem, sondern vom Strategietester. Auch hier erstellen wir uns eine Struktur mit MqlDateTime, konvertieren das Ganze mit TimetoStruct und ermitteln die aktuelle Stunde, indem wir aus der Struktur den Wert Punkt Hour extrahieren. Danach berechnen wir die Differenz, indem wir von der aktuellen Stunde den Wert für die Eröffnungsstunde abziehen. Darunter erstellen wir eine Print Ausgabe für die Werte unserer Positionen. Normalerweise würde ich hier Comment bevorzugen. Aber da wir mehrere Positionen haben, brauchen wir alle diese Ausgaben jeweils für die entsprechende Position. Und da wir ja nur schließen möchten, wenn die Position nicht im Profit ist, müssen wir uns den Positionsprofit hier noch ermitteln. Das übernimmt die Funktion PositionGetDouble mit dem Parameter POSITION_PROFIT. Und jetzt können wir endlich ermitteln, ob die Anzahl an Stunden vergangen sind, die wir abwarten möchten. In unserem Fall würde ich hier prüfen, nachdem die erste Stunde vergangen ist. Für einen Datumswechsel müsste man das hier noch ergänzen. Aber am gleichen Handelstag funktioniert das. Denn, wenn die Position im Minus ist, wenn als der Positionsprofit kleiner ist als null, dann nutzen wir hier trade.PositionClose für die aktuelle Ticket Nummer, um unsere Position zu schließen. Zum Schluss beenden wir noch die for Schleife und die Funktion. Und das war es soweit. Wenn Ihnen das hier alles zu schnell ging oder wenn Sie nicht verstehen, was diese Code Zeilen hier bewirken, dann möchten Sie sich vielleicht zunächst die Grundlagen Videos aus dieser Video Serie anschauen. Oder vielleicht ist auch der Premiumkurs auf unserer Webseite interessant für Sie. Wir klicken jetzt hier mal auf Kompilieren. Das hat in meinem Fall ohne Fehler funktioniert. Und darum können wir 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 jetzt auf Ansicht, Strategietester oder drücken die Tastenkombination Ctrl+R. Bitte wählen Sie hier die neu erstellte Datei SimplerCloseTimer.ex5 aus. Markieren Sie die Option für die Visualisierung und starten Sie Ihren Test. Hier läuft das Ganze jetzt los. Wir haben zwei geöffnete Positionen. Beschleunigen wir das Ganze mal deutlich. Dann sollten wir nach einer Stunde sehen, dass sich hier Einiges getan hat. Wir haben bereits eine ganze Anzahl von Positionen gehandelt. Und Sie haben in diesem kurzen Video gelernt, wie Sie mit MQL5 eine Expert Advisor programmieren können, der in der Lage ist, nichtprofitable Positionen nach einer oder mehreren Stunden zu schließen. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier, in MQL5.