MQL5 TUTORIAL GRUNDLAGEN – 75 SIMPLER TIME FILTER

video
play-sharp-fill

In diesem Video wollen wir uns einmal anschauen, wie man einen Zeitfilter programmieren kann. So um neun Uhr wird der hier umspringen und wir sehen die erste Position. Also lassen Sie uns einmal schauen, wie man so etwas in MQL5 programmieren kann. Um das zu tun, klicken Sie im Metatrader bitte auf dieses kleine Symbol hier 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 einmal den Namen SimplerTimeFilter, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb dieser OnTick Funktion hier gelöscht werden. Und auch die zwei Kommentarzeilen werden entfernt. Wir starten mit einem include Statement. Das wird uns die Datei Trade.mqh zur Verfügung stellen. Die enthält vereinfachte Handelsfunktionen. Und wir erstellen uns hier eine Instanz von der Klasse CTrade. Die bekommt den Namen trade und die werden sie später verwenden, um Positionen zu eröffnen. Im ersten Schritt erstellen wir uns hier eine string Variable für das Signal. Die kann Textketten aufnehmen, aber wir hier noch keinen Wert zu. Im nächsten Schritt erstellen wir eine input Variable. Die wird uns eine Eingabe ermöglichen. Auch die ist vom Typ string. Sie heißt StartTradingTime, denn sie soll die Startzeit für unsere erlaubten Trades festlegen. In diesem Fall nehmen wir hier neun Uhr morgens. Dann wiederholen wir das Ganze noch einmal für eine StopTradingTime. Das hier ist das Ende des erlaubten Zeitfensters. Also, in diesem Fall dürfen wir nur zwischen neun Uhr und zehn Uhr morgens Positionen eröffnen. Wir brauchen eine weitere Variable für die aktuelle Zeit. Und für unseren Filter gibt es hier noch eine Variable TradingIsAllowed. Es handelt sich um eine bool Variable. Das bedeutet, die kann entweder den Wert true für wahr oder false für falsch annehmen. Innerhalb der OnTick Funktion starten wir damit, dass wir mit SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart den Ask Preis berechnen. Das geht mit diesem Parameter SYMBOL_ASK. Und mit NormalizeDouble und _Digits stellen wir sicher, dass wir für das jeweilige Währungspaar die richtige Anzahl von Nachkommastellen automatisch ermitteln. Danach berechnen wir die lokale Zeit. Das übernimmt die Funktion TimeLocal. Die liefert uns die lokale Zeit des Computers zurück, auf dem das Client-Terminal läuft. Und im nächsten Schritt konvertieren wir mit der Funktion TimeToString diese ermittelte Zeit in eine Textkette. Hier übergeben wir als Parameter TIME_MINUTES. Wenn man das einmal markiert und die F1 Taste drückt, dann sieht man hier, dass die Zeit in unterschiedlichen Formaten zurückgegeben werden kann. Das von uns gewählte Format gibt uns die Stunden und Minuten geteilt von einem Doppelpunkt zurück. Um zu prüfen, ob wir uns innerhalb des Zeitfensters befinden, das wir definiert haben, möchte wir eine Funktion CheckTradingTime verwenden. Und nur, wenn die auf true steht, dann soll die Eröffnung einer neuen Position möglich sein. Diese Funktion existiert allerdings noch nicht. Darum müssen wir die gleich programmieren. Die zweite Bedingung die wir prüfen ist, ob uns die Funktion PositionsTotal einen Wert von null zurückliefert. Das bedeutet, wir haben keine geöffneten Positionen. Und wenn beides zutrifft, dann nutzen wir hier trade.buy, um eine Position für zehn Mikrolot hier zu eröffnen. Außerdem hätte ich gerne noch eine Chartausgabe. Die wird uns den Rückgabewert für den Trading Filter: die aktuelle Zeit und die Start- und die Stopp Zeit direkt auf unserem Chart ausgeben. Programmieren wir jetzt unsere benutzerdefinierte Funktion mit dem Namen CheckTradingTime. Die hat den Rückgabewert bool, kann also nur true für wahr oder false für falsch zurückgeben. Und wenn in dem ermittelten Wert für die aktuelle Zeit der Wert für unsere definierte StartTradingTime gefunden werden kann, dann setzen wir die Variable TradingIsAllowed auf true. Wenn man diese Funktion einmal markiert und die F1 Taste drückt, dann sieht man: wir suchen in einem string von einer Start- bis zu einer Endposition nach einem bestimmten Wert. Und diesen Wert haben wir ja hier oben definiert. Jetzt wiederholen wir das Ganze nochmal für die StopTradingTime. Und wenn unsere StopTradingTime in unserer aktuellen Zeit gefunden werden konnte, dann setzen wir hier unsere Variable für die Trading Erlaubnis auf falsch, also false. Zum Schluss nutzen wie die return Funktion, um das ermittelte Ergebnis hier an die Hauptfunktion zurückzugeben. Das war es soweit. Wenn Sie nicht verstehen, was alle diese Code Zeilen hier bewirken sollen oder wenn Ihnen das hier alles zu schnell ging, dann möchten Sie sich vielleicht erst einmal die anderen Videos aus dieser Grundlagenserie noch einmal anschauen. Oder vielleicht ist auch der Premiumkurs auf unserer Webseite interessant für Sie. Das hier war übrigens wieder ein Vorschlag von einem Premium Mitglied. Und wenn Sie bereits Premium Mitglied sind und eine Idee für so ein Video haben, dann schicken Sie mir einfach ein E-Mail. Soweit so gut. Wir klicken jetzt hier auf Kompilieren. Das sollte ohne Fehler funktionieren. Und wenn das bei Ihnen auch so ist, dann können Sie jetzt auf dieses kleine Symbol 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 Ctrl+R. Das ruft dann hier den Strategietester auf. Und hier wählen wir jetzt die neu erstellte Datei SimplerTimeFilter.ex5 aus, markieren hier unten die Option für den visuellen Modus und starten unseren Test. Hier läuft der Expert Advisor auch schon los. So gegen neun Uhr sollte die erste Position eröffnet werden. Das ist jetzt gleich der Fall. Unser Expert Advisor funktioniert also wie gewünscht. Und Sie haben in diesem kurzen Video gelernt, wie Sie mit MQL5 einen Expert Advisor programmieren können, der eine Trading Erlaubnis auf wahr oder falsch setzt, basierend auf den Zeitfenstern, die Sie selbst angeben. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier in MQL5.