Programar um robô que encerre posições ao final do pregão no MQL5 não é só questão de copiar‑colar um script pronto. O usuário precisa lidar com a lógica de tempo, com a volatilidade que costuma disparar nos últimos minutos e ainda garantir que o fechamento não deixe ordens pendentes ou slippages inesperados. O objetivo prático é simples: ao soar o relógio da sessão, o algoritmo deve liquidar tudo que estiver aberto, obedecendo a critérios de risco definidos previamente. No mundo real, isso costuma ser usado por traders que preferem “overnight‑free” – eles não querem exposição ao gap de abertura do dia seguinte.
Como definir o gatilho de fechamento
- Horário de mercado: use
TimeCurrent()comparado ao horário de término da sessão (ex.: 23:55 GMT). Ajuste para o fuso do ativo. - Filtro de volatilidade: verifique
iATRnos últimos 5 minutos; se o ATR ultrapassar um limiar, adie o fechamento para evitar execuções ruins.
Estrutura básica do EA
| Bloco | Função |
|---|---|
| OnInit() | Configura timers e parâmetros de risco. |
| OnTimer() | Checa se chegou ao horário‑alvo e dispara CloseAll(). |
| CloseAll() | Itera PositionsTotal() e envia OrderClose() com preço de mercado. |
Gestão de erros ao fechar
Ordens podem falhar por falta de liquidez ou por requote. A prática mais segura é:
- Re‑tentar até 3 vezes com
Sleep(100)entre tentativas. - Se ainda falhar, registrar o ticket em um log e enviar alerta por
SendNotification.
Exemplo prático
void CloseAll() { for(int i=PositionsTotal()-1;i>=0;i--) { ulong ticket=PositionGetTicket(i); if(!OrderClose(ticket,PositionGetDouble(POSITION_VOLUME),SymbolInfoDouble(_Symbol,SYMBOL_BID),3)) Print("Falha ao fechar ",ticket); } } Esse trecho funciona bem em pares major, mas pode falhar em ativos com spread alto (ex.: commodities exóticas). Nesses casos, inclua um limite de desvio máximo antes de abortar.
Quando o robô pode falhar
- Servidores sobrecarregados: no horário de fechamento, a carga de pedidos aumenta e o broker pode rejeitar ordens.
- Fusos horários cruzados: se o calendário de feriados não for considerado, o EA pode tentar fechar em dias em que o mercado está fechado.
FAQ rápido
- Posso usar o mesmo EA em contas diferentes? Sim, mas ajuste
TimeGMTOffsetpara cada corretora. - O que fazer se o EA não fechar nada? Verifique se o timer foi registrado (
EventSetTimer()) e se o horário está correto.
Se quiser aprofundar a implementação, confira a documentação oficial do MQL5 que traz exemplos prontos e dicas de otimização. O ponto crítico é testar em modo strategy tester com dados reais de fim de sessão; só assim você descobre se o robô realmente entrega o fechamento limpo que prometeu.
Primeiros passos após a compra
- Baixe o arquivo .ex5 e salve na pasta MQL5/Experts do terminal.
- Reinicie o MetaTrader 5 para que o compilador registre o robô.
- Abra o Assistente de Estratégia e selecione “Fechamento de Mercado”.
Configuração inicial – parâmetros críticos
| Parâmetro | Descrição | Valor padrão |
|---|---|---|
| CloseHour | Hora (GMT) em que o robô encerra posições. | 15:00 |
| CloseMinute | Minuto da hora de fechamento. | 00 |
| MaxSpread | Spread máximo aceitável (pips). | 3 |
| RiskPercent | Percentual do saldo a arriscar por operação. | 1.5% |
Módulos prioritários a ativar
- Gestão de Risco: controla o tamanho da posição conforme RiskPercent e o valor do lote mínimo.
- Filtro de Liquidez: impede execuções quando o spread ultrapassa MaxSpread.
- Timer de Fechamento: dispara o
OrderClose()no instante configurado.
Checklist operacional – rotina diária
- Verifique o saldo e o drawdown no Relatório de Conta.
- Confirme que o Timer de Fechamento está sincronizado com o fuso horário do servidor.
- Teste o Filtro de Liquidez em modo Strategy Tester (1 dia histórico).
- Ative o Modo Demo por 48 h antes de migrar para conta real.
- Registre a hora exata de cada fechamento no Journal para auditoria.
Erros comuns e como evitá‑los
- Spread excessivo – O robô tenta fechar e gera slippage. Solução: ajuste MaxSpread ou use TrailingStop antes do fechamento.
- Fuso horário desajustado – Fechamento ocorre antes ou depois do esperado. Solução: alinhe o relógio do terminal com o horário do broker.
- Saldo insuficiente – O cálculo de risco gera lote zero. Solução: aumente o RiskPercent ou reduza o número de posições simultâneas.
Workflow resumido – de 0 a 100 % de operação
1️⃣ Instalação → 2️⃣ Configuração de parâmetros → 3️⃣ Teste em Strategy Tester → 4️⃣ Validação em conta demo (48 h) → 5️⃣ Ativação em conta real → 6️⃣ Monitoramento diário (checklist) → 7️⃣ Ajustes mensais (spread, risco)
FAQ rápido
- Posso mudar a hora de fechamento durante o dia? Sim, basta editar CloseHour/CloseMinute e recompilar.
- O robô aceita múltiplos pares? O código está preparado para ArraySymbol; basta listar os símbolos desejados.
- Como saber se o filtro de liquidez está ativo? No Journal aparece “Spread OK” ou “Spread excessivo – ordem ignorada”.
Quem realmente se beneficia de um robô de fechamento de mercado em MQL5?
Se você vive de day trade e sente que o fim de sessão é um caos de decisões, este robô pode ser a ponte entre ansiedade e disciplina. Não vale para quem aceita a volatilidade como parte do jogo ou para quem já possui um sistema de saída manual bem calibrado.
Perfil ideal
- Trader semi‑automatizado: Usa indicadores, mas ainda depende de ação humana para entrada.
- Gestor de risco obsessivo: Precisa de stop‑loss e take‑profit consistentes, sem “olho na tela”.
- Operador de contas pequenas a médias: Busca reduzir custos de slippage que surgem ao fechar posições manualmente.
Quem provavelmente não terá bom aproveitamento
- Investidores de longo prazo que raramente operam dentro do período intradiário.
- Programadores experientes que preferem escrever scripts sob medida para cada ativo.
- Quem depende de notícias de última hora para fechar posições; o algoritmo fecha por horário, não por evento.
Limitações práticas
O robô encerra posições estritamente no horário pré‑definido. Se o mercado sofrer um gap antes do fechamento, a ordem pode ser executada a preço de abertura, gerando slippage inesperado. Não há suporte nativo a múltiplos fusos horários; funciona apenas com o horário do servidor MetaTrader 5.
FAQ contextual
| Pergunta | Resposta |
|---|---|
| Posso usar o robô em contas demo? | Sim, teste ao menos 10.000 ticks para validar a sincronização de horário. |
| O que acontece se o servidor cair às 17:58? | O algoritmo tenta enviar a ordem; se falhar, a posição permanece aberta até o próximo tick. |
| É possível combinar com trailing stop? | Não nativamente; requer modificação de código. |
Checklist final antes de comprar
- Confirmação de horário do seu broker (GMT +0 ou +3?).
- Teste de slippage em back‑test com spreads reais.
- Alocação de capital que permita perdas de até 2% por fechamento tardio.
- Disponibilidade de contas demo para validar por no mínimo 30 dias.
Parecer editorial
O produto entrega o que promete: fechar posições automaticamente ao fim de mercado, reduzindo a necessidade de vigilância constante. Contudo, ele não resolve problemas de volatilidade inesperada nem substitui uma boa estratégia de entrada. Para traders que valorizam consistência e têm um horário de operação bem definido, o risco‑/benefício é positivo, desde que aceitem a possibilidade de slippage e a falta de adaptações em tempo real.
Próximos passos: inicie um teste em conta demo, ajuste o horário conforme o servidor, e só então migre para a conta real. Se as métricas de slippage ficarem acima de 0,2 pips, considere aprimorar o código ou buscar um fornecedor com gerenciamento de eventos de notícia.


