Home Trading Sistemático Post

Detección del inicio de una nueva barra en MT4 – Estrategias de trading automatizado

Attachments
39104.zip (884 bytes, Download 0 times)

Para un sistema de trading automático, cuando llega una nueva cotización de tick, el terminal MetaTrader llama a la función de manejo de eventos OnTick(). Sin embargo, no existe una función de manejo de eventos predeterminada para cuando comienza o se abre una nueva barra (vela).

Para detectar esto, es necesario monitorear el tiempo de apertura de la barra más reciente. Una vez que este tiempo cambia, significa que ha comenzado una nueva barra, y podemos reaccionar y manejar el evento. El siguiente código de ejemplo, compatible tanto con MQL4 como con MQL5, muestra un método sobre cómo se puede lograr esto:

// Manejador de eventos de tick predeterminado
   void OnTick()
   {
      // Comprobar nueva barra (compatible con MQL4 y MQL5).
         static datetime dtBarCurrent  = WRONG_VALUE;
                datetime dtBarPrevious = dtBarCurrent;
                         dtBarCurrent  = iTime( _Symbol, _Period, 0 );
                bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );

      // Reaccionar a un evento de nueva barra y manejarlo.
         if( bNewBarEvent )
         {
            // Detectar si este es el primer tick recibido y manejarlo.
               /* 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( dtBarPrevious == WRONG_VALUE )
               {
                  // Hacer algo en el primer tick o en medio de la barra ...
               }
               else
               {
                  // Hacer algo cuando comienza una barra normal ...
               };

            // Hacer algo independientemente de la condición anterior ...
         }
         else
         {
            // Hacer algo diferente ...
         };

      // Hacer 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 y no lo libera al salir de la función. Este es el punto clave para detectar un cambio en el tiempo de apertura de la barra actual.

También es importante notar que, cuando el sistema de trading automático se coloca por primera vez en un gráfico, el código anterior reacciona como si la barra se hubiera abierto justo en ese momento. Esta condición requiere un manejo especial si la situación necesita ser tratada de manera diferente.

Recuerde que todo el código fuente de mis publicaciones en CodeBase también está disponible en la pestaña "Proyectos Públicos" de MetaEditor bajo el nombre "FMIC".

Related Posts

Comments (0)