Trading Sistemático 게시글

Cómo Detectar el Inicio de una Nueva Barra en MetaTrader 4: Guía Práctica

첨부파일
39104.zip (884 bytes, 다운로드 0회)

Cuando trabajamos con un Asesor Experto (AE) en nuestra plataforma de MetaTrader, es fundamental saber cuándo comienza una nueva barra. A diferencia de los ticks que llegan constantemente, no existe una función predeterminada para manejar el inicio de una nueva barra (o vela).

Para detectar cuándo se abre una nueva barra, debemos estar atentos al tiempo de apertura de la barra más reciente. Cuando este tiempo cambia, significa que hemos tenido el inicio de una nueva barra y podemos reaccionar a ello. A continuación, te comparto un código de ejemplo que es compatible tanto con MQL4 como con MQL5, que muestra cómo lograr esto:

// Manejador de eventos de tick predeterminado
   void OnTick()
   {
      // Verificamos 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 );

      // Reaccionamos ante el evento de nueva barra y lo manejamos.
         if( bNuevoEventoBarra )
         {
            // Detectamos si es el primer tick recibido y lo manejamos.
               /* 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 )
               {
                  // Hacemos algo en el primer tick o en medio de la barra ...
               }
               else
               {
                  // Hacemos algo cuando comienza una barra normal ...
               };

            // Hacemos algo independientemente de la condición anterior ...
         }
         else
         {
            // Hacemos algo más ...
         };

      // Hacemos otras cosas ...
   };

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

Es importante mencionar que cuando el AE se coloca 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 se necesita tratar la situación de manera diferente.

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

연관 포스트

댓글 (0)