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
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- Trader Automático: RSI e MFI com Otimização Automática para MetaTrader 4
- CoensioTrader1V06: Sistema de Trading Automático para MetaTrader 5
- Ferramenta de Aprendizado de Máquina: Teste do SVM para MetaTrader 5
- My Line Order 2.1: O EA que Revoluciona suas Operações no MetaTrader 4