In diesem Beitrag zeigen wir dir, wie du mit einem einfachen Code einen neuen Bar oder eine neue Kerze im MetaTrader 5 erkennen kannst.
Das Grundprinzip des Codes ist denkbar einfach. Zuerst speichert der Code die Zeit des vorherigen Bars. Anschließend wird 60 Sekunden (entspricht 1 Minute) zur Zeit des vorherigen Bars addiert, um den Schlusszeitpunkt des aktuellen Bars zu berechnen.
Wenn dann:
Aktuelle Zeit = Schlusszeitpunkt des aktuellen Bars, bedeutet das, dass ein neuer Bar empfangen wurde und der aktuelle Bar geschlossen ist.
In diesem Code verhindert das Flag (die boolesche Variable NewBarReceived), dass dieser Codeblock mehrfach aufgerufen wird. Das bedeutet, dass dieser Codeblock nur einmal pro Bar/Kerze ausgeführt wird. Die Comment(); und die PlaySound("ok.wav"); Funktionen werden verwendet, um die Genauigkeit des Codeblocks zu überprüfen. Du kannst sie entfernen, wenn du möchtest.
Das Flag wird zurückgesetzt, sobald die aktuelle Zeit über dem Schlusszeitpunkt der aktuellen Kerze liegt, um die Ankunft des nächsten Bars zu überprüfen. (Siehe Kommentare dazu).
//+------------------------------------------------------------------+ //| New Bar Detect.mq5 | //| by H A T Lakmal | //| https://t.me/Lakmal846 | //+------------------------------------------------------------------+ bool NewBarReceived = false; // Flag zur Kontrolle. //+------------------------------------------------------------------+ //| Experteninitialisierungsfunktion | //+------------------------------------------------------------------+ int OnInit() { //--- Timer erstellen EventSetTimer(60); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Experten-Deinitialisierungsfunktion | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Timer zerstören EventKillTimer(); } //+------------------------------------------------------------------+ //| Experten-Tickfunktion | //+------------------------------------------------------------------+ void OnTick() { datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1); datetime TimeCurrentClose = TimePreviousBar + 60; // Schlusszeit des aktuellen Bars. datetime Time_Current = TimeCurrent(); if(Time_Current == TimeCurrentClose && NewBarReceived == false) { PlaySound("ok.wav"); // Überprüfung der Funktionalität. NewBarReceived = true; // Flag aktualisieren, um mehrfachen Aufruf zu vermeiden. // Dein Code kommt hier hin ----- (Mach etwas) } else if(Time_Current > TimeCurrentClose) { NewBarReceived = false; // Flag zurücksetzen für den nächsten Bar. // Dein Code kommt hier hin ----- (Mach etwas) } Comment(" " + " " + "Aktueller Bar Zeit -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + "Aktueller Schlusszeit -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + "Aktuelle Zeit -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " +" " + "Neuer Bar empfangen -: " + NewBarReceived); // Zur Überprüfung der Berechnungen } //+------------------------------------------------------------------+ //| Timerfunktion | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ //| Handelsfunktion | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+ //| ChartEvent-Funktion | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+
Kommentar 0