Inicio Trading Sistemático Publicación

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

Archivos adjuntos
39103.zip (884 bytes, Descargar 0 veces)

Para un Asesor Experto (EA), cuando llega una nueva cotización, el terminal de MetaTrader invoca la función de manejo de eventos OnTick(). Sin embargo, no existe una función predeterminada para manejar el inicio o la apertura de una nueva barra.

Para detectar esto, es necesario monitorear el tiempo de apertura de la barra más reciente. Una vez que cambia, significa que se ha iniciado una nueva barra, y se puede reaccionar y manejar el evento. A continuación, te muestro un código de ejemplo, compatible tanto con MQL4 como con MQL5, que ilustra cómo se puede lograr esto:

// Manejador de eventos de tick por defecto
   void OnTick()
   {
      // Verifica si hay una nueva barra (compatible con MQL4 y MQL5).
         static datetime dtBarActual  = WRONG_VALUE;
                datetime dtBarAnterior = dtBarActual;
                         dtBarActual  = iTime( _Symbol, _Period, 0 );
                bool     bNuevoEventoBarra  = ( dtBarActual != dtBarAnterior );

      // Reacciona a un nuevo evento de barra y maneja la situación.
         if( bNuevoEventoBarra )
         {
            // Detecta si este es el primer tick recibido y manéjalo.
               /* Por ejemplo, cuando se adjunta por primera vez a un gráfico y
                  la barra está en medio de su progreso y
                  no es realmente el inicio de una nueva barra. */
               if( dtBarAnterior == WRONG_VALUE )
               {
                  // Haz algo en el primer tick o en medio de la barra ...
               }
               else
               {
                  // Haz algo cuando comienza una barra normal ...
               };

            // Haz algo sin importar la condición anterior ...
         }
         else
         {
            // Haz algo diferente ...
         };

      // Haz otras cosas ...
   };

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

También es importante notar que cuando se coloca el EA por primera vez en un gráfico, el código anterior reacciona como si la barra acabara de abrirse. Esta condición requiere un manejo especial si la situación necesita ser tratada de manera diferente.

Recuerda que todo mi código publicado en CodeBase ahora también está disponible en la pestaña "Proyectos Públicos" de MetaEditor bajo el nombre "FMIC".

Publicaciones relacionadas

Comentarios (0)