Home Trading Sistematico Post

Come Rilevare l'Inizio di un Nuovo Bar in MetaTrader 5

Allegato
39103.zip (884 bytes, Scarica 0 volte)

Quando si utilizza un Expert Advisor (EA) su MetaTrader, ogni volta che arriva un nuovo tick, il terminale chiama la funzione di gestione eventi predefinita OnTick(). Tuttavia, non esiste una funzione di gestione eventi predefinita per l'apertura di un nuovo bar (candele).

Per rilevare l'apertura di un nuovo bar, è necessario monitorare il tempo di apertura dell'ultimo bar corrente. Una volta che questo cambia, significa che è iniziato un nuovo bar e si può reagire di conseguenza. Ecco un esempio di codice, compatibile sia con MQL4 che MQL5, per implementare questa funzionalità:

// Gestore eventi per i tick predefiniti
   void OnTick()
   {
      // Controlla se c'è un nuovo bar (compatibile con MQL4 e MQL5).
         static datetime dtBarCorrente  = WRONG_VALUE;
                datetime dtBarPrecedente = dtBarCorrente;
                         dtBarCorrente  = iTime( _Symbol, _Period, 0 );
                bool     bNuovoBarEvento  = ( dtBarCorrente != dtBarPrecedente );

      // Reagisci a un evento di nuovo bar e gestiscilo.
         if( bNuovoBarEvento )
         {
            // Rileva se questo è il primo tick ricevuto e gestiscilo.
               /* Ad esempio, quando è attaccato per la prima volta a un grafico e
                   il bar è a metà del suo progresso e
                   non è effettivamente l'inizio di un nuovo bar. */
               if( dtBarPrecedente == WRONG_VALUE )
               {
                  // Fai qualcosa al primo tick o a metà bar ...
               }
               else
               {
                  // Fai qualcosa quando inizia un bar normale ...
               };

            // Fai qualcosa a prescindere dalle condizioni sopra ...
         }
         else
         {
            // Fai qualcos'altro ...
         };

      // Fai altre cose ...
   };

Nel codice sopra, la variabile statica tiene traccia del tempo di apertura del bar, anche quando si torna dalla funzione OnTick(). A differenza di una normale variabile locale, essa memorizza il suo contenuto e non lo rilascia quando si esce dalla funzione. Questo è fondamentale per rilevare un cambiamento nel tempo di apertura del bar attuale.

È importante notare che quando l'EA viene posizionato per la prima volta su un grafico, il codice sopra reagisce come se il bar fosse appena aperto. Questa condizione richiede una gestione speciale se la situazione deve essere trattata in modo diverso.

Ricorda che tutto il codice sorgente delle mie pubblicazioni su CodeBase è ora disponibile anche nella scheda "Progetti Pubblici" di MetaEditor con il nome "FMIC".

Post correlati

Commento (0)