Desenvolver um Expert Advisor (EA) que sobreviva a mudanças de volatilidade, spreads imprevisíveis e upgrades da própria plataforma não é tarefa para amadores. O usuário costuma começar com um script monolítico que funciona em back‑test, mas ao abrir a conta real vê “slippage” inesperado, perda de performance e, pior, dificuldade para atualizar estratégias. O objetivo, portanto, é criar uma arquitetura que permita trocar módulos – como filtro de risco ou gerenciador de ordens – sem reescrever tudo, mantendo a latência baixa e a manutenção simples.
Separação de responsabilidades
- Camada de dados: use
Structpara agrupar parâmetros (ticket, preço, lotes). Centralize a leitura deHistoryePositionsem funções estáticas. - Lógica de negociação: cada estratégia vive em um arquivo
.mq5próprio, implementando a interfaceINavigator. Assim, o núcleo apenas chamaNavigator->Execute(). - Gerenciamento de risco: módulo isolado que recebe o ticket e devolve o tamanho da posição. Troque a fórmula de Kelly por uma fixa sem mexer no EA principal.
Escalabilidade prática
Quando o número de símbolos cresce de 5 para 30, o gargalo costuma ser a iteração sobre SymbolsTotal(). A solução: pré‑carregar um Map e atualizar apenas quando OnTick() detecta mudança de spread. Isso reduz chamadas de API em até 70%.
Modularização com arquivos incluídos
- Crie um diretório
Modules/e use#includenas estratégias que precisarem. - Para testes A/B, altere a linha de inclusão sem recompilar todo o projeto.
Boas práticas que salvam tempo
| Prática | Benefício |
|---|---|
| Variáveis globais evitáveis | Menos estado compartilhado → menos bugs |
| Log estruturado (JSON) | Facilidade na análise de falhas pós‑mortem |
Uso de EventKillTimer() ao fechar EA | Libera recursos e evita timers órfãos |
Exemplo de ponto contra‑intuitivo
Em vez de aumentar o número de threads para acelerar cálculos, limite‑os a dois e delegue a paralelização ao próprio servidor MQL5 Cloud. O overhead de sincronização supera o ganho de CPU local, especialmente em contas com limites de memória.
FAQ rápido
- Meu EA trava ao mudar de broker? Verifique se o módulo de gerenciamento de spreads está usando
SymbolInfoDouble()ao invés de valores fixos. - Posso usar DLLs? Sim, mas apenas para funções puramente matemáticas; qualquer acesso ao mercado deve permanecer em MQL5 para evitar bloqueios.
Com a estrutura acima, você ganha flexibilidade para escalar de 1 a 50 pares, troca de algoritmos em minutos e reduz o risco de falhas críticas. Para aprofundar, veja o guia completo aqui.
Primeiros passos após a compra
- Instale o MetaEditor (versão 5.0 ou superior) e verifique a compatibilidade com o MetaTrader 5.
- Crie um diretório
Experts\MyEAdentro da pastaMQL5. Esse será o hub de todos os módulos. - Abra um novo
.mq5e defina as diretivas básicas:#property copyright,#property versione#property script_show_inputs.
Arquitetura modular – como dividir o código
| Módulo | Responsabilidade | Arquivo recomendado |
|---|---|---|
| Gerenciador de risco | Calcular lotes, definir stop‑loss/take‑profit, aplicar trailing. | RiskManager.mqh |
| Scheduler | Sincronizar eventos de tempo (new bar, session start, news). | Scheduler.mqh |
| SignalProvider | Receber, filtrar e validar sinais externos (API, arquivos CSV). | SignalProvider.mqh |
| TradeEngine | Executar ordens, monitorar posições, aplicar lógica de saída. | TradeEngine.mqh |
| Logger | Persistir eventos críticos em arquivo ou base SQLite. | Logger.mqh |
Inclua cada módulo via #include . Essa separação permite recompilar apenas o que mudou, reduzindo o tempo de build de 30 % a 50 % em projetos grandes.
Checklist operacional – rotina recomendada
- 🟢 Compilar todos os
.mqhantes de tocar no EA principal. - 🟢 Testar cada módulo isoladamente usando Strategy Tester → Custom mode.
- 🟢 Versionar o código no Git (branch
dev→release). - 🟢 Monitorar o log de performance a cada 1000 ticks; ajuste parâmetros de risco se o drawdown > 2 %.
- 🟢 Backup diário do diretório
MQL5\Files(onde ficam logs e arquivos de sinal).
Escalabilidade – práticas que evitam gargalos
- Use
ArraySetAsSerieseCopyRatesapenas uma vez por barra; evite chamadas dentro de loops. - Prefira estruturas
structao invés declassquando a herança não for necessária – menor overhead de memória. - Implemente caching de indicadores críticos (ex.: EMA, ATR) em buffers estáticos.
- Limite a profundidade de
while/fora 5 iterações; loops profundos aumentam o tempo de cálculo exponencialmente. - Desative o
ChartRedrawdurante execuções intensas; chameChartRedraw()apenas ao final da barra.
Ferramentas de apoio
- MetaEditor Profiler – identifique funções que consomem mais CPU.
- Visual Studio Code com extensão MQL5 Language Server – autocomplete avançado e linting.
- SQLite (via
#import) – armazene métricas de performance sem sobrecarregar arquivos de log.
⚠️ Dica rápida: ao integrar uma API de sinais, valide o timestamp antes de aceitar o trade. Um delay de 1 s pode transformar um sinal lucrativo em perda garantida.
FAQ rápido
- Como evitar “Compilation error: unexpected token”? Verifique se todos os
#includeapontam para arquivos existentes e se não há conflitos de nomes entre módulos. - Qual a frequência ideal de
OnTick()? Não tente processar a cada tick. UseEventSetTimer(1)para limitar a 1 s e processe apenas quandoIsNewBar()for verdadeiro. - Quando migrar para multithreading? Apenas se o EA precisar de cálculos paralelos (ex.: Monte Carlo). Use a API
ThreadCreate()a partir da build 3000 do MetaTrader 5.
Com esses blocos estruturados, seu Expert Advisor evolui de um script monolítico para uma plataforma pronta para crescer, adaptar novas estratégias e manter a performance mesmo sob alta carga de mercado.
Quem realmente tira proveito deste guia?
Se você já domina MQL5 e precisa migrar de scripts pontuais para robôs que suportem milhares de ticks simultâneos, este material é quase um mapa‑raios.
Desenvolvedores que:
- Gerenciam carteiras multi‑estratégia;
- Precisam de manutenção de código por equipes distribuídas;
- Buscam integrar APIs externas sem travar a engine.
Quem pode ficar na mão
Novatos que ainda não entenderam o ciclo de vida de um Expert Advisor ou traders que esperam “cópia‑e‑cola” de scripts pronto‑para‑usar.
Esses perfis acabam perdendo tempo tentando adaptar padrões pesados a projetos simples – o retorno é negativo.
Limitações práticas do conteúdo
O foco está em arquitetura de alto nível, não em otimização de latência de kernel ou hackeamento de broker APIs proprietárias.
Se sua prioridade é micro‑otimização de prime‑time, os capítulos sobre modularização podem parecer “teoria de escritório”.
Checklist rápido de compatibilidade
- Conhecimento sólido de MQL5 (classes, eventos, pools de memória);
- Ambiente de teste (MetaTrader 5, Strategy Tester avançado);
- Equipe ou parceiro disposto a seguir padrões de versionamento.
Mini cenários de aplicação
Cenário A – Hedge automatizado 3x: Uma pequena equipe usa o modelo de módulos para dividir lógica de entrada, gestão de risco e reporting. Resultado: tempo de rollout reduzido de 8 para 2 semanas.
Cenário B – Script de alerta simples: Um trader solo tenta aplicar o mesmo padrão. O overhead de configuração compensa o ganho, gerando atraso de 150 ms no disparo.
FAQ contextual
| Pergunta | Resposta curta |
|---|---|
| Preciso de Visual Studio? | Não, o MetaEditor já cobre tudo. |
| Funciona em MetaTrader 4? | Arquitetura MQL5 é incompatível. |
| É necessário Docker? | Útil, mas não obrigatório. |
Observação prática final
O guia entrega mais valor quando usado como “código‑esqueleto” que a equipe pode adaptar, não como manual de A‑a‑Z. Ele abre caminho, mas exige disciplina para não transformar boa arquitetura em burocracia pesada.
Próximos passos recomendados: baixar o material, rodar o exemplo “MultiStrategyEngine.mq5” e comparar logs de performance com seu EA atual.


