Início Negociação Sistemática Postagem

Como Detectar o Início de uma Nova Barra no MetaTrader 5

Anexo
41601.zip (795 bytes, Baixar 0 vezes)

Quando você está trabalhando com um Robô de Investimento, ou System Trading, no MetaTrader, a cada nova cotação recebida (ou "tick"), a função padrão de tratamento de eventos OnTick() é acionada automaticamente. Porém, não existe uma função padrão para detectar quando uma nova barra (ou candle) começa.

Para identificar esse momento, você precisa monitorar o horário de abertura da barra mais recente. Sempre que essa informação mudar, isso indica o início de uma nova barra, permitindo que você reaja à situação e trate o evento. O exemplo de código a seguir, compatível com MQL4 e MQL5, mostra uma das maneiras de como isso pode ser feito:

// Tratador de eventos padrão de tick
   void OnTick()
   {
      // Verifica se há uma nova barra (compatível com MQL4 e MQL5).
         static datetime dtBarraCorrente   = WRONG_VALUE;
                datetime dtBarraPrecedente = dtBarraCorrente;
                         dtBarraCorrente   = iTime( _Symbol, _Period, 0 );
                bool     bEventoBarraNova  = ( dtBarraCorrente != dtBarraPrecedente );

      // Reage ao evento de uma nova barra e lida com a situação.
         if( bEventoBarraNova )
         {
            // Detecta se este é o primeiro tick recebido e trata a situação.
               /* Por exemplo, quando é a primeira vez que é aplicado no gráfico e
 a barra está em algum lugar no meio de seu progresso e
 não é realmente o início de uma nova barra. */
               if( dtBarraPrecedente == WRONG_VALUE )
               {
                  // Faça algo no primeiro tick ou no meio de uma barra ...
               }
               else
               {
                  // Faça algo quando uma barra normal aparece ...
               };

            // Faça algo independente da condição anterior ...
         }
         else
         {
            // Faça algo diferente ...
         };

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

No código acima, a variável estática mantém o controle do horário de abertura da barra, 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 é fundamental para detectar uma mudança no horário de abertura da barra atual.

É importante ressaltar que, quando o Robô é colocado em um gráfico pela primeira vez, o código anterior reage como se a barra tivesse acabado de abrir. Essa condição requer um tratamento especial caso a situação precise ser abordada de forma diferente.

Por fim, vale lembrar que o código fonte de todas as minhas publicações na CodeBase agora também está disponível pelo MetaEditor na seção "Projetos Públicos" sob o nome "FMIC".

Publicações relacionadas

Comentário (0)