Files
XauBot/docs/arsitektur-ai/23-Main-Live-Orchestrator.md
T
GifariKemalandClaude Opus 4.6 757b499033 docs: sync architecture docs with v5 major issues fix
5 major issues reflected in documentation:

1. Confidence calibration (03-SMC, 00-ARSITEKTUR):
   - Base 55% + 10% each → base 40% + weighted scoring
   - Structure +15%, BOS/CHoCH +12%, FVG +8%, OB +10%, Trend +10%

2. ATR-based pullback filter (09-Entry, 00-ARSITEKTUR):
   - Hardcoded $2/$1.5 → bounce 15% ATR, consolidation 10% ATR

3. Smarter time-based exit (10-Exit, 05-Risk, 00-ARSITEKTUR):
   - 4h: check profit growth, not just profit<$5
   - 6h: extend to 8h if profit>$10 and growing + ML agrees

4. Slippage validation (09-Entry, 23-Main, 00-ARSITEKTUR):
   - Check actual vs expected price, log if >0.15%

5. Partial fill handling (09-Entry, 23-Main, 00-ARSITEKTUR):
   - Check filled volume, use actual values for tracking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:06:43 +07:00

11 KiB

Main Live — Orchestrator Utama

File: main_live.py Class: TradingBot Runtime: Async event loop (asyncio) Mode: Candle-based (analisis penuh hanya saat candle baru M15) Target: < 0.05 detik per iterasi analisis


Apa Itu Main Live?

Main Live adalah otak pusat yang mengorkestrasi semua komponen bot. Menjalankan loop candle-based — analisis penuh hanya dijalankan saat candle M15 baru terbentuk, dengan pengecekan posisi setiap 10 detik di antara candle. Mengkoordinasikan 15+ komponen dari data fetching hingga order execution.

Analogi: Main Live seperti konduktor orkestra — tidak memainkan alat musik sendiri, tapi mengarahkan semua pemain (komponen) agar bermain harmonis pada waktu yang tepat.


Komponen yang Dimuat

class TradingBot:
    def __init__(self):
        # Koneksi
        self.mt5 = MT5Connector(...)              # Jembatan ke broker
        self.telegram = TelegramNotifier(...)       # Notifikasi

        # AI Models
        self.ml_model = TradingModel(...)           # XGBoost predictor
        self.regime_detector = MarketRegimeDetector(...) # HMM regime
        self.smc = SMCAnalyzer(...)                 # Smart Money Concepts

        # Analisis
        self.features = FeatureEngineer()           # 40+ fitur
        self.dynamic_confidence = DynamicConfidenceManager(...) # Threshold
        self.session_filter = SessionFilter(...)     # Waktu trading
        self.news_agent = NewsAgent(...)            # Monitor berita

        # Risiko
        self.smart_risk = SmartRiskManager(...)     # Risk management
        self.risk_engine = RiskEngine(...)          # Kelly criterion
        self.position_manager = SmartPositionManager(...) # Position mgmt

        # Logging & Training
        self.trade_logger = TradeLogger(...)        # Pencatat trade
        self.auto_trainer = AutoTrainer(...)        # Retraining otomatis

        # State
        self.flash_crash_detector = FlashCrashDetector(...) # Proteksi

Main Loop (Candle-Based)

STARTUP:
  Load models → Connect MT5 → Send Telegram startup
    |
    v
LOOP UTAMA (cek setiap ~5 detik, analisis pada candle baru):
    |
    ├── Fetch 2 bar terakhir → cek apakah candle baru terbentuk
    |
    |===[CANDLE BARU? YA → FULL ANALYSIS]=================
    |
    |  |===[PHASE 1: DATA]================================
    |  |
    |  ├── Fetch 200 bar M15 XAUUSD dari MT5
    |  ├── Feature Engineering (40+ fitur)
    |  ├── SMC Analysis (Swing, FVG, OB, BOS, CHoCH)
    |  ├── HMM Regime Detection
    |  └── XGBoost Prediction
    |  |
    |  |===[PHASE 2: MONITORING]===========================
    |  |
    |  ├── Cek posisi terbuka
    |  │   └── Untuk setiap posisi:
    |  │       ├── Update profit & momentum
    |  │       ├── 10 kondisi exit (smart_risk.evaluate_position)
    |  │       └── Jika should_close → tutup → log → Telegram
    |  |
    |  ├── Position Manager (trailing SL, breakeven)
    |  │   └── Smart Market Close Handler
    |  |
    |  |===[PHASE 3: ENTRY]================================
    |  |
    |  ├── [1] Session Filter → boleh trading?
    |  ├── [2] Risk Mode → bukan STOPPED?
    |  ├── [3] SMC Signal → ada setup?
    |  ├── [4] ML Confidence → >= threshold?
    |  ├── [5] ML Agreement → tidak strongly disagree?
    |  ├── [6] Dynamic Quality → bukan AVOID?
    |  ├── [7] Confirmation → 2x candle berturut?
    |  ├── [8] Pullback Filter → momentum selaras? (v5: ATR-based)
    |  ├── [9] Cooldown → 5 menit sejak trade terakhir?
    |  ├── [10] Position Limit → < 2 posisi?
    |  ├── [11] Lot Size → > 0?
    |  ├── SEMUA PASS → Execute trade
    |  ├── Slippage validation (v5: cek harga aktual vs expected)
    |  ├── Partial fill check (v5: cek volume aktual vs requested)
    |  └── Register position (harga & volume AKTUAL) → Log → Telegram
    |  |
    |  |===[PHASE 4: PERIODIK]=============================
    |  |
    |  ├── Setiap 20 candle (~5 jam M15): Cek auto-retrain
    |  ├── Setiap 30 menit: Market update (Telegram)
    |  ├── Setiap 1 jam: Hourly analysis (Telegram)
    |  ├── Pergantian hari: Daily summary + reset
    |  └── News Agent: Monitor (non-blocking)
    |
    |===[CANDLE BARU? TIDAK → POSITION CHECK ONLY]========
    |
    ├── Setiap 10 detik: cek posisi terbuka saja
    │   ├── Fetch 50 bar (minimal data)
    │   ├── Hitung fitur untuk ML check
    │   └── Evaluasi exit conditions per posisi
    |
    v
    Tunggu ~5 detik → Loop lagi

