Início Negociação Sistemática Postagem

Como Detectar o Início de um Novo Candle no MetaTrader 5

Anexo
39103.zip (884 bytes, Baixar 0 vezes)

Para um Robô de Trading, quando chega uma nova cotação de tick, o terminal MetaTrader chama a função padrão de manipulação de eventos OnTick(). No entanto, não existe uma função de manipulação de eventos padrão para o início de um novo candle.

Para detectar esse momento, é necessário monitorar o horário de abertura do candle mais recente. Assim que esse horário mudar, significa que um novo candle começou e você pode reagir a isso. O código a seguir, compatível com MQL4 e MQL5, exemplifica um método para realizar essa detecção:

// Manipulador de eventos padrão de tick
   void OnTick()
   {
      // Verifica se há um novo candle (compatível com MQL4 e MQL5).
         static datetime dtCandleAtual  = WRONG_VALUE;
                datetime dtCandleAnterior = dtCandleAtual;
                         dtCandleAtual  = iTime( _Symbol, _Period, 0 );
                bool     bNovoCandle  = ( dtCandleAtual != dtCandleAnterior );

      // Reage a um evento de novo candle e o manipula.
         if( bNovoCandle )
         {
            // Detecta se este é o primeiro tick recebido e o manipula.
               /* Por exemplo, quando é o primeiro a ser anexado a um gráfico e
                  o candle está em algum ponto do seu progresso e
                  não é, de fato, o início de um novo candle. */
               if( dtCandleAnterior == WRONG_VALUE )
               {
                  // Faça algo no primeiro tick ou no meio do candle ...
               }
               else
               {
                  // Faça algo quando um candle normal começa ...
               };

            // Faça algo independentemente da condição acima ...
         }
         else
         {
            // Faça algo diferente ...
         };

      // Faça outras coisas ...
   };

A variável estática acima mantém o registro do horário de abertura do candle, mesmo ao retornar da função OnTick(). Ao contrário de uma variável local comum, ela memoriza seu conteúdo e não o libera ao sair da função. Isso é essencial para detectar uma mudança no horário de abertura do candle atual.

É importante notar também que, quando o Robô de Trading é colocado pela primeira vez em um gráfico, o código acima reage como se o candle tivesse acabado de abrir. Essa condição requer um tratamento especial se a situação precisar ser gerida de forma diferente.

Vale lembrar que todo o código fonte das minhas publicações no CodeBase está agora disponível na aba “Projetos Públicos” do MetaEditor, sob o nome “FMIC”.

Publicações relacionadas

Comentário (0)