Inicio Trading Sistemático Publicación

Cómo Detectar el Inicio de una Nueva Barra en MetaTrader 5

Archivos adjuntos
41601.zip (795 bytes, Descargar 0 veces)

Cuando trabajas con un Asesor Experto (EA) en MetaTrader 5, cada vez que recibes una nueva cotización (o "tick"), se activa la función estándar OnTick() por parte del terminal. Sin embargo, no existe una función de manejo de eventos estándar para detectar el inicio de una nueva barra.

Para poder identificar cuándo se inicia una nueva barra, es necesario monitorear el tiempo de apertura de la barra más reciente. Cuando este tiempo cambia, esto indica el inicio de una nueva barra, lo que te permite reaccionar y manejar la situación. A continuación, te muestro un ejemplo de código, compatible tanto con MQL4 como con MQL5, que ilustra cómo lograr esto:

// Manejador de eventos de ticks estándar
   void OnTick()
   {
      // Verifica si hay una nueva barra (compatible con MQL4 y MQL5).
         static datetime dtBarraCorrente   = WRONG_VALUE;
                datetime dtBarraPrecedente = dtBarraCorrente;
                         dtBarraCorrente   = iTime( _Symbol, _Period, 0 );
                bool     bEventoBarraNova  = ( dtBarraCorrente != dtBarraPrecedente );

      // Reacciona al evento de una nueva barra y maneja la situación.
         if( bEventoBarraNova )
         {
            // Detecta si este es el primer tick recibido y maneja la situación.
               /* Por ejemplo, cuando se aplica por primera vez al gráfico y
 la barra está en medio de su progreso y
 no es realmente el inicio de una nueva barra. */
               if( dtBarraPrecedente == WRONG_VALUE )
               {
                  // Realiza alguna acción en el primer tick o en medio de una barra ...
               }
               else
               {
                  // Realiza alguna acción cuando aparece una barra normal ...
               };

            // Realiza algo independiente de la condición anterior ...
         }
         else
         {
            // Realiza algo diferente ...
         };

      // Realiza otras acciones ...
   };

En el código anterior, la variable estática mantiene un registro del tiempo de apertura de la barra, incluso cuando se retorna de la función OnTick(). A diferencia de una variable local normal, memoriza su contenido y no lo libera al salir de la función. Este es el secreto para detectar un cambio en el tiempo de apertura de la barra actual.

También es importante señalar que cuando el EA se coloca en un gráfico por primera vez, el código reacciona como si la barra acabara de abrirse. Esta condición requiere un tratamiento especial si es necesario manejar la situación de manera diferente.

Por último, recuerda que el código fuente de todas mis publicaciones en CodeBase también está disponible a través de MetaEditor en "Proyectos Públicos" bajo el nombre "FMIC".

Publicaciones relacionadas

Comentarios (0)