5 Modelos ONNX para Trading no MT5: LSTM, XGBoost, CNN, Random Forest e Transformer
Cinco arquiteturas de machine learning, cinco casos de uso reais para trading, todas exportáveis para ONNX e consumíveis em Expert Advisor MT5. Para cada uma: para que serve, quando faz sentido, como exportar, exemplo mínimo. Pré-requisito conceitual: guia pillar ONNX no MT5.
⚠️ Honest disclaimer antes da lista
Nenhum modelo, por mais sofisticado, garante lucro. A diferença entre trader profissional e amador não está no modelo — está em feature engineering, validação rigorosa, risk management e disciplina. Use estas arquiteturas como ponto de partida, não como atalho.
Comparativo rápido
| Modelo | Quando usar | Complexidade | ONNX export |
|---|---|---|---|
| Random Forest | Baseline, classificação simples | Baixa | skl2onnx |
| XGBoost | Tabular features ricas | Média | onnxmltools |
| CNN 1D | Padrões em séries temporais | Média | torch.onnx.export |
| LSTM/GRU | Dependências temporais longas | Alta | torch.onnx.export |
| Transformer | Multi-asset, multi-feature | Muito alta | torch.onnx.export (cuidado) |
1. Random Forest — o baseline honesto
Random Forest Classifier
Para que serve: classificação binária de direção (sobe/desce próximo candle) ou multi-classe (forte alta / leve alta / lateral / leve baixa / forte baixa). É o primeiro modelo que todo projeto de IA em trading deveria experimentar — se Random Forest com 200 árvores não bate o random (50%), seu problema está nas features, não no modelo.
Quando faz sentido: features tabulares (indicadores técnicos, retornos lagged, volume, hora do dia, dia da semana). Funciona em qualquer timeframe. Robusto a outliers. Não precisa normalização.
✓ Por que começar aqui
Treina em 1 minuto. Não tem hiperparâmetros para perder o sono. Resultado serve como benchmark: se LSTM elaborada bater o Random Forest em apenas 1-2 pontos percentuais, talvez não compense a complexidade.
from sklearn.ensemble import RandomForestClassifier
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
model = RandomForestClassifier(n_estimators=200, max_depth=8)
model.fit(X_train, y_train)
initial_type = [('input', FloatTensorType([None, n_features]))]
onnx_model = convert_sklearn(model, initial_types=initial_type, target_opset=15)
with open("rf.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
Tutorial completo: Exportar Sklearn para ONNX e usar no MT5.
2. XGBoost — o vencedor de Kaggle aplicado a mercado
XGBoost Classifier / Regressor
Para que serve: mesmo que Random Forest, mas tipicamente 2-5% mais accurate em problemas tabulares. Trocou Random Forest por XGBoost em centenas de competições Kaggle e quase sempre ganhou. Para trading, brilha quando você tem muitas features e quer que o modelo descubra interações não-lineares.
Quando faz sentido: você já tem RF rodando e quer espremer mais alguns pontos de accuracy. Tem features ricas (50+ indicadores diferentes, dados de orderbook, sentiment). Precisa de regressão (prever magnitude, não só direção).
Cuidado: XGBoost é mais sensível a overfit em séries temporais. Use early_stopping_rounds com validation set temporal separado.
import xgboost as xgb
from onnxmltools.convert import convert_xgboost
from onnxconverter_common.data_types import FloatTensorType
model = xgb.XGBClassifier(
n_estimators=300, max_depth=6, learning_rate=0.05,
early_stopping_rounds=20, eval_metric='logloss'
)
model.fit(X_train, y_train, eval_set=[(X_val, y_val)])
initial_type = [('input', FloatTensorType([None, n_features]))]
onnx_model = convert_xgboost(model, initial_types=initial_type)
with open("xgb.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
3. CNN 1D — encontra padrões visuais em séries
1D CNN para Pattern Recognition
Para que serve: identificar padrões locais em séries temporais. Pense como “scanner que procura formações de candle” — mas em vez de regras hard-coded (martelo, engolfo, estrela cadente), a CNN aprende sozinha quais sequências de candle são preditivas.
Quando faz sentido: quando você suspeita que existem padrões locais de curto prazo (5-30 candles) que se repetem. Funciona bem em ativos com movimentação por “ondas” (synthetic indices Deriv como Volatility 75).
Vantagem técnica: CNNs são mais rápidas de treinar que LSTMs e exportam para ONNX sem dor de cabeça (todas as operações são suportadas).
import torch.nn as nn
class CNN1D(nn.Module):
def __init__(self, in_channels=4, seq_len=30, n_classes=2):
super().__init__()
self.conv1 = nn.Conv1d(in_channels, 32, kernel_size=5, padding=2)
self.conv2 = nn.Conv1d(32, 64, kernel_size=3, padding=1)
self.pool = nn.MaxPool1d(2)
self.fc = nn.Linear(64 * (seq_len // 4), n_classes)
def forward(self, x):
# x shape: (batch, channels=OHLC, seq_len)
x = self.pool(torch.relu(self.conv1(x)))
x = self.pool(torch.relu(self.conv2(x)))
x = x.flatten(1)
return self.fc(x)
# Export
torch.onnx.export(model, dummy_input, "cnn1d.onnx",
input_names=['input'], output_names=['output'], opset_version=15)
4. LSTM / GRU — memória para dependências longas
LSTM (Long Short-Term Memory)
Para que serve: a arquitetura “padrão de mercado” para séries temporais antes dos Transformers. LSTM mantém estado interno (a “memória”) que carrega informação por dezenas/centenas de timesteps. Útil quando o contexto distante importa — por exemplo, regime de volatilidade que muda lentamente.
Quando faz sentido: swing trading em H1/H4/D1 onde tendência se forma ao longo de 50-200 candles. Multi-step forecasting (prever os próximos 5 candles, não só o próximo). Sequências com dependências temporais não-locais.
Cuidado: LSTM treinada mal facilmente sofre data leakage. Use sempre split temporal estrito. Não use shuffle. Verifique que o backtest reproduz exatamente a inferência live.
O tutorial passo-a-passo tem o código LSTM completo, training loop, e exportação para ONNX. GRU é a versão “mais simples” de LSTM — frequentemente performa igual ou melhor com menos parâmetros.
5. Transformer — quando você precisa de mais
Transformer / Time-Series Transformer
Para que serve: a arquitetura que dominou NLP e que tem sido adaptada para séries temporais (Informer, Autoformer, PatchTST, Time-Series Transformer). Aprende relações “atenção” entre todos os timesteps simultaneamente — não sequencial como LSTM.
Quando faz sentido: multi-asset ou multi-feature. Por exemplo: prever EURUSD usando EURUSD + USD index + ouro + bonds 10Y + VIX simultaneamente. Transformer aprende quais relações cross-asset importam em cada momento.
⚠️ Reality check sobre Transformers em trading
A literatura acadêmica mostra que Transformers nem sempre superam LSTMs em séries temporais financeiras. O paper “Are Transformers Effective for Time Series Forecasting?” (Zeng et al., AAAI 2023) mostrou que MLPs lineares simples às vezes batem Transformers. Não use Transformer por modinha — use quando o problema realmente justifica.
Cuidado com export: alguns operadores de attention custom podem não converter para ONNX. Use implementações padrão (nn.TransformerEncoder do PyTorch) que exportam bem. Modelos muito grandes (centenas de MB) carregam lentamente no MT5.
Qual escolher para seu projeto?
| Sua situação | Comece com |
|---|---|
| Nunca treinou IA antes | Random Forest |
| Tem RF rodando, quer melhorar | XGBoost |
| Suspeita de padrões locais visuais | CNN 1D |
| Swing trading, contexto longo importa | LSTM ou GRU |
| Multi-asset, features complexas | Transformer |
| Em dúvida | Random Forest (sempre) |
Pipeline padrão para qualquer modelo
- Coleta de dados via
mt5.copy_rates_from_pos()no Python - Feature engineering — retornos lagged, indicadores, contexto temporal
- Split temporal 80/20 sem shuffle
- Treina no train, valida no test holdout
- Exporta para ONNX usando o exportador do framework
- Valida em Python com onnxruntime — predições devem bater com framework original
- Embarca no EA MQL5 via
#resource+OnnxCreateFromBuffer - Backteste no Strategy Tester do MT5
- Demo trade 30+ dias com risk management
- Live com stake mínimo, escala gradual
✓ Princípios universais
1. Modelo simples que funciona > modelo complexo que pode funcionar
2. Feature engineering bate arquitetura 9 em cada 10 vezes
3. Validação temporal é sagrada — nunca shuffle em série financeira
4. Backtest profissional usa 6+ meses out-of-sample
5. Risk management mata mais bots que modelo ruim
🚀 Para deployar modelos ONNX em demo MT5 ($10.000 virtuais):
Abrir Demo Deriv MT5Tópicos relacionados
- Pillar — ONNX no MT5 completo
- Exportar Python para ONNX (tutorial completo)
- Referência das funções ONNX MQL5
- ONNX vs Socket vs DLL comparativo
