Início Negociação Sistemática Postagem

Como Detectar uma Nova Barra ou Candle no MetaTrader 5: Código Simples

Anexo
49018.zip (977 bytes, Baixar 0 vezes)

Olá, traders! Hoje vamos falar sobre um código simples que detecta uma nova barra ou candle no MetaTrader 5 assim que ele é recebido.

O princípio por trás desse código é bem simples. Primeiro, ele armazena o tempo da barra/candle anterior. Em seguida, adicionamos 60 segundos (equivalente a 1 minuto, mas você pode ajustar o tempo conforme sua necessidade) ao tempo da barra anterior, resultando no valor de fechamento da barra/candle atual.

Agora, quando:

Tempo Atual = valor de fechamento da barra/candle atual, significa que uma nova barra foi recebida ou a barra atual foi fechada.

Neste código, utilizamos uma variável booleana chamada NewBarRecived que serve como um sinalizador para evitar chamadas múltiplas deste bloco de código. Assim, ele é executado apenas uma vez por barra/candle. As funções Comment(); e playsound("ok.wav"); são usadas para checar a precisão do código; você pode removê-las se preferir.

O sinalizador é redefinido para falso quando o tempo atual ultrapassa o tempo de fechamento da barra atual, permitindo assim checar a chegada da próxima barra (veja os comentários no código).

//+------------------------------------------------------------------+
//|                                                Novo Bar Detect.mq5 |
//|                                                   por H A T Lakmal |
//|                                                    https://t.me/Lakmal846 |
//+------------------------------------------------------------------+

bool NewBarRecived = false; // Sinalizador para controle.

//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                    |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- criar timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização do Expert                                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destruir timer
   EventKillTimer();

  }

//+------------------------------------------------------------------+
//| Função de tick do Expert                                              |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);
   datetime TimeCurrentClose = TimePreviousBar + 60; // Tempo de fechamento da barra atual.
   datetime Time_Current = TimeCurrent();

   if(Time_Current == TimeCurrentClose && NewBarRecived == false)
     {
      PlaySound("ok.wav");   // Para verificar a execução.
      NewBarRecived = true; // Atualiza o sinalizador para evitar chamadas múltiplas.

      // Seu código aqui ----- (Faça algo)

     }
   else
      if(Time_Current > TimeCurrentClose)
        {
         NewBarRecived = false; // Reinicia o sinalizador para a próxima barra.

         // Seu código aqui ----- (Faça algo)

        }

   Comment("\n" +  "\n" +  "Tempo da Barra Atual -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "\n" + "Tempo de Fechamento Atual -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "\n" + "Tempo Atual -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + 
           "\n" +"\n" + "Uma Nova Barra Recebida -: " + NewBarRecived); 
           // Para checar os cálculos

  }
//+------------------------------------------------------------------+
//| Função do timer                                                    |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
//| Função de trade                                                    |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---

  }
//+------------------------------------------------------------------+
//| Função ChartEvent                                               |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

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

 

Publicações relacionadas

Comentário (0)