- Dark mode: class-based theme toggle with localStorage persistence and flash prevention - Trade History (/trades): paginated table, stats cards, equity curve chart with DB API endpoints - Backtest Viewer (/backtests): log parser for 35 backtest results, sidebar + detail + comparison tabs - Model Insights: dashboard card + dialog showing feature importance, regime distribution, training history - Alert/Signal Log (/alerts): signal stats, filterable table with execution tracking - API: 8 new endpoints with psycopg2 DB connection pool - Dark mode sweep across books page, about dialog, and all dashboard components - Architecture docs rewritten with Mermaid diagrams (23 docs) - README and FEATURES.md rewritten bilingual (Indonesian + English) - main_live.py: write model_metrics.json on startup and retrain Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
XGBoost — Signal Predictor
File:
src/ml_model.pyModel:models/xgboost_model.pklLibrary:xgboost
Apa Itu XGBoost Signal Predictor?
XGBoost (Extreme Gradient Boosting) adalah model machine learning yang memprediksi sinyal trading — BUY, SELL, atau HOLD — berdasarkan 37 fitur teknikal. Model ini berfungsi sebagai konfirmasi kedua setelah analisis SMC.
Alur Prediksi
graph LR
A["37 Fitur Teknikal"] --> B["XGBoost Model"]
B --> C["Probabilitas per Kelas"]
C --> D["BUY: 72%"]
C --> E["SELL: 18%"]
C --> F["HOLD: 10%"]
D --> G["Signal: BUY<br/>Confidence: 72%"]
37 Features (Fitur Input)
Model menerima 37 fitur yang dihitung oleh FeatureEngineer:
| Grup | Fitur | Jumlah |
|---|---|---|
| Momentum | RSI 14, RSI 7, MACD, MACD Signal, MACD Histogram | 5 |
| Volatilitas | ATR 14, Bollinger Upper/Lower/Width, Keltner Channel | 5 |
| Trend | EMA 9/20/50, SMA 20/50, EMA Crossover | 6 |
| Volume | Volume Ratio, Volume MA, OBV, Volume Change | 4 |
| Price Action | Body Size, Shadow Ratio, Candle Pattern, Jarak dari EMA | 5 |
| Struktur | Higher High/Lower Low, Swing Detection, BOS/CHoCH | 4 |
| Derived | Returns (1/3/5 bar), Volatility Ratio, Momentum Score | 5 |
| Lagged | Fitur-fitur di atas dengan lag 1-3 bar | 3 |
Output: Prediksi
@dataclass
class MLPrediction:
signal: str # "BUY", "SELL", atau "HOLD"
confidence: float # 0.0 - 1.0
probabilities: Dict # {"BUY": 0.72, "SELL": 0.18, "HOLD": 0.10}
Peran dalam Sistem
XGBoost bukan pembuat keputusan utama — fungsinya adalah konfirmasi dan filter:
graph TD
SMC["SMC Analyzer<br/>Sinyal Utama"] --> COMBINE["Kombinasi Sinyal"]
ML["XGBoost<br/>Konfirmasi"] --> COMBINE
COMBINE --> CHECK{"ML setuju?"}
CHECK -->|"Ya (≥50%)"| PASS["✅ Lanjut ke filter berikutnya"]
CHECK -->|"Sangat tidak setuju (>65%)"| VETO["🛑 VETO — blokir entry"]
CHECK -->|"Ragu (<50%)"| SKIP["⚠️ Skip — confidence terlalu rendah"]
Aturan Kombinasi:
| Kondisi | Aksi |
|---|---|
| SMC = BUY, ML = BUY (≥50%) | ✅ Konfirmasi — lanjut |
| SMC = BUY, ML = HOLD | ⚠️ Skip — ML tidak yakin |
| SMC = BUY, ML = SELL (≥65%) | 🛑 VETO — ML strongly disagree |
| SMC = BUY, ML = SELL (<65%) | ✅ Pass — ML kurang yakin untuk veto |
Confidence Threshold
| Level | Nilai | Penggunaan |
|---|---|---|
| Minimum | 0.50 | Batas paling rendah untuk diterima |
| Entry | 0.65-0.70 | Default dari DynamicConfidence |
| High | 0.75 | Sinyal kuat — lot multiplier aktif |
| Very High | 0.80 | Sangat yakin — batas atas |
Threshold disesuaikan secara dinamis oleh DynamicConfidenceManager berdasarkan kondisi pasar.
Training
# train_models.py
model = XGBClassifier(
n_estimators=500,
max_depth=6,
learning_rate=0.01,
subsample=0.8,
colsample_bytree=0.8,
min_child_weight=3,
reg_alpha=0.1, # L1 regularization
reg_lambda=1.0, # L2 regularization
)
# Training data: 1000+ bar XAUUSD M15
# Label: Pergerakan harga setelah N bar
# Validasi: Walk-forward dengan 80/20 split
Auto-Retrain
Model otomatis di-retrain oleh AutoTrainer setiap 7 hari atau saat:
- Akurasi prediksi turun signifikan
- Distribusi pasar berubah
- Confidence calibration menyimpang
Penyimpanan Model
| Properti | Nilai |
|---|---|
| Format | .pkl (pickle) via xgboost |
| Lokasi | models/xgboost_model.pkl |
| Ukuran | ~1-5 MB |
| Fitur | 37 kolom (harus identik saat training dan inference) |
| Retrain | Otomatis tiap 7 hari |