Neuen Bar oder Kerze erkennen – Einfache Methode für MetaTrader 4

Mike 2022.04.24 09:46 25 0 0
Anhang

Wenn Sie mit einem Handelsroboter (EA) arbeiten, dann wissen Sie, dass das MetaTrader-Terminal bei jedem neuen Tick den Standard-Ereignisbehandlungsfunktion OnTick() aufruft. Allerdings gibt es keine standardmäßige Ereignisbehandlungsfunktion, die erkennt, wann eine neue Bar (Kerze) beginnt.

Um dies zu erkennen, müssen Sie die Öffnungszeit der aktuell letzten Bar überwachen. Sobald sich diese ändert, signalisiert das den Beginn einer neuen Bar, und Sie können darauf reagieren und das Ereignis verarbeiten. Der folgende Beispielcode, der sowohl mit MQL4 als auch mit MQL5 kompatibel ist, zeigt Ihnen, wie Sie dies umsetzen können:

// Standard Tick-Ereignisbehandler
  void OnTick()
  {
      // Überprüfen auf neue Bar (kompatibel mit MQL4 und MQL5).
        static datetime dtBarAktuell  = WRONG_VALUE;
                datetime dtBarVorherige = dtBarAktuell;
                         dtBarAktuell  = iTime( _Symbol, _Period, 0 );
                bool     bNeueBarEreignis  = ( dtBarAktuell != dtBarVorherige );

      // Auf ein neues Bar-Ereignis reagieren und es verarbeiten.
        if( bNeueBarEreignis )
        {
            // Prüfen, ob dies der erste empfangene Tick ist und entsprechend handeln.
              /* Zum Beispiel, wenn der EA zum ersten Mal an ein Chart angehängt wird und
                  die Bar sich irgendwo in der Mitte ihres Fortschritts befindet und
                  es sich nicht tatsächlich um den Beginn einer neuen Bar handelt. */
              if( dtBarVorherige == WRONG_VALUE )
              {
                  // Etwas beim ersten Tick oder in der Mitte der Bar tun ...
              }
              else
              {
                  // Etwas tun, wenn eine normale Bar beginnt ...
              };

            // Irgendetwas tun, unabhängig von der oben genannten Bedingung ...
        }
        else
        {
            // Etwas anderes tun ...
        };

      // Andere Dinge tun ...
  };

In dem obigen Code hält die statische Variable die Öffnungszeit der Bar fest, selbst wenn Sie die Funktion OnTick() verlassen. Im Gegensatz zu einer normalen lokalen Variable speichert sie ihren Dateninhalt und gibt ihn nicht beim Verlassen der Funktion frei. Dies ist der Schlüssel, um eine Änderung der Öffnungszeit der aktuellen Bar zu erkennen.

Es ist auch wichtig zu beachten, dass der EA beim ersten Platzieren auf einem Chart so reagiert, als ob die Bar gerade eröffnet wurde. Diese Bedingung erfordert eine besondere Behandlung, wenn die Situation anders gehandhabt werden muss.

Bitte beachten Sie, dass der gesamte Quellcode meiner CodeBase-Veröffentlichungen jetzt auch im Tab "Öffentliche Projekte" von MetaEditor unter dem Namen "FMIC" verfügbar ist.

Liste
Kommentar 0