ONNX vs Python Socket vs DLL: Qual a Melhor Integração IA para MT5?
Três caminhos para rodar IA dentro de um Expert Advisor MT5. Cada um tem trade-offs reais. Este comparativo é prático — não é “qual é melhor”, é “qual usar em qual situação”. Se você ainda não conhece o ONNX nativo, comece pelo guia pillar.
ONNX Nativo
Python Socket
DLL Custom
Como cada abordagem funciona
1. ONNX Nativo (recomendado em 2026)
EA chama OnnxRun() diretamente. O modelo está embarcado ou em MQL5\Files. Inferência roda no mesmo processo do MT5, sem rede, sem outro executável. É a abordagem oficial documentada em mql5.com.
2. Python Socket
Você abre um servidor Python (Flask, FastAPI, socket TCP simples) que mantém o modelo carregado. O EA envia features via socket, o servidor responde com predição. Requer Python rodando em paralelo.
3. DLL Custom
Compila uma DLL em C++ que embarca libtorch, tensorflow-c ou onnxruntime. O EA importa funções da DLL via #import. Funcionou bem na era pré-2023, hoje é overkill em quase todos os casos.
Comparativo cabeça-a-cabeça
| Aspecto | ONNX | Socket | DLL |
|---|---|---|---|
| Latência inferência | Comparável a C++ (oficial mql5.com) | + overhead de rede | Nativo C++ |
| Setup inicial | Simples (1 arquivo) | Médio (rodar servidor) | Complexo (compilar C++) |
| Dependências externas | Zero | Python + libs + servidor | Compilador C++ + libs |
| VPS friendly | Sim (só MT5) | Requer mais recursos | Sim mas dor |
| Distribuir EA | 1 arquivo .ex5 | EA + servidor + Python | EA + DLL |
| Atualizar modelo | Troca .onnx ou recompila | Restart do servidor | Recompila DLL |
| Frameworks suportados | Todos com export ONNX | Todos (Python livre) | O que tiver C API |
| Multi-EA simultâneo | Trivial (cada EA tem sessão) | Cuidado com concorrência | Cuidado com estado |
| Risco de quebrar | Baixo (suportado oficialmente) | Alto (rede, versões) | Alto (ABI changes) |
| Curva de aprendizado | Baixa | Média | Alta (C++) |
Latência — o número que importa
⚠️ Sobre números de benchmark
A documentação oficial mql5.com afirma que “a velocidade de execução do MQL5 [com ONNX] é comparável à de aplicações C++”. Não publica milissegundos absolutos. Os números abaixo são estimativas ordem de magnitude baseadas em testes empíricos próprios e da comunidade — não considere precisão absoluta.
| Cenário típico | ONNX | Socket localhost | Socket VPS→cloud | DLL |
|---|---|---|---|---|
| Modelo pequeno (RF, ~1 MB) | < 1 ms | ~5-15 ms | ~30-100 ms | < 1 ms |
| Modelo médio (LSTM, ~10 MB) | ~2-5 ms | ~10-25 ms | ~50-150 ms | ~2-5 ms |
| Modelo grande (Transformer, ~100 MB) | ~20-80 ms | ~50-200 ms | ~200-500 ms | ~20-80 ms |
Para scalping em tick frequency, latência < 5 ms importa. Para swing em H1+, qualquer um serve. Sempre faça seu próprio benchmark — hardware e modelo importam.
Quando usar cada um
Use ONNX se:
✓ Você quer o EA self-contained (1 arquivo .ex5)
✓ Rodar em VPS com poucos recursos
✓ Distribuir para clientes ou mql5.com Market
✓ Mínima manutenção a longo prazo
✓ Modelo já roda em PyTorch / TF / Sklearn / XGBoost
✓ Latência baixa importa
✓ É 2026 — esta é a opção default sensata
Use Python Socket se:
✓ Você precisa de bibliotecas Python que não exportam ONNX (LightGBM com features categóricas complexas, modelos custom)
✓ Está prototipando rapidamente e não quer recompilar a cada mudança
✓ Já tem infra Python rodando (Jupyter, MLflow, API ML)
✓ Vai compartilhar o modelo entre múltiplos EAs / aplicações
✓ Modelo precisa de pré-processamento Python pesado (tokenização NLP, etc.)
Use DLL Custom se:
✓ Você já tem expertise em C++
✓ Precisa integrar lib específica sem suporte ONNX (rara hoje)
✓ Performance absoluta com modelo super customizado
✓ Tem tempo e energia para manter ABI compatibility entre versões MT5
Caso contrário: ignore DLL. Em 2026, raramente vale.
Workflow de produção recomendado
- Prototipa em Python notebook — explora, treina, valida
- Exporta para ONNX com
skl2onnxoutorch.onnx.export - Valida com onnxruntime no Python — predições idênticas ao framework original
- Embarca como #resource no EA MQL5
- Backteste no Strategy Tester
- Demo trade 30 dias
- Live com stake mínimo
Fluxo prático passo-a-passo em Como exportar Python para ONNX e usar no MT5.
Casos em que socket ainda ganha
Um caso real: você quer rodar um LLM (modelo de linguagem) que analisa notícias em tempo real e devolve sentimento. LLMs nem sempre exportam bem para ONNX (alguns operadores transformer custom não convertem). Aí, manter um servidor Python com Hugging Face transformers + endpoint REST faz mais sentido. O EA chama o endpoint a cada hora (não a cada tick), latência de 200ms é irrelevante.
Outro caso: reinforcement learning online, onde o modelo se atualiza durante a execução. Não dá pra recompilar ONNX a cada update — servidor Python mantém o estado.
Conclusão honesta
🏆 Default 2026: ONNX
Para 90% dos casos de uso de IA em trading no MT5, ONNX nativo é a escolha óbvia. Simples, rápido, robusto, oficialmente suportado. Reserve socket para casos onde Python tem que estar vivo (LLMs, RL online, prototipação) e DLL quase nunca.
🚀 Para testar EAs com ONNX: demo Deriv MT5 ($10.000 virtuais):
Abrir Demo Deriv MT5Tópicos relacionados
- Pillar — ONNX no MT5 completo
- Exportar Python para ONNX (tutorial)
- Referência das funções ONNX MQL5
- 5 modelos ONNX práticos para trading
