← Todos os artigos

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

Relógio de mesa ao lado de mãos digitando em um notebook, em preto e branco
Foto: Mauricio Alarcón/Unsplash

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.

  1. Chegou o horário de zeragem: o robô para de abrir novas entradas.
  2. 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).
  3. 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?

  1. Descreva a sua estratégia e as janelas de horário pelo Termo de Referência do site ou pelo WhatsApp.
  2. Eu analiso as regras e programo entrada, zeragem e pausas do jeito que você precisa.
  3. Você recebe o robô testado em conta demo, com o código-fonte.

Orçamento pelo WhatsApp: (84) 99652-3661

Leia também