Files
XauBot/docs/arsitektur-ai/01-HMM-Regime-Detector.md
T
GifariKemalandClaude Opus 4.5 7af9183af3 feat: Smart AI Trading Bot for XAUUSD with ML and SMC
- XGBoost ML model with 37 features for market direction prediction
- Smart Money Concepts (SMC): Order Blocks, FVG, BOS, CHoCH
- HMM market regime detection (trending/ranging/volatile)
- ATR-based stop loss with 1.5 ATR minimum distance
- Broker-level SL protection with fallback
- Time-based exit (max 6 hours per trade)
- Session-aware trading optimized for London/NY overlap
- Auto-retraining based on market conditions
- Telegram notifications and web dashboard
- Backtest results: 63.9% win rate, 2.64 profit factor, 4.83 Sharpe

Backtest period: Jan 2025 - Feb 2026, 654 trades, $4,189 net P/L

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

4.9 KiB

HMM (Hidden Markov Model) — Regime Detector

File: src/regime_detector.py Model: models/hmm_regime.pkl Library: hmmlearn.GaussianHMM


Apa Itu HMM?

Hidden Markov Model adalah model statistik yang mendeteksi "hidden state" (kondisi tersembunyi) dari data yang terlihat. Dalam konteks trading, HMM membaca pola volatilitas dan return harga untuk mengklasifikasikan kondisi pasar saat ini.

Analogi: HMM adalah radar cuaca untuk pasar — menentukan apakah pasar sedang cerah, mendung, atau badai.


Fungsi Utama

HMM bertugas mengklasifikasikan kondisi pasar ke dalam 3 regime:

Regime Nama Aksi Trading Lot Multiplier
0 LOW_VOLATILITY Trade normal 1.0x
1 MEDIUM_VOLATILITY Trade normal 1.0x
2 HIGH_VOLATILITY Kurangi lot 0.5x
- CRISIS Stop trading 0.0x

Arsitektur Model

GaussianHMM(
    n_components=3,          # 3 regime (low/medium/high volatility)
    covariance_type="diag",  # Diagonal covariance (stabil)
    n_iter=200,              # Iterasi training
    random_state=42,
)

Konfigurasi (config.py):

n_regimes        = 3     # Jumlah regime
lookback_periods = 500   # Bar untuk training
retrain_frequency = 20   # Retrain setiap 20 bar

Input (Fitur)

HMM hanya menggunakan 2 fitur sederhana:

Fitur Formula Fungsi
Log Returns ln(close[t] / close[t-1]) Momentum & arah harga
Rolling Volatility StdDev(log_returns, 20) Gejolak pasar 20 bar

Kenapa hanya 2? HMM bekerja optimal dengan fitur sedikit tapi representatif. Dua fitur ini sudah cukup menangkap pola volatilitas pasar.


Cara Kerja

Proses Prediksi (Setiap Loop)

200 bar M15 terakhir dari MT5
        |
        v
prepare_features()
  - Hitung log_returns = ln(close[t] / close[t-1])
  - Hitung rolling volatility = StdDev(20 bar)
        |
        v
model.predict(features)
  - Output: regime per bar (0, 1, atau 2)
        |
        v
model.predict_proba(features)
  - Output: probabilitas tiap regime (0-1)
        |
        v
Mapping ke nama regime:
  - Sort berdasarkan volatilitas
  - Volatilitas terendah = LOW_VOLATILITY
  - Volatilitas tertinggi = HIGH_VOLATILITY
        |
        v
Output per bar:
  - regime: 0/1/2
  - regime_name: "low_volatility" / "medium_volatility" / "high_volatility"
  - regime_confidence: 0.0 - 1.0

Proses Training

1. Ambil 10,000 bar M15 XAUUSD dari MT5
2. Hitung fitur: log_returns + volatility
3. Fit GaussianHMM dengan 3 komponen
   -> Model belajar transition probability antar regime
   -> Model belajar emission probability (pola tiap state)
4. Map state ke nama regime berdasarkan sorting volatilitas
5. Simpan ke models/hmm_regime.pkl

Output & Dampak ke Trading

1. Position Size Multiplier

get_position_multiplier(regime):
    LOW_VOLATILITY      -> 1.0x (lot penuh)
    MEDIUM_VOLATILITY   -> 1.0x (lot penuh)
    HIGH_VOLATILITY     -> 0.5x (lot setengah)
    CRISIS              -> 0.0x (tidak trading)

# Contoh:
base_lot = 0.02
actual_lot = base_lot * multiplier
# HIGH_VOL: 0.02 * 0.5 = 0.01

2. Trading Gate

if regime == CRISIS:
    return None  # STOP — tidak boleh trading sama sekali

3. Fitur Input untuk XGBoost

Kolom regime (0/1/2) juga dikirim sebagai salah satu dari 24 fitur XGBoost, sehingga model ML tahu kondisi pasar saat membuat prediksi.


Transition Matrix

HMM menghasilkan matriks transisi yang menunjukkan probabilitas perpindahan antar regime:

              Ke:
Dari:     LOW    MED    HIGH
LOW     [ 0.85   0.12   0.03 ]   <- 85% tetap low
MED     [ 0.10   0.78   0.12 ]   <- 78% tetap medium
HIGH    [ 0.05   0.15   0.80 ]   <- 80% tetap high

Kegunaan: Memprediksi seberapa lama regime saat ini akan bertahan.


Auto-Retraining

  • Jadwal: Harian pukul 05:00 WIB (saat pasar tutup)
  • Data: 5,000 bar terakhir
  • Validasi: Jika log-likelihood terlalu rendah, rollback ke model lama
  • Backup: Model lama disimpan di models/backups/[timestamp]/

Metrik Evaluasi

{
    "samples": 10000,           # Bar yang digunakan
    "n_regimes": 3,             # Jumlah state
    "log_likelihood": -1234.5,  # Kualitas fit (makin tinggi makin baik)
}

Contoh Skenario

Skenario 1: Pasar tenang

Input:  Volatilitas rendah, return stabil
Output: regime=0 (LOW_VOLATILITY), confidence=0.92
Aksi:   Trading normal, lot penuh (1.0x)

Skenario 2: Volatilitas melonjak (berita NFP)

Input:  Volatilitas tinggi, return besar
Output: regime=2 (HIGH_VOLATILITY), confidence=0.88
Aksi:   Lot dikurangi 50% (0.5x), melindungi modal

Skenario 3: Flash crash

Input:  Volatilitas ekstrem, return sangat besar
Output: regime=CRISIS, confidence=0.95
Aksi:   STOP trading — 0% lot, lindungi akun