Files
XauBot/docs/arsitektur-ai/02-XGBoost-Signal-Predictor.md
T
GifariKemalandClaude Opus 4.5 092926415c chore: add training data, backups, and research docs
- Add model backups from training sessions
- Add training data parquet file
- Add risk state persistence file
- Add research documents (Gemini analysis)
- Update architecture docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 09:44:49 +07:00

6.8 KiB

XGBoost — Signal Predictor

File: src/ml_model.py Model: models/xgboost_model.pkl Library: xgboost


Apa Itu XGBoost?

XGBoost (eXtreme Gradient Boosting) adalah algoritma machine learning berbasis ensemble decision tree. Model ini belajar dari puluhan fitur teknikal untuk memprediksi arah harga di bar berikutnya.

Analogi: XGBoost adalah navigator AI — menentukan apakah harga akan naik atau turun.


Fungsi Utama

XGBoost bertugas memprediksi probabilitas harga naik atau turun di bar M15 berikutnya, lalu menghasilkan signal BUY, SELL, atau HOLD.

prob_up > 0.65   ->  BUY
prob_down > 0.65 ->  SELL
lainnya          ->  HOLD (tidak cukup yakin)

Arsitektur Model

params = {
    "objective": "binary:logistic",   # Klasifikasi biner (naik/turun)
    "eval_metric": "auc",             # Area Under Curve
    "max_depth": 3,                   # Kedalaman tree (anti-overfitting)
    "learning_rate": 0.05,            # Lambat & stabil
    "min_child_weight": 10,           # Minimum sampel per leaf
    "subsample": 0.7,                 # 70% data per round
    "colsample_bytree": 0.6,          # 60% fitur per tree
    "reg_alpha": 1.0,                 # L1 regularization
    "reg_lambda": 5.0,                # L2 regularization (kuat)
    "gamma": 1.0,                     # Min loss reduction per split
}

Anti-Overfitting:

  • Tree dangkal (depth 3, bukan 6)
  • Early stopping setelah 5 round tanpa improvement
  • Feature subsampling 60%
  • Regularisasi L2 kuat (lambda=5.0)

Input (24 Fitur)

Indikator Teknikal

Fitur Sumber Fungsi
rsi Feature Eng Overbought/oversold
atr, atr_percent Feature Eng Volatilitas
macd, macd_signal, macd_histogram Feature Eng Momentum tren
bb_percent_b, bb_width Feature Eng Posisi dalam Bollinger Band
ema_9, ema_21 Feature Eng Tren jangka pendek

Returns & Momentum

Fitur Formula Fungsi
returns_1 close[t]/close[t-1] - 1 Return 1 bar
returns_5 close[t]/close[t-5] - 1 Return 5 bar
returns_20 close[t]/close[t-20] - 1 Return 20 bar
log_returns ln(close[t]/close[t-1]) Log return

Volatilitas & Posisi Harga

Fitur Fungsi
volatility_20 Realized volatility 20 bar
normalized_range (High-Low)/Close
avg_normalized_range Rata-rata range 14 bar
price_position Posisi 0-1 dalam range
dist_from_sma_20 Jarak dari SMA 20

Smart Money Concepts (SMC)

Fitur Fungsi
swing_high, swing_low Fractal structure
fvg_signal Fair Value Gap (1/-1/0)
ob Order Block (1/-1/0)
bos, choch Break of Structure, Change of Character
market_structure Bullish/Bearish (1/-1/0)

Waktu & Regime

Fitur Fungsi
hour, weekday Pola jam & hari
london_session, ny_session Flag sesi trading
regime HMM regime state (0/1/2)

Cara Kerja

Proses Prediksi (Setiap Loop)

DataFrame lengkap (200 bar + semua fitur)
        |
        v
Ambil baris terakhir (1 bar)
        |
        v
Pilih 24 fitur yang sesuai dengan training
        |
        v
Buat DMatrix (format XGBoost)
        |
        v
model.predict() -> probabilitas harga NAIK (0-1)
        |
        v
Tentukan signal:
  prob_up > 0.65   -> BUY
  prob_down > 0.65 -> SELL
  lainnya          -> HOLD
        |
        v
