Horário de operação no robô: janela, zeragem e pausa em notícias
Por Jackson Jordão · 12 de outubro de 2026 · 6 min

Para limitar o horário de um robô no MetaTrader 5, o código lê a hora do servidor com TimeCurrent(), converte para uma estrutura MqlDateTime com TimeToStruct() e só libera novas entradas dentro da janela escolhida. Fora dela, o robô não abre posições. Se você também quer zerar tudo no fim do dia, o mesmo código fecha as posições abertas a partir de um horário limite.
Parece simples, mas é a regra que mais gera erro em robô: fuso diferente, horário de verão da corretora, ordem pendente esquecida e pausa em notícia mal programada. Veja como tratar cada ponto.
Que horas o robô enxerga?
O robô não usa o relógio do seu computador. Segundo a documentação do MQL5, TimeCurrent() retorna a última hora conhecida do servidor, ou seja, a hora da última cotação recebida, e o valor não depende das configurações de hora do seu computador. Dentro do OnTick(), é a hora do tick que está sendo tratado.
Isso significa que a janela de operação deve ser pensada na hora do servidor da corretora. Em Forex, é comum o servidor ficar em um fuso diferente do Brasil. Na B3, a hora costuma seguir o horário local, mas confirme na sua corretora. A forma segura é abrir o gráfico, olhar a hora do último candle e comparar com o relógio real antes de configurar a janela.
Dica: Nunca presuma o fuso. Compare a hora da Observação de Mercado com a hora real e, se a corretora mudar o horário de verão, revise a janela do robô.
Como programar a janela de entradas
A estrutura MqlDateTime tem campos como hour, min e day_of_week (0 é domingo, 1 é segunda, e assim por diante). O robô preenche essa estrutura com TimeToStruct(TimeCurrent(), dt) e compara a hora com os parâmetros de entrada.
Na prática, o robô costuma ter estes parâmetros:
- Hora e minuto de início das entradas.
- Hora e minuto de fim das entradas.
- Horário de zeragem, quando houver.
- Dias da semana em que pode operar.
Uma armadilha clássica é a janela que cruza a meia-noite, como das 22h às 2h. Nesse caso, a conta "hora maior que o início E menor que o fim" nunca é verdadeira. O certo é aceitar a hora quando ela for maior que o início OU menor que o fim. Para evitar erro, compare minutos desde a meia-noite (hora vezes 60 mais minuto) em vez de comparar hora e minuto separados.
Zeragem no fim do dia
Zerar é fechar tudo no horário combinado, para o robô não carregar posição para a noite ou para o dia seguinte. Quem opera day trade na B3 geralmente quer isso. A lógica tem três passos.
- Chegou o horário de zeragem: o robô para de abrir novas entradas.
- Percorre as posições abertas do ativo e do número mágico do robô e fecha cada uma (com a classe CTrade, o método PositionClose resolve).
- Apaga as ordens pendentes que ficaram no book, com OrderDelete ou o método OrderDelete da CTrade.
O terceiro passo é o mais esquecido. Uma ordem pendente que sobrevive à zeragem pode ser executada depois e abrir uma posição que ninguém esperava. Veja mais sobre isso no artigo sobre vários robôs na mesma conta (/blog/varios-robos-mesma-conta-metatrader-5), em que o número mágico separa as ordens de cada robô.
Outro cuidado: o horário de zeragem deve ficar antes do fim do pregão, com folga. Perto do fechamento, o mercado pode estar sem liquidez e a ordem pode demorar a ser preenchida. E se o ativo estiver fora de sessão, o fechamento será recusado. Por isso, o robô deve conferir o retorno do envio da ordem e tentar de novo no tick seguinte.
Dica: Para o robô zerar mesmo sem tick, use um temporizador: EventSetTimer() em OnInit() e a lógica de horário em OnTimer(). Em ativos com poucos negócios, pode passar tempo sem chegar um tick novo.
Conferindo a sessão do ativo
O MQL5 oferece SymbolInfoSessionTrade(), que informa o início e o fim de cada sessão de negociação de um ativo, por dia da semana (parâmetro do tipo ENUM_DAY_OF_WEEK). Um robô bem feito pode usar essa função para não tentar operar fora da sessão. Mas o dado vem da corretora e pode não refletir leilões ou horários especiais. Por isso, a janela configurada pelo usuário continua sendo a regra principal, e a sessão do ativo serve de segunda checagem. Os horários do pregão da B3 mudam ao longo do tempo, então confira sempre o calendário oficial da bolsa.
Pausa em notícias
Muitos traders querem que o robô fique parado antes e depois de dados econômicos importantes. Existem duas formas de programar isso.
- Lista de horários fixos: você informa os horários das notícias em parâmetros ou em um arquivo, e o robô bloqueia entradas por alguns minutos antes e depois de cada um. É simples e funciona no testador de estratégia.
- Calendário econômico do MetaTrader 5: o MQL5 tem funções de calendário, como CalendarValueHistory(), que leem os eventos. Elas dependem da conexão com o servidor da corretora, e o uso no backtest tem limitações, então confirme como o seu caso se comporta.
Em qualquer das duas, defina o que o robô faz com a posição que já está aberta quando a notícia chega: manter, apertar o stop ou fechar. São decisões diferentes, com riscos diferentes. Um stop mais curto pode ser atingido pelo salto de preço da própria notícia.
Como testar a regra de horário
No testador de estratégia, TimeCurrent() é simulada a partir dos dados históricos, então a janela pode ser validada no backtest. Rode um período curto e confira no relatório se nenhuma operação abriu fora do horário e se tudo foi fechado na zeragem. O passo a passo está no artigo sobre backtest (/blog/como-fazer-backtest-metatrader-5). Depois, repita em conta demo, porque o comportamento do servidor real pode ser diferente.
Dica: Janela de horário reduz exposição, mas não elimina risco. Nenhuma regra de horário garante resultado: teste em demo antes de usar dinheiro real.
Resumo
- O robô usa a hora do servidor (TimeCurrent), não a do seu computador.
- A janela de entradas se programa com MqlDateTime e TimeToStruct, e a janela que cruza a meia-noite exige cuidado.
- Zerar no fim do dia é fechar posições e também apagar ordens pendentes.
- SymbolInfoSessionTrade ajuda a conferir a sessão do ativo, mas a janela do usuário manda.
- Pausa em notícia pode usar lista de horários ou o calendário do MT5, sempre testada em demo.
Quer um robô com horário e zeragem sob medida?
- Descreva a sua estratégia e as janelas de horário pelo Termo de Referência do site ou pelo WhatsApp.
- Eu analiso as regras e programo entrada, zeragem e pausas do jeito que você precisa.
- Você recebe o robô testado em conta demo, com o código-fonte.