ONNX no MT5: Guia Completo para Rodar IA em Expert Advisors
📋 O que você vai aprender
- O que é ONNX e por que mudou o jogo da IA em trading
- Suporte nativo no MQL5 — sem DLL, sem socket, sem gambiarra
- Fluxo completo: Python → ONNX → Expert Advisor
- Quais frameworks ML exportam para ONNX (PyTorch, TensorFlow, Sklearn, XGBoost)
- Validação no Strategy Tester antes de operar com capital real
- Limitações reais que não dizem nas propagandas
📑 Conteúdo
O que é ONNX (Open Neural Network Exchange)
ONNX é um formato aberto para representar modelos de machine learning. Foi criado pela Microsoft em parceria com Facebook (hoje Meta) e cresceu até virar padrão da indústria com suporte de PyTorch, TensorFlow, scikit-learn, XGBoost e dezenas de outros frameworks.
A ideia central é simples: você treina o modelo no framework que preferir, exporta para um arquivo .onnx único, e depois consome esse arquivo em qualquer runtime que entenda ONNX — incluindo o MetaTrader 5.
💡 Analogia
Pense em ONNX como o PDF dos modelos de IA: você criou no Word, Pages ou Google Docs — abre em qualquer leitor. Modelo treinado em PyTorch no notebook do cientista de dados, rodando no terminal MT5 da corretora sem precisar instalar PyTorch.
Por que ONNX + MT5 mudou o jogo
Antes do suporte nativo, integrar IA com MT5 era doloroso. As opções eram:
- Socket TCP/IP entre EA e servidor Python — adiciona latência de rede, ponto único de falha
- REST API chamando endpoint externo — pior ainda em latência
- DLL customizada em C++ embarcando libtorch ou tensorflow C — difícil de manter, frágil entre versões
- Reescrever o modelo em MQL5 — inviável para arquiteturas complexas (LSTM, Transformer)
Hoje, a documentação oficial em mql5.com/en/docs/onnx deixa claro que “a velocidade de execução do MQL5 é comparável à de aplicações em C++” rodando ONNX. Tradução: você ganha a flexibilidade do Python pra treinar com a performance do C++ pra inferir.
O fluxo completo em 3 etapas
De acordo com a documentação oficial, todo o processo se resume a:
- Treinar o modelo em uma plataforma de terceiros, como Python (PyTorch, TensorFlow, Sklearn)
- Converter o modelo para ONNX usando a biblioteca correspondente do framework
- Incluir o modelo ONNX em um Expert Advisor usando as funções ONNX nativas e rodar no terminal MT5
🔥 Bônus do MetaEditor
O MetaEditor permite rodar scripts Python direto do editor (configurando o caminho do executável Python nas configurações). Você pode treinar, exportar e validar o modelo sem sair do ambiente MT5. Tutorial detalhado em Como exportar Python para ONNX e usar no MT5.
Funções ONNX nativas no MQL5
A linguagem MQL5 expõe um conjunto enxuto e completo de funções para manipular sessões ONNX. Cobertura essencial:
| Função | Propósito |
|---|---|
| OnnxCreate | Carrega modelo de arquivo .onnx (pasta MQL5\Files\) |
| OnnxCreateFromBuffer | Carrega modelo de array em memória (útil para embedar no EA) |
| OnnxRun | Executa inferência com inputs e devolve outputs |
| OnnxRelease | Encerra a sessão ONNX (chamar em OnDeinit) |
| OnnxSetInputShape | Define o shape dos tensores de entrada |
| OnnxSetOutputShape | Define o shape dos tensores de saída |
| OnnxGetInputCount / OutputCount | Inspeciona quantos inputs/outputs o modelo tem |
| OnnxGetInputName / OutputName | Nome dos tensores (útil para debug) |
| OnnxGetInputTypeInfo / OutputTypeInfo | Tipos de dados esperados |
Referência completa de cada função em OnnxCreate, OnnxRun e Funções MQL5 — Referência Completa.
Exemplo mínimo funcional
Esqueleto de Expert Advisor que carrega um modelo ONNX, faz uma previsão a cada novo candle e loga o resultado:
//+------------------------------------------------------------------+
//| OnnxMinimalEA.mq5 |
//| IA Trader Pro 2026 |
//+------------------------------------------------------------------+
#property strict
#resource "\\Files\\meu_modelo.onnx" as uchar ExtModel[]
long handle = INVALID_HANDLE;
datetime lastBarTime = 0;
int OnInit()
{
// Carrega modelo embarcado como resource
handle = OnnxCreateFromBuffer(ExtModel, ONNX_DEFAULT);
if(handle == INVALID_HANDLE)
{
Print("Erro ao criar sessão ONNX: ", GetLastError());
return(INIT_FAILED);
}
// Define shape esperado: 10 candles, 4 features (OHLC), 1 batch
const long input_shape[] = {1, 10, 4};
const long output_shape[] = {1, 1};
OnnxSetInputShape(handle, 0, input_shape);
OnnxSetOutputShape(handle, 0, output_shape);
Print("✓ Modelo ONNX carregado | Inputs: ", OnnxGetInputCount(handle),
" | Outputs: ", OnnxGetOutputCount(handle));
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
if(handle != INVALID_HANDLE)
OnnxRelease(handle);
}
void OnTick()
{
datetime current = iTime(_Symbol, PERIOD_CURRENT, 0);
if(current == lastBarTime) return;
lastBarTime = current;
// Coleta últimos 10 candles OHLC
MqlRates rates[10];
if(CopyRates(_Symbol, PERIOD_CURRENT, 1, 10, rates) != 10) return;
matrix input(10, 4);
for(int i = 0; i < 10; i++)
{
input[i][0] = (float)rates[i].open;
input[i][1] = (float)rates[i].high;
input[i][2] = (float)rates[i].low;
input[i][3] = (float)rates[i].close;
}
vector output(1);
if(!OnnxRun(handle, ONNX_DEFAULT, input, output))
{
Print("Erro OnnxRun: ", GetLastError());
return;
}
double prediction = output[0];
PrintFormat("Predição modelo: %.5f | Close atual: %.5f", prediction, rates[9].close);
// Aqui você implementa sua lógica: prediction > threshold → BUY, etc.
}
⚠️ Validação no Strategy Tester
A documentação oficial recomenda validar o modelo no Strategy Tester do MT5 antes de operar com capital real. O projeto público ONNX.Price.Prediction (disponível no MetaEditor em Toolbox → Public Projects) é o exemplo de referência da própria MetaQuotes. Use-o como ponto de partida.
Frameworks Python compatíveis
Qualquer framework com exportador ONNX gera modelo que roda no MT5:
| Framework | Biblioteca de export | Caso de uso típico |
|---|---|---|
| PyTorch | torch.onnx.export() | LSTM, Transformer, redes profundas |
| TensorFlow / Keras | tf2onnx | CNN, séries temporais |
| Scikit-learn | skl2onnx | Random Forest, SVM, regressão |
| XGBoost | onnxmltools | Classificação de tendência, gradient boosting |
| LightGBM | onnxmltools | Mesma família do XGBoost, mais rápido |
| CatBoost | convertidor nativo | Trabalha bem com features categóricas |
Para casos práticos de cada arquitetura aplicada a trading, veja 5 Modelos ONNX para Trading no MT5.
Limitações honestas
ONNX no MT5 é poderoso, mas não é mágico. Pontos reais a considerar:
- Operadores suportados: nem toda operação de PyTorch/TF tem equivalente ONNX. A documentação remete ao arquivo
OperatorKernels.mddo ONNX Runtime — verifique antes de gastar dias treinando algo que não exporta. - Tamanho do modelo: modelos gigantes (LLMs de bilhões de parâmetros) não cabem na memória nem fazem sentido em latência de tick. Pense em modelos de até dezenas/centenas de MB.
- GPU é opcional: por padrão, ONNX Runtime no MT5 escolhe CPU. Para usar GPU CUDA, é preciso configurar flags específicas (ENUM_ONNX_FLAGS com ONNX_GPU_DEVICE_N).
- Overfitting é seu inimigo: rodar IA no MT5 é fácil; treinar um modelo que generaliza para mercado real é onde 95% dos projetos falham. ONNX não te salva de backtest mal feito.
- Backtest ≠ Live: slippage, spread variável e latência podem matar uma estratégia que parecia perfeita no Strategy Tester.
📚 Comparação com outras integrações
Para entender quando vale ONNX nativo, quando vale socket Python e quando vale DLL custom, leia ONNX vs Python Socket vs DLL: Qual a Melhor Integração?.
FAQ
Preciso saber Python para usar ONNX no MT5?
Sim, para treinar o modelo. Python é onde acontece o trabalho pesado. O EA em MQL5 só consome o arquivo .onnx pronto. Se você não programa Python, comece pelo tutorial passo-a-passo.
Funciona em qualquer corretora MT5?
Sim. ONNX é parte do terminal MT5, não do servidor da corretora. Funciona em Deriv MT5, Exness, IC Markets, Pepperstone, qualquer broker com MT5.
Posso usar o Deriv MT5 com EA ONNX?
Sim. Deriv suporta EAs completos no MT5, incluindo modelos ONNX. Demo gratuita disponível para testes.
ONNX roda no MT4?
Não. O suporte nativo a ONNX é exclusivo do MQL5/MT5. No MT4 só via DLL externa, que não é trivial.
Qual o tamanho máximo de modelo?
A documentação oficial não fixa um limite teórico, mas na prática modelos acima de algumas centenas de MB começam a causar lentidão na carga e na inferência. Para uso em tick frequency, mantenha modelos enxutos.
O modelo treina dentro do MT5?
Não. O MT5 só roda inferência. Treinamento acontece em Python (com bibliotecas como PyTorch ou Sklearn). O MetaEditor permite executar scripts Python para o pipeline de treino, mas o “cérebro” matemático está fora.
🚀 Para testar EAs com ONNX, demo gratuita Deriv MT5 ($10.000 virtuais):
Abrir Conta Demo DerivPróximos passos
- Como exportar PyTorch/Sklearn para ONNX (tutorial)
- Referência completa das funções ONNX no MQL5
- ONNX vs Socket vs DLL — qual integração escolher
- 5 modelos ONNX práticos para trading