Output: PredictionResult
  - signal: "BUY" / "SELL" / "HOLD"
  - probability: 0-1 (prob naik)
  - confidence: max(prob_up, prob_down)
  - feature_importance: {fitur: skor}

Proses Training

1. Ambil 10,000 bar M15 XAUUSD
2. Feature engineering (40+ kolom)
3. SMC analysis (swing, FVG, OB, BOS, CHoCH)
4. Buat target: 1 jika close[t+1] > close[t], else 0
5. Split: 70% train, 30% test
   PENTING: 50-bar gap antara train & test set (v4)
   → Mencegah temporal leakage (autocorrelation antar bar berdekatan)
   → Train: bar 0 sampai split_point
   → Test: bar split_point + 50 sampai akhir
6. Train XGBoost 50 round + early stopping (patience=5)
7. Evaluasi: Train AUC vs Test AUC
8. Simpan model + feature names ke .pkl

Output & Dampak ke Trading

1. Validasi Signal SMC

SMC bilang BUY + XGBoost setuju (>55%)    -> TRADE
SMC bilang BUY + XGBoost netral (<55%)    -> SKIP
SMC bilang BUY + XGBoost bilang SELL >75% -> TOLAK (veto)

2. Confidence Gate

ML confidence < 55%  -> Tidak boleh entry (terlalu tidak yakin)
ML confidence 55-65% -> Entry dengan lot kecil
ML confidence > 65%  -> Entry dengan lot penuh

3. Exit Signal (Penutupan Posisi)

Posisi BUY terbuka
XGBoost prediksi SELL dengan confidence > 75%
-> TUTUP posisi (ML reversal exit)

4. Feature Importance

# Contoh output (top 5)
{
    "market_structure": 0.85,   # Fitur paling penting
    "rsi": 0.68,
    "atr_percent": 0.65,
    "macd_histogram": 0.52,
    "bos": 0.48,
}

Menunjukkan fitur mana yang paling berpengaruh dalam keputusan model.


Metrik Evaluasi

{
    "train_auc": 0.6234,      # Performa di data training
    "test_auc": 0.5932,       # Performa di data testing
    "train_samples": 7000,
    "test_samples": 3000,
    "num_features": 24,
}
AUC Interpretasi
0.50 Sama dengan tebak acak
0.55 Sedikit lebih baik dari acak
< 0.60 ROLLBACK — terlalu rendah untuk trading (v4 threshold)
0.60-0.65 Minimum acceptable, warning
0.65+ Cukup baik untuk trading
0.70+ Sangat baik

Rollback threshold: Jika test AUC < 0.60, model otomatis rollback ke versi sebelumnya. (v4: dinaikkan dari 0.52 karena 0.52 hampir sama dengan tebak acak)


Auto-Retraining

  • Jadwal: Harian pukul 05:00 WIB
  • Data: 8,000 bar (daily) / 15,000 bar (weekend deep training)
  • Cek retrain: Setiap 20 candle M15 (~5 jam) — candle-based, bukan time-based
  • Proses: Backup lama -> retrain -> validasi AUC -> simpan/rollback
  • Rollback: AUC < 0.60 → otomatis rollback (v4: dinaikkan dari 0.52)
  • Minimum interval: 20 jam antar retrain (cegah overfitting)
  • Train/test gap: 50 bar antara train dan test set (anti temporal leakage)

Contoh Skenario

Skenario 1: Signal kuat

RSI=35 (oversold), MACD rising, BOS bullish, market_structure=1
-> XGBoost: prob_up=0.78 -> BUY (confidence 78%)
-> Lot penuh, entry dieksekusi

Skenario 2: Konflik dengan SMC

SMC signal: BUY
XGBoost: prob_down=0.82 -> SELL (confidence 82%)
-> Signal DITOLAK (ML strongly disagrees >75%)
-> Tidak ada trade

Skenario 3: Tidak yakin

RSI=50, MACD flat, regime=1
-> XGBoost: prob_up=0.53 -> HOLD (confidence 53% < 55%)
-> Tidak ada trade — tunggu signal lebih jelas