Negociação Sistemática 게시글

Como Detectar o Início de uma Nova Barra no MetaTrader 4: Dicas para Traders

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

Se você é um trader que utiliza o MetaTrader 4, provavelmente já percebeu que ao receber uma nova cotação, o terminal chama a função padrão OnTick(). No entanto, não existe uma função padrão para saber quando uma nova barra (ou candle) começa.

Para detectar isso, é necessário monitorar o horário de abertura da barra mais recente. Assim que esse horário mudar, você saberá que uma nova barra começou e poderá reagir a essa mudança. O código abaixo, compatível tanto com MQL4 quanto com MQL5, ilustra uma maneira de realizar essa detecção:

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

      // Reage ao evento de nova barra e trata a situação.
         if( bNovoEventoBarra )
         {
            // Detecta se este é o primeiro tick recebido e trata isso.
               /* Por exemplo, quando é a primeira vez que é anexado a um gráfico e
                  a barra está em algum lugar no meio de seu progresso e
                  não é, de fato, o início de uma nova barra. */
               if( dtBarAnterior == WRONG_VALUE )
               {
                  // Faça algo no primeiro tick ou no meio da barra ...
               }
               else
               {
                  // Faça algo quando uma barra normal começa ...
               };

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

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

No código acima, a variável estática armazena o horário de abertura da barra, mesmo ao retornar da função OnTick(). Diferente de uma variável local comum, ela memoriza seu conteúdo e não o perde ao sair da função. Essa é a chave para detectar uma mudança no horário de abertura da barra atual.

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

Ah, e não esqueça: todo o código que publico na CodeBase agora está disponível também na aba "Projetos Públicos" do MetaEditor sob o nome "FMIC".

연관 포스트

댓글 (0)