Startseite Systemhandel Beitrag

So erkennst du den Beginn einer neuen Kerze im MetaTrader 5

Anhang
41601.zip (795 bytes, Herunterladen 0 mal)

Wenn du einen Expert Advisor (EA) programmierst, wird bei jedem neuen Tick, den MetaTrader erhält, die Standardfunktion OnTick() aufgerufen. Doch leider gibt es keine Standardfunktion, die den Start einer neuen Kerze erkennt.

Um dies zu realisieren, musst du die Eröffnungszeit der letzten Kerze überwachen. Wenn sich diese ändert, bedeutet das, dass eine neue Kerze beginnt. An dieser Stelle kannst du entsprechend reagieren und das Ereignis behandeln. Im folgenden Codebeispiel, das sowohl mit MQL4 als auch mit MQL5 kompatibel ist, zeige ich dir eine Methode, wie du das umsetzen kannst:

// Standard Tick-Ereignis-Handler
   void OnTick()
   {
      // Prüfe auf eine neue Kerze (kompatibel mit MQL4 und MQL5).
         static datetime dtAktuelleKerze   = WRONG_VALUE;
                datetime dtVorherigeKerze = dtAktuelleKerze;
                         dtAktuelleKerze   = iTime( _Symbol, _Period, 0 );
                bool     bNeueKerze  = ( dtAktuelleKerze != dtVorherigeKerze );

      // Reagiere auf das Ereignis einer neuen Kerze und gehe mit der Situation um.
         if( bNeueKerze )
         {
            // Prüfe, ob dies der erste Tick ist, der empfangen wurde, und gehe mit der Situation um.
               /* Zum Beispiel, wenn der EA zum ersten Mal auf das Diagramm angewendet wird und die Kerze irgendwo mitten im Fortschritt ist und nicht wirklich der Beginn einer neuen Kerze ist. */
               if( dtVorherigeKerze == WRONG_VALUE )
               {
                  // Mache etwas beim ersten Tick oder in der Mitte einer Kerze ...
               }
               else
               {
                  // Mache etwas, wenn eine normale Kerze erscheint ...
               };

            // Mache etwas unabhängig von der vorherigen Bedingung ...
         }
         else
         {
            // Mache etwas anderes ...
         };

      // Mache weitere Dinge ...
   };

In diesem Code behält die statische Variable die Eröffnungszeit der Kerze im Gedächtnis, auch wenn die Funktion OnTick() verlassen wird. Im Gegensatz zu einer normalen lokalen Variable merkt sie sich ihren Dateninhalt und gibt ihn nicht beim Verlassen der Funktion frei. Das ist der Schlüssel zur Erkennung einer Änderung der Eröffnungszeit der aktuellen Kerze.

Es ist auch wichtig zu beachten, dass der EA, wenn er zum ersten Mal auf ein Diagramm gesetzt wird, so reagiert, als ob die Kerze gerade eröffnet wurde. Diese Bedingung erfordert eine besondere Behandlung, wenn die Situation anders gehandhabt werden muss.

Bitte beachte, dass der Quellcode für alle meine CodeBase-Veröffentlichungen jetzt auch über die "Öffentlichen Projekte" im MetaEditor unter dem Namen "FMIC" verfügbar ist.

Verwandte Beiträge

Kommentar (0)