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".
연관 포스트
- Alerta Personalizado com Som no MetaTrader 4: Como Fazer
- Modificador ECN: A Ferramenta Ideal para Traders no MetaTrader 4
- BotCilento: O Robô de Trading para MetaTrader 5 que Você Precisa Conhecer
- Estratégia Butterfly: Robô de Trading para MetaTrader 5 com Múltiplos Timeframes
- Estratégia de Crossover de Médias Móveis: EA para MetaTrader 4