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
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- Como Criar Sinais de Negociação com MQL5 Wizard Usando Estrelas da Manhã e da Noite + Estocástico
- MQL5 Wizard: Sinais de Negociação com Padrões Candlestick e RSI no MetaTrader 5
- Trader Automático: RSI e MFI com Otimização Automática para MetaTrader 4
- Como Criar um Expert Advisor com MQL5: Sinais de Negociação Baseados em Harami e RSI