5 Mô hình ONNX cho Trading MT5: LSTM, XGBoost, CNN, Random Forest, Transformer
Năm kiến trúc machine learning, năm trường hợp sử dụng trading thực tế, tất cả đều có thể xuất sang ONNX và sử dụng trong Expert Advisor MT5.
⚠️ Tuyên bố trung thực: Không có mô hình nào, dù tinh vi đến đâu, đảm bảo lợi nhuận. Sự khác biệt giữa trader chuyên nghiệp và nghiệp dư không nằm ở mô hình — đó là feature engineering, validation nghiêm ngặt, quản lý rủi ro và kỷ luật.
So sánh nhanh
| Mô hình | Khi nào dùng | Độ phức tạp | Export ONNX |
|---|---|---|---|
| Random Forest | Baseline | Thấp | skl2onnx |
| XGBoost | Features tabular phong phú | Trung bình | onnxmltools |
| CNN 1D | Mẫu cục bộ trong chuỗi | Trung bình | torch.onnx.export |
| LSTM/GRU | Phụ thuộc thời gian dài | Cao | torch.onnx.export |
| Transformer | Multi-asset, multi-feature | Rất cao | torch.onnx.export |
1. Random Forest — baseline trung thực
Framework: Sklearn · Huấn luyện: phút · Suy luận: < 1 ms
Phân loại nhị phân hướng (lên/xuống) hoặc nhiều lớp. Mô hình đầu tiên mọi dự án AI-in-trading nên thử — nếu RF với 200 trees không vượt qua ngẫu nhiên (50%), vấn đề ở features, không phải mô hình. Train trong 1 phút.
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())
2. XGBoost — người chiến thắng Kaggle áp dụng cho thị trường
Framework: XGBoost · Suy luận: ~1-3 ms
Giống RF nhưng thường chính xác hơn 2-5% trên tabular. Tỏa sáng với nhiều features (50+ chỉ báo, orderbook, sentiment). Cẩn thận: dễ overfit hơn trên chuỗi thời gian — dùng early_stopping_rounds.
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)
model.fit(X_train, y_train, eval_set=[(X_val, y_val)])
3. CNN 1D — tìm mẫu trực quan
Framework: PyTorch/TF · Suy luận: ~1-5 ms
Xác định các mẫu cục bộ trong chuỗi thời gian — như ‘scanner tìm formations candle’ nhưng tự học các mẫu. Hoạt động tốt với mẫu ngắn 5-30 candles, đặc biệt synthetic indices (Deriv V75). Train nhanh hơn LSTM, xuất sạch sang ONNX.
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 = self.pool(torch.relu(self.conv1(x)))
x = self.pool(torch.relu(self.conv2(x)))
return self.fc(x.flatten(1))
4. LSTM / GRU — bộ nhớ cho phụ thuộc dài
Framework: PyTorch/TF · Suy luận: ~2-10 ms
Kiến trúc ‘chuẩn’ cho chuỗi thời gian trước Transformer. LSTM giữ trạng thái nội bộ (bộ nhớ) mang thông tin qua hàng chục/hàng trăm timesteps. Hữu ích cho swing trading H1/H4/D1, các chế độ biến động thay đổi chậm. Cẩn thận: data leakage dễ xảy ra — luôn split thời gian nghiêm ngặt, không bao giờ shuffle. GRU là em họ đơn giản hơn của LSTM.
5. Transformer — khi bạn cần nhiều hơn
Framework: PyTorch · Suy luận: ~10-50 ms
Kiến trúc thống trị NLP, được điều chỉnh cho chuỗi thời gian (Informer, Autoformer, PatchTST). Học các mối quan hệ ‘attention’ qua tất cả timesteps đồng thời. Tỏa sáng trong multi-asset (dự đoán EURUSD dùng EURUSD + DXY + vàng + bonds + VIX).
⚠️ Reality check: Paper ‘Are Transformers Effective for Time Series Forecasting?’ (Zeng et al., AAAI 2023) chỉ ra MLPs tuyến tính đơn giản đôi khi đánh bại Transformers. Đừng dùng Transformer vì hype.
Chọn cái nào cho dự án của bạn?
| Tình huống của bạn | Bắt đầu với |
|---|---|
| Chưa từng train AI | Random Forest |
| Có RF, muốn cải thiện | XGBoost |
| Nghi ngờ mẫu trực quan | CNN 1D |
| Swing trading, ngữ cảnh dài | LSTM hoặc GRU |
| Multi-asset, features phức tạp | Transformer |
| Còn nghi ngờ | Random Forest (luôn) |
Pipeline tiêu chuẩn cho mọi mô hình
- Thu thập dữ liệu qua
mt5.copy_rates_from_pos() - Feature engineering — lagged returns, indicators, context
- Split thời gian 80/20 — không shuffle
- Train trên train, validate trên test holdout
- Xuất sang ONNX với exporter framework
- Validate với onnxruntime trong Python
- Nhúng trong EA qua #resource + OnnxCreateFromBuffer
- Backtest trong MT5 Strategy Tester
- Demo trade 30+ ngày với risk management
- Live với stake tối thiểu, scaling dần
Nguyên tắc phổ quát:
1. Mô hình đơn giản hoạt động > phức tạp có thể hoạt động
2. Feature engineering đánh bại kiến trúc 9/10 lần
3. Validation theo thời gian là thiêng liêng
4. Backtest chuyên nghiệp dùng 6+ tháng out-of-sample
5. Quản lý rủi ro giết nhiều bot hơn mô hình kém
🚀 Để kiểm tra EA với ONNX, demo Deriv MT5 miễn phí ($10.000 ảo):