Startup Sequence

1. Load konfigurasi dari .env
2. Connect ke MT5 (max 3 retry)
3. Load model HMM dari models/hmm_regime.pkl
4. Load model XGBoost dari models/xgboost_model.pkl
5. Initialize SmartRiskManager (set balance, limits)
6. Initialize SessionFilter (WIB timezone)
7. Initialize TelegramNotifier
8. Initialize TradeLogger
9. Initialize AutoTrainer
10. Send Telegram: "BOT STARTED" (config, balance, risk settings)
11. Mulai main loop

Shutdown Sequence

1. Signal SIGINT/SIGTERM diterima
2. Hentikan loop utama
3. Kirim Telegram: "BOT STOPPED" (balance, trades, uptime)
4. Disconnect MT5
5. Close database connections
6. Exit

Error Handling

Setiap iterasi loop dibungkus try-except:

try:
    # Fetch data, analyze, trade
except ConnectionError:
    # MT5 disconnected → reconnect()
except Exception as e:
    # Log error → lanjut loop berikutnya
    # Bot TIDAK crash dari error tunggal

Prinsip: NEVER STOP TRADING karena error non-kritis

Timer Periodik

Event Interval Aksi
Full analysis + entry Setiap candle baru M15 Saat candle terbentuk
Position monitoring ~10 detik Di antara candle
Performance logging 4 candle (~1 jam) loop_count % 4
Auto-retrain check 20 candle (~5 jam) loop_count % 20
Market update Telegram 30 menit Timer
Hourly analysis Telegram 1 jam Timer
Daily summary Pergantian hari Date check

Performa Target

Target: < 0.05 detik per iterasi analisis (50ms)

Full Analysis (saat candle baru):
├── MT5 data fetch:      ~10ms  (200 bar)
├── Feature engineering:  ~5ms  (Polars, vectorized)
├── SMC analysis:         ~5ms  (Polars native)
├── HMM predict:          ~2ms
├── XGBoost predict:      ~3ms
├── Position monitoring:  ~5ms
├── Entry logic:          ~5ms
└── Overhead:             ~15ms
                          ------
                          ~50ms total

Position Check Only (di antara candle):
├── MT5 data fetch:      ~5ms   (50 bar saja)
├── Feature engineering:  ~3ms
├── ML prediction:        ~3ms
├── Position evaluation:  ~5ms
└── Overhead:             ~5ms
                          ------
                          ~21ms total

Hubungan Semua Komponen

┌─────────────────────────────────────────────────────────┐
│                     main_live.py                         │
│                    (TradingBot)                           │
│                                                          │
│  ┌─────────┐  ┌─────────┐  ┌──────────┐  ┌──────────┐  │
│  │   MT5   │  │ Feature │  │   SMC    │  │   HMM    │  │
│  │Connector│→ │  Eng    │→ │ Analyzer │→ │ Detector │  │
│  └─────────┘  └─────────┘  └──────────┘  └──────────┘  │
│       ↑                          ↓              ↓        │
│       │              ┌──────────────────────┐           │
│       │              │  Dynamic Confidence  │           │
│       │              └──────────────────────┘           │
│       │                        ↓                        │
│       │              ┌──────────────────┐               │
│       │              │ XGBoost Model    │               │
│       │              └──────────────────┘               │
│       │                        ↓                        │
│       │    ┌─────────────────────────────────┐          │
│       │    │  Entry Logic (11 Filters)       │          │
│       │    │  Session, Risk, SMC, ML, ...    │          │
│       │    └─────────────────────────────────┘          │
│       │                        ↓                        │
│       │    ┌────────────┐  ┌───────────────┐            │
│       ├────│ Risk Engine│  │Smart Risk Mgr │            │
│       │    └────────────┘  └───────────────┘            │
│       │                        ↓                        │
│       │←── Execute Order (BUY/SELL)                     │
│       │                        ↓                        │
│       │    ┌────────────┐  ┌───────────────┐            │
│       │    │  Position  │  │ Trade Logger  │            │
│       │    │  Manager   │  │ (DB + CSV)    │            │
│       │    └────────────┘  └───────────────┘            │
│       │                        ↓                        │
│       │    ┌────────────┐  ┌───────────────┐            │
│       │    │  Telegram  │  │ Auto Trainer  │            │
│       │    │ Notifier   │  │ (retraining)  │            │
│       │    └────────────┘  └───────────────┘            │
│       │                                                  │
│       │    ┌────────────┐  ┌───────────────┐            │
│       │    │News Agent  │  │Session Filter │            │
│       │    │(monitor)   │  │(waktu trading)│            │
│       │    └────────────┘  └───────────────┘            │
└─────────────────────────────────────────────────────────┘