Código Sencillo para Detectar Nuevas Velas en MetaTrader 5

Mike 2024.04.05 04:19 20 0 0
Archivos adjuntos

En este artículo, vamos a ver un código que detecta una nueva vela o nuevo bar en MetaTrader 5 cuando se recibe.

El principio básico de este código es muy simple. Primero, el código guarda el tiempo de la vela anterior. Luego, añade 60 segundos (equivalente a 1 minuto; puedes ajustar el tiempo como desees) al tiempo de la vela anterior, lo que nos da el valor de cierre de la vela actual.

Una vez que:

Tiempo Actual = valor de cierre de la vela actual, eso significa que se ha recibido una nueva vela o que la vela actual ha cerrado.

En este código, la variable booleana NewBarRecived evita que este bloque de código se ejecute múltiples veces, asegurando que se ejecute solo una vez por cada vela. Las funciones Comment(); y PlaySound("ok.wav"); se utilizan para verificar la precisión del bloque de código. Puedes eliminarlas si lo prefieres.

La bandera se restablece a false una vez que el tiempo actual supera el tiempo de cierre de la vela actual, lo que permite verificar la llegada del siguiente bar. (Revisa los comentarios para más detalles).

//+------------------------------------------------------------------+
//|                                                  Detectar Nueva Vela.mq5 |
//|                                                  por H A T Lakmal |
//|                                                   https://t.me/Lakmal846 |
//+------------------------------------------------------------------+

bool NewBarRecived = false; // Bandera para control.

//+------------------------------------------------------------------+
//| Función de inicialización del experto                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- crear temporizador
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Función de desinicialización del experto                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destruir temporizador
   EventKillTimer();

  }


//+------------------------------------------------------------------+
//| Función de tick del experto                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);
   datetime TimeCurrentClose = TimePreviousBar + 60; // Tiempo de cierre de la vela actual.
   datetime Time_Current = TimeCurrent();

   if(Time_Current == TimeCurrentClose && NewBarRecived == false)
     {
      PlaySound("ok.wav");   // Para verificar que funcione correctamente.
      NewBarRecived = true; // Actualiza la bandera para evitar llamadas múltiples.

      // Aquí va tu código ----- (Haz algo)

     }
   else
      if(Time_Current > TimeCurrentClose)
        {
         NewBarRecived = false; // Restablece la bandera para la próxima apertura de bar.

         // Aquí va tu código ----- (Haz algo)

        }

   Comment("
" +  "
" +  "Tiempo de la Vela Actual -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "
" + "Tiempo de Cierre Actual -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "
" + "Tiempo Actual -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + 
           "
" +"
" + "Una Nueva Vela Recibida -: " + NewBarRecived); 
           // Para verificar cálculos

  }
//+------------------------------------------------------------------+
//| Función del temporizador                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
//| Función de trading                                                    |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---

  }
//+------------------------------------------------------------------+
//| Función de eventos del gráfico                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

  }
//+------------------------------------------------------------------+

 

Lista
Comentarios 0