Programar um Expert Advisor (EA) no MetaTrader 5 costuma ser mais fácil na teoria do que na prática. Quando o algoritmo falha, a primeira pista costuma estar nos logs, mas a maioria dos traders amadores grava apenas mensagens genéricas ou, pior, nada. O resultado? Tempo perdido, trades inesperados e, muitas vezes, a decisão de abandonar a estratégia antes mesmo de testar seu potencial.
Por que logs detalhados são indispensáveis
- Diagnóstico rápido: Cada chamada a
Print()ouComment()deixa um rastro que pode ser correlacionado com eventos de mercado. - Reprodução de bugs: Sem timestamp preciso, reproduzir a sequência que levou ao erro vira adivinhação.
- Auditoria de performance: Saber quantas vezes um trade foi aberto, fechado ou rejeitado permite calcular taxas de sucesso reais.
Como habilitar o registro avançado
1. No MetaEditor, abra Tools → Options → Events e marque Log detailed information. 2. Substitua Print() por PrintFormat() para incluir data, hora e valores de variáveis:
PrintFormat("%s | Ticket:%d | Price:%.5f | Spread:%d", TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), ticket, Ask, (Ask-Bid)*Point);3. Use FileWrite() para criar arquivos CSV próprios, facilitando a análise posterior em Excel ou Python.
Debug passo a passo
Ao detectar um comportamento inesperado, siga este fluxo:
- Ative o Debugger (F7) e coloque breakpoints nas funções críticas.
- Observe o Journal para mensagens de erro do servidor.
- Compare os valores de variáveis antes e depois da chamada ao
OrderSend().
Monitoramento em produção
Mesmo com o EA rodando ao vivo, é possível manter logs leves:
- Grave apenas eventos de entrada e saída, descartando mensagens de rotina.
- Limite o tamanho do arquivo usando
FileSeek()e rotacione logs a cada 10 000 linhas.
Exemplo prático
// Exemplo de log de abertura de posição if(OrderSend(Symbol(),OP_BUY,lots,Ask,3,StopLoss,TakeProfit, "EA_Entry",MagicNumber,0,clrGreen)==-1) { PrintFormat("%s | ERRO ao abrir BUY: %s", TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS), GetLastError()); } else { PrintFormat("%s | BUY aberto | Ticket:%d | Price:%.5f", TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS), OrderTicket(),Ask); }
Boas práticas e armadilhas comuns
- Não sobrecarregue o log. Milhares de linhas por minuto podem travar o terminal.
- Sincronize horário. Diferenças entre o relógio do servidor e o PC geram timestamps confusos.
- Teste em conta demo. Logs que funcionam em demo podem falhar em real por limites de latência.
FAQ relâmpago
- Posso usar
Alert()ao invés dePrint()? Só para notificações imediatas;Alert()não grava no histórico. - O que fazer se o arquivo CSV não abre? Verifique permissões de escrita e o caminho relativo (
Terminal\\MQL5\\Files\\). - Logs afetam a velocidade de execução? Sim, especialmente se escritos a cada tick; prefira
OnTimer()para consolidar.
Comece hoje a refinar seus logs; a diferença entre um EA que “funciona” e um que realmente entrega resultados costuma estar nos detalhes que você registra. Para aprofundar, veja a documentação oficial da MQL5 sobre logging avançado.
1. Primeiro passo após a compra: habilitar o recurso de log no MetaEditor
- Abra o MetaEditor (F4) e vá em Tools → Options → Expert Advisors.
- Marque Enable logging e defina Log level = Detailed.
- Salve as alterações. A partir de agora, cada chamada de
Print()será gravada no arquivoExperts\*.log.
2. Configuração inicial do EA – estrutura mínima de log
| Componente | Implementação |
|---|---|
| Identificador único | string id = "EA_"+IntegerToString(_MagicNumber)+"_"+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES); |
| Timestamp padrão | #define LOG_TIME TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) |
| Função wrapper | void Log(string msg){ PrintFormat("%s | %s | %s",LOG_TIME,id,msg); } |
Use Log() ao invés de Print() para garantir consistência.
3. Rotina recomendada de debug em tempo real
⚡ Dica: mantenha a janela Experts aberta e ative Auto Scroll. Assim, o fluxo de mensagens aparece como um “live feed”.
- OnInit() – registre parâmetros de entrada, versão do EA e data/hora de início.
- OnTick() – limite logs a eventos críticos (ex.: abertura/fechamento de ordens, erro de negociação).
- OnDeinit() – informe motivo da parada (código de erro, usuário, falta de margem).
4. Checklist operacional de registro
- [ ] Definir diretório de logs:
TerminalDataPath()+"/MQL5/Logs" - [ ] Incluir identificador de símbolo e timeframe em cada linha.
- [ ] Rotacionar arquivos diariamente (script
LogRotate.mq5). - [ ] Verificar permissões de escrita (evitar “Access denied”).
- [ ] Testar em Strategy Tester com Verbose ativado.
5. Ferramentas complementares para análise pós‑execução
- MetaTrader 5 Analyzer – importa o .log e gera gráficos de frequência de eventos.
- Script
LogParser.mq5– converte linhas em CSV para uso no Excel ou PowerBI.
6. Erros comuns e como evitá‑los
- Overflow de buffer: limitar o tamanho da mensagem a 1024 caracteres.
- Logs duplicados: usar flag
bool logged = false;antes de cada bloco crítico. - Perda de dados ao fechar o terminal: chamar
FileFlush()noOnDeinit().
7. Sinais de progresso – o que observar nos primeiros 100 ticks
| Sinal | Interpretção |
|---|---|
Log de “OrderSend” com RESULT_OK | Conexão API estável. |
| Ausência de “ERR_TRADE_NOT_ALLOWED” | Permissões corretas. |
| Tempo médio entre “Tick” e “Log” ≤ 5 ms | Impacto de logging mínimo. |
8. Hábitos complementares para não abandonar o workflow
- Reserve 5 minutos ao final de cada sessão para limpar logs antigos.
- Integre o checklist ao seu daily stand‑up de desenvolvimento.
- Automatize a geração de relatórios semanais usando o
LogReport.mq5.
FAQ rápido
- Posso mudar o nível de detalhe sem recompilar? Sim. Ajuste Log level nas opções do terminal e reinicie o EA.
- O log aumenta o consumo de memória? Apenas marginalmente; o gargalo costuma ser I/O de disco, mitigado com rotação diária.
- Como visualizar logs no mobile? Use o app oficial MetaTrader 5 → Files → abra o .log com visualizador interno.
Perfil ideal e limites de uso
Se você desenvolve Expert Advisors (EAs) no MQL5 e já se afogou em mensagens de erro genéricas, este guia de logs detalhados pode ser o seu salva‑vidas. Não é para quem lê código só para “funcionar”; é para quem quer extrair performance, diagnosticar falhas em tempo real e provar a eficácia do algoritmo a clientes ou auditorias.
Quem realmente deve investir neste nível de logging?
- Desenvolvedores avançados que mantêm EAs em produção 24/7.
- Gestores de fundos que precisam de rastreabilidade para compliance.
- Freelancers que vendem estratégias e precisam documentar cada trade para justificar honorários.
Quem provavelmente não encontrará valor
- Iniciantes que ainda não dominam o básico do MQL5.
- Usuários que operam apenas testes pontuais em contas demo.
- Quem depende exclusivamente de indicadores prontos e não modifica lógica interna.
Limitações práticas a considerar
O sistema de logs do MetaEditor grava no diretório Files do terminal. Em contas com milhares de ticks por segundo, o volume de dados pode superar rapidamente o limite de 10 MB imposto por alguns brokers, gerando atrasos de I/O. Além disso, o uso intenso de Print() em loops críticos pode inflar o tempo de execução, reduzindo a taxa de processamento em até 15 %.
FAQ contextual
| Pergunta | Resposta |
|---|---|
| Posso habilitar logs sem recompilar? | Sim, alterando o parâmetro #property strict e usando FileOpen() dinamicamente. |
| Os logs são exportáveis? | O arquivo .csv gerado pode ser lido por Excel ou Python para análise posterior. |
| Existe risco de vazamento de dados sensíveis? | Somente se você salvar credenciais; mantenha FileWrite() restrito a informações de operação. |
Checklist rápido antes de ativar o modo “log extremo”
- Verificar espaço livre no diretório
Files(mínimo 50 MB). - Desativar logs de nível
INFOdurante backtests intensos. - Implementar rotação de arquivos a cada 5 000 linhas.
- Testar latência em ambiente de demo antes de levar ao live.
Mini cenários reais
Maria, trader profissional, ativou logs de erro apenas quando o EA falhou. O arquivo error_log.txt mostrou que a exceção ERR_TRADE_CONTEXT_BUSY acontecia nas primeiras 30 s do início do pregão. Ela ajustou a fila de ordens e reduziu a taxa de erro em 87 %.
Já João, freelancer, tentou usar logs detalhados em todas as chamadas de OnTick(). O consumo de CPU dobrou, o EA perdeu sincronia com o feed e acabou executando ordens fora do SL. O aprendizado: menos é mais quando o tick rate ultrapassa 100 ticks/s.
Parecer editorial equilibrado
O recurso de logging detalhado em MQL5 oferece um retorno de investimento claro para quem precisa de auditoria e depuração avançada. Contudo, não é um “plug‑and‑play” para contas de alta frequência; o custo de desempenho pode superar o ganho informativo se não houver controle de volume. Avalie seu ritmo de negociação, a criticidade das decisões e a disponibilidade de recursos de armazenamento antes de subir o nível de verbosidade.
Para quem decide avançar, configure o caminho de arquivo e teste a rotação automática. A documentação oficial traz exemplos práticos; acesse‑a aqui e clique no botão para download imediato.



