diff --git a/docs/arsitektur-ai/00-ARSITEKTUR-LENGKAP.md b/docs/arsitektur-ai/00-ARSITEKTUR-LENGKAP.md index c87b6f3..acaedc8 100644 --- a/docs/arsitektur-ai/00-ARSITEKTUR-LENGKAP.md +++ b/docs/arsitektur-ai/00-ARSITEKTUR-LENGKAP.md @@ -439,7 +439,7 @@ Signal Generation: ├── Entry: harga saat ini ├── SL: ATR-based, minimum 1.5 × ATR dari entry ├── TP: 2:1 Risk-Reward minimum, cap 4 × ATR - ├── Confidence: 55-85% (berdasarkan confluence) + ├── Confidence: 40-85% (v5: calibrated weighted scoring) (berdasarkan confluence) └── Reason: "BOS + Bullish FVG at 2645.50" ``` @@ -619,13 +619,15 @@ SINYAL SMC + ML MASUK └──────────────────────────────────────────────────────────┘ │ PASS ▼ -┌─ FILTER 8: Pullback Filter ─────────────────────────────┐ +┌─ FILTER 8: Pullback Filter (v5: ATR-based) ────────────┐ │ Apakah momentum selaras dengan arah sinyal? │ │ ✗ BUY tapi RSI > 80 (overbought) → BLOCK │ │ ✗ SELL tapi RSI < 20 (oversold) → BLOCK │ │ ✗ MACD histogram berlawanan → BLOCK │ -│ ✗ Harga bounce > $2 dalam 3 candle → BLOCK │ +│ ✗ Harga bounce > 15% ATR dalam 3 candle → BLOCK │ +│ ✓ Movement < 10% ATR (consolidation) → PASS │ │ ✓ Momentum selaras → PASS │ +│ (v5: threshold dinamis berdasarkan ATR, bukan fixed $2) │ └──────────────────────────────────────────────────────────┘ │ PASS ▼ @@ -727,9 +729,12 @@ POSISI TERBUKA (dicek setiap ~10 detik) └──────────────────────────────────────────────────────────┘ │ tidak trigger ▼ -┌─ KONDISI 9: Time-Based ─────────────────────────────────┐ -│ (a) > 4 jam + profit < $5 → TUTUP (terlalu lama) │ -│ (b) > 6 jam → FORCE TUTUP (apapun kondisi) │ +┌─ KONDISI 9: Smart Time-Based (v5: Don't Cut Winners) ──┐ +│ (a) > 4 jam + no growth → TUTUP (stuck) │ +│ (b) > 4 jam + growing + ML agrees → HOLD (extend) │ +│ (c) > 6 jam + profit < $10 → TUTUP │ +│ (d) > 6 jam + profit > $10 + growing → extend ke 8 jam │ +│ (e) > 8 jam → TUTUP (final max time) │ └──────────────────────────────────────────────────────────┘ │ tidak trigger ▼ @@ -1092,7 +1097,7 @@ BUY Signal: ├── Entry: harga saat ini ├── SL: di bawah zone, minimum 1.5 × ATR ├── TP: 2:1 R:R, maximum 4 × ATR - └── Confidence: 55-85% (lebih banyak confluence = lebih tinggi) + └── Confidence: 40-85% (v5: calibrated weighted scoring) (lebih banyak confluence = lebih tinggi) SELL Signal: ├── BOS bearish ATAU CHoCH bullish→bearish @@ -1100,7 +1105,7 @@ SELL Signal: ├── Entry: harga saat ini ├── SL: di atas zone, minimum 1.5 × ATR ├── TP: 2:1 R:R, maximum 4 × ATR - └── Confidence: 55-85% + └── Confidence: 40-85% (v5: calibrated weighted scoring) ``` --- @@ -1165,10 +1170,27 @@ SELL Signal: │ ▼ ╔═══════════════════════════════════════════════════════════════╗ +║ TAHAP 4b: POST-EXECUTION VALIDATION (v5 BARU) ║ +║ ║ +║ Slippage Validation: ║ +║ → Bandingkan harga aktual vs expected ║ +║ → Max acceptable: 0.15% dari harga (~$4 untuk XAUUSD) ║ +║ → Log WARNING jika melebihi batas ║ +║ → Gunakan harga AKTUAL untuk position tracking ║ +║ ║ +║ Partial Fill Handling: ║ +║ → Cek apakah volume terisi = volume diminta ║ +║ → Jika partial: log fill ratio, update lot_size aktual ║ +║ → Risk calculation tetap akurat dengan volume sebenarnya ║ +╚═══════════════════════════════════════════════════════════════╝ + │ + ▼ +╔═══════════════════════════════════════════════════════════════╗ ║ TAHAP 5: POSITION REGISTERED ║ ║ ║ ║ Smart Risk Manager: ║ -║ → Catat entry price, direction, lot, timestamp ║ +║ → Catat entry price AKTUAL, direction, lot AKTUAL, timestamp║ +║ → v5: Menggunakan harga & volume dari broker (bukan planned)║ ║ → Inisialisasi peak_profit = 0 ║ ║ → Mulai tracking momentum ║ ║ ║ diff --git a/docs/arsitektur-ai/03-SMC-Analyzer.md b/docs/arsitektur-ai/03-SMC-Analyzer.md index a64e50b..9448252 100644 --- a/docs/arsitektur-ai/03-SMC-Analyzer.md +++ b/docs/arsitektur-ai/03-SMC-Analyzer.md @@ -367,14 +367,35 @@ AND (ada FVG bearish ATAU Order Block bearish): └────────────┴─────────────────────┴──────────────────────┴──────────────────────────┘ ``` -### Sistem Confidence +### Sistem Confidence (v5: Calibrated Weighted Scoring) ``` -Base confidence: 55% -+ BOS/CHoCH: +10% -+ FVG: +10% -+ Order Block: +10% -Maximum: 85% +Sebelum (v4): Sesudah (v5): + Base: 55% Base: 40% + + BOS/CHoCH: +10% + Structure aligned: +15% + + FVG: +10% + BOS/CHoCH: +12% + + OB: +10% + FVG: +8% + Max: 85% + Order Block: +10% + + Trend strength: +10% + + Fresh level: +5% + Max: 85% + +Kalkulasi confidence sekarang menggunakan metode calculate_confidence(): + 1. Base = 40% (minimum, selalu ada) + 2. Structure aligned = +15% (market_structure searah sinyal) + 3. BOS/CHoCH = +12% (ada break of structure/character) + 4. FVG = +8% (ada Fair Value Gap) + 5. Order Block = +10% (ada Order Block) + 6. Trend strength = +10% (ada ≥2 BOS searah dalam 20 bar terakhir) + 7. Fresh level = +5% (first touch of key level) + 8. Cap di 85% (tidak pernah 100% yakin) + +Contoh: + BUY signal, structure bullish, ada BOS + FVG + OB, trend kuat: + = 40% + 15% + 12% + 8% + 10% + 10% = 95% → cap 85% + + BUY signal, structure bearish, ada CHoCH + FVG saja: + = 40% + 0% + 12% + 8% + 0% + 0% = 60% ``` ### Output Signal @@ -385,7 +406,7 @@ SMCSignal: entry_price: float stop_loss: float # ATR-based (min 1.5 ATR dari entry) take_profit: float # 2:1 RR, capped di 4 ATR - confidence: 0.55 - 0.85 + confidence: 0.40 - 0.85 # v5: base diturunkan ke 40% (calibrated) reason: "Bullish BOS + FVG + OB" risk_reward: float # Minimum 2.0 ``` diff --git a/docs/arsitektur-ai/05-Risk-Management.md b/docs/arsitektur-ai/05-Risk-Management.md index 9ec2c99..7b8a91c 100644 --- a/docs/arsitektur-ai/05-Risk-Management.md +++ b/docs/arsitektur-ai/05-Risk-Management.md @@ -199,33 +199,35 @@ Setiap posisi terbuka dievaluasi setiap loop: Jika peak_profit > $30 DAN current < 60% dari peak: -> TUTUP (lindungi profit) -6. TIME-BASED EXIT (v3: BARU) - Jika posisi terbuka >= 4 jam DAN profit < $5: - - Jika profit >= $0 -> TUTUP (breakeven/profit kecil) - - Jika profit > -$15 -> TUTUP (loss kecil, daripada makin besar) +6. SMART TIME-BASED EXIT (v5: Don't Cut Winners) + Jika posisi terbuka >= 4 jam: + - profit < $5 DAN tidak growing -> TUTUP + - profit >= $5 DAN growing + ML agrees -> HOLD (extend) Jika posisi terbuka >= 6 jam: - -> FORCE EXIT (tutup apapun kondisinya) + - profit < $10 ATAU tidak growing -> TUTUP + - profit >= $10 DAN growing -> extend ke 8 jam + Jika posisi terbuka >= 8 jam: + -> TUTUP (take profit atau max time) ``` -### Time-Based Exit Detail (v3 Update) +### Smart Time-Based Exit Detail (v5 Update) ``` -Jam 0 Jam 4 Jam 6 -|------------|------------------|-----> waktu - | | - | profit < $5? | FORCE EXIT - | Ya -> evaluasi: | (apapun kondisinya) - | profit >= 0 | - | -> tutup OK | - | loss > -$15 | - | -> tutup | - | loss <= -$15 | - | -> tahan | +Jam 0 Jam 4 Jam 6 Jam 8 +|------------|------------------|------------------|-----> waktu + | | | + | stuck? | profitable? | FINAL EXIT + | (no growth) | (growing?) | + | -> TUTUP | -> extend! | + | | not growing? | + | growing? | -> TUTUP | + | -> HOLD | | -Kenapa perlu time-based exit? - - Trade yang stuck tanpa progress = buang waktu & margin - - Lebih baik exit kecil daripada menunggu loss besar - - Mencegah posisi "zombie" yang tidak kemana-mana +v5 Perubahan dari v3: + - 4h: Cek profit GROWTH (momentum), bukan hanya profit < $5 + - 6h: Bukan force close lagi — extend ke 8h jika profit > $10 + growing + - ML agreement diperhitungkan sebelum timeout + - Prinsip: jangan potong pemenang yang masih berjalan ``` ### Broker Stop Loss (v3: ATR-Based Protection) @@ -428,14 +430,18 @@ Backtest menggunakan **logika exit yang identik** dengan live trading: ``` Exit reversal: 0.65 (65% ML confidence) <- synced dengan live -Time-based exit: - 16 bars (4 jam M15) + profit < $5 -> exit - 24 bars (6 jam M15) -> force exit +Smart time-based exit (v5): + 16 bars (4 jam M15) + no growth -> exit (stuck) + 16 bars + growing + ML agrees -> hold (extend) + 24 bars (6 jam M15) + profit<$10 -> exit + 24 bars + profit>$10 + growing -> extend ke 32 bars (8 jam) + 32 bars (8 jam M15) -> final exit Perhitungan bar: bars_since_entry = current_bar_index - entry_bar_index 16 bars * 15 menit = 4 jam 24 bars * 15 menit = 6 jam + 32 bars * 15 menit = 8 jam (v5: max extended time) ``` **Kenapa penting disinkronkan?** Agar hasil backtest akurat mewakili performa live trading. @@ -449,5 +455,5 @@ Perhitungan bar: 3. **Multi-Layer Protection** — Per-trade, per-day, total limit, circuit breaker 4. **Recovery First** — Setelah loss, otomatis masuk mode defensif 5. **Profit Protection** — Jika profit sudah besar, lindungi dari drawback -6. **Time-Bounded** — Tidak ada posisi "zombie", max 6 jam (v3 update) +6. **Smart Time-Bounded** — Tidak ada posisi "zombie", max 6-8 jam, tapi jangan potong pemenang (v5 update) 7. **Faster Reversal** — Exit lebih cepat di 65% ML confidence (v3 update) diff --git a/docs/arsitektur-ai/09-Entry-Trade.md b/docs/arsitektur-ai/09-Entry-Trade.md index f345233..605ab73 100644 --- a/docs/arsitektur-ai/09-Entry-Trade.md +++ b/docs/arsitektur-ai/09-Entry-Trade.md @@ -167,13 +167,27 @@ if not can_enter: return # Sedang pullback, tunggu momentum selaras ``` +**v5: Threshold sekarang ATR-based (bukan hardcoded)** + +``` +ATR diambil dari data (default $12 untuk XAUUSD) +bounce_threshold = ATR × 0.15 # ~$1.80 (sebelumnya: $2.00 fixed) +consolidation_threshold = ATR × 0.10 # ~$1.20 (sebelumnya: $1.50 fixed) + +Kenapa ATR-based? + - Threshold menyesuaikan volatilitas pasar saat ini + - Saat volatilitas tinggi (ATR=$20): bounce=$3, consolidation=$2 + - Saat volatilitas rendah (ATR=$8): bounce=$1.2, consolidation=$0.8 + - Lebih akurat daripada threshold tetap +``` + **Untuk signal BUY, block jika:** -- Harga turun > $2 dalam 3 candle terakhir +- Harga turun > bounce_threshold (15% ATR) dalam 3 candle terakhir - MACD bearish + harga turun - Harga jauh di bawah EMA9 + terus turun **Untuk signal SELL, block jika:** -- Harga naik > $2 dalam 3 candle terakhir +- Harga naik > bounce_threshold (15% ATR) dalam 3 candle terakhir - MACD bullish + harga naik - Harga jauh di atas EMA9 + terus naik @@ -182,6 +196,7 @@ if not can_enter: ``` 1. Short-term Momentum (3 candle terakhir) -> Arah pergerakan harga terkini + -> Block jika bounce > 15% ATR (v5: dinamis) 2. MACD Histogram -> Rising = bullish momentum @@ -194,6 +209,10 @@ if not can_enter: 4. RSI Extreme -> RSI > 80 = overbought (block BUY) -> RSI < 20 = oversold (block SELL) + +5. Consolidation Check + -> Jika movement < 10% ATR = consolidation → ALLOW + -> v5: dinamis, bukan fixed $1.5 ``` --- @@ -276,22 +295,61 @@ result = mt5.send_order( if gagal dan error 10016: result = mt5.send_order(sl=0, ...) # Tanpa broker SL -# Step E: Register posisi untuk monitoring +# Step E: Slippage Validation (v5 BARU) if result.success: + actual_price = result.price + slippage = abs(actual_price - signal.entry_price) + max_slippage = signal.entry_price * 0.0015 # 0.15% dari harga + + if slippage > max_slippage: + log WARNING "HIGH SLIPPAGE" # Catat slippage tinggi + # Gunakan harga AKTUAL untuk tracking, bukan harga expected + +# Step F: Partial Fill Check (v5 BARU) + filled_volume = result.volume + if filled_volume < requested_volume: + log WARNING "PARTIAL FILL" + # Update lot_size ke volume yang sebenarnya terisi + position.lot_size = filled_volume + +# Step G: Register posisi (gunakan nilai AKTUAL) smart_risk.register_position( ticket=result.order_id, - entry_price=signal.entry_price, - lot_size=position.lot_size, + entry_price=actual_price, # v5: harga aktual (bukan expected) + lot_size=filled_volume, # v5: volume aktual (bukan requested) direction=signal.signal_type, ) ``` +### Slippage & Partial Fill (v5 Detail) + +``` +SLIPPAGE VALIDATION: + expected_price = signal.entry_price + actual_price = result.price (dari broker) + slippage = |actual - expected| + max_acceptable = 0.15% dari harga (~$4 untuk XAUUSD @$2650) + + Jika slippage > max_acceptable: + -> LOG WARNING (untuk monitoring & analisis) + -> Tetap pakai harga aktual untuk position tracking + +PARTIAL FILL HANDLING: + requested_volume = lot dari risk calculation + filled_volume = result.volume (dari broker) + + Jika filled < requested: + -> LOG WARNING dengan fill ratio (%) + -> Update position.lot_size ke filled_volume + -> Risk calculation tetap akurat (berdasarkan volume sebenarnya) +``` + --- ## Post-Entry ```python -# Step F: Log trade detail +# Step H: Log trade detail trade_logger.log_trade_open( signal, ml_prediction, regime, market_quality, ... ) diff --git a/docs/arsitektur-ai/10-Exit-Trade.md b/docs/arsitektur-ai/10-Exit-Trade.md index 7a350e7..dbd0152 100644 --- a/docs/arsitektur-ai/10-Exit-Trade.md +++ b/docs/arsitektur-ai/10-Exit-Trade.md @@ -197,34 +197,50 @@ IF hari Jumat setelah 04:00 WIB: --- -### CHECK 9: Time-Based Exit (v3 BARU) +### CHECK 9: Smart Time-Based Exit (v5: Smarter — Don't Cut Winners) ``` -Mencegah posisi "zombie" yang stuck: +Mencegah posisi "zombie" TAPI jangan potong posisi profit yang masih tumbuh. trade_duration = (sekarang - entry_time) dalam jam +profit_growing = momentum > 0 +ml_agrees = ML signal searah dengan posisi -IF 4+ jam DAN profit < $5: - a) profit >= $0 - -> TUTUP [TIMEOUT] Breakeven setelah 4 jam +IF 4+ jam: + a) profit < $5 DAN NOT profit_growing: + - profit >= $0 -> TUTUP [TIMEOUT] Breakeven + no growth + - profit > -$15 -> TUTUP [TIMEOUT] Small loss + no growth + b) profit >= $5 DAN profit_growing DAN ml_agrees: + -> HOLD (extend time — profit masih tumbuh!) + -> Log: "extending time" - b) profit > -$15 - -> TUTUP [TIMEOUT] Loss kecil, daripada stuck +IF 6+ jam: + a) profit < $10 ATAU NOT profit_growing: + -> TUTUP [MAX TIME] (sebelumnya: force close apapun kondisi) + b) profit >= $10 DAN profit_growing: + -> EXTEND ke max 8 jam (v5 BARU — biarkan profit berjalan) + -> Di jam 8+ -> TUTUP [MAX TIME] Take profit -IF 6+ jam (apapun profit): - -> TUTUP [MAX TIME] Force exit — max hold 6 jam +v5 PERUBAHAN: + - 4h: Sekarang cek profit growth, bukan hanya profit < $5 + - 6h: BUKAN force close lagi — extend ke 8h jika profitable + growing + - ML agreement dipertimbangkan sebelum timeout + - Prinsip: jangan potong pemenang yang masih berjalan ``` **Visualisasi:** ``` -Jam: 0 1 2 3 4 5 6 - |-----|-----|-----|-----|-----|-----| - entry | | - | | - 4h check: 6h FORCE EXIT - profit<$5? - Ya -> exit +Jam: 0 1 2 3 4 5 6 7 8 + |-----|-----|-----|-----|-----|-----|-----|-----| + entry | | | + | | | + 4h check: 6h check: 8h FINAL EXIT + stuck? profitable? + no growth? growing? + -> exit -> extend! + not growing? + -> exit ``` --- diff --git a/docs/arsitektur-ai/23-Main-Live-Orchestrator.md b/docs/arsitektur-ai/23-Main-Live-Orchestrator.md index ad7ac62..c845404 100644 --- a/docs/arsitektur-ai/23-Main-Live-Orchestrator.md +++ b/docs/arsitektur-ai/23-Main-Live-Orchestrator.md @@ -92,11 +92,14 @@ LOOP UTAMA (cek setiap ~5 detik, analisis pada candle baru): | ├── [5] ML Agreement → tidak strongly disagree? | ├── [6] Dynamic Quality → bukan AVOID? | ├── [7] Confirmation → 2x candle berturut? - | ├── [8] Pullback Filter → momentum selaras? + | ├── [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 → Log → Telegram + | ├── 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]============================= | |