# Changelog All notable changes to XAUBot AI will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] --- ## [0.2.7] - 2026-02-11 ### Added (Trajectory Recovery System for Golden Session) **Problem:** Trade #162626070 lost -$6.07 at 22:45 in Golden Session despite trajectory predicting +$3.81 recovery (78% confidence). Actual market 31 min later showed would-be profit of +$5.05. Bot cut too early due to Golden Emergency exit, ignoring strong recovery signals. #### Root Cause 1. **Golden Emergency hard rule** (loss >$5 + 45s + never-profitable) → immediate cut, no exceptions 2. **Trajectory Hold disabled** for never-profitable trades (v0.2.5e fix to prevent bad holds) 3. **Conflict:** Emergency exit vs Recovery prediction — emergency always wins 4. **Result:** Trade with 78% confidence recovery prediction gets cut, misses +$5 profit #### Solution: Trajectory Override System **1. Golden Emergency Threshold Extended** - Changed trigger time: **45s → 60s** (align with grace period floor) - Gives more time for trajectory and recovery systems to activate **2. Trajectory Override for Strong Recovery** ```python # Before cutting in Golden Emergency, check trajectory: if pred_1m > 0 AND confidence > 75% AND acceleration > 0.01: → OVERRIDE emergency exit, continue holding else: → Proceed with emergency cut ``` **3. Hybrid Trajectory Hold Logic** - **Ever-profitable trades:** Trajectory hold ACTIVE (no change from v0.2.5e) - **Never-profitable + Golden + strong signal (>75% conf):** Trajectory hold NOW ACTIVE (NEW) - **Never-profitable + normal session:** Trajectory hold DISABLED (no change from v0.2.5e) #### Impact Analysis **Trade #162626070 with v0.2.7:** ``` 22:45:02 ENTRY -$0 22:45:43 pred=$0.55 conf=77% ✅ → Trajectory hold activated 22:45:48 pred=$3.81 conf=78% ✅ → Golden Emergency OVERRIDDEN 22:46:00+ Continue holding... 22:50-23:00 Price recovery → Exit with profit $2-5 ``` **Recovery Time Extension:** - Current (v0.2.6): Golden never-profitable = **47s max hold** (hard cut) - After fix (v0.2.7): Golden never-profitable = **up to 15 min** if strong recovery signal - Normal session: **No change** (fast cut for never-profitable without recovery signal) **Safety Nets Still Active:** - NO_RECOVERY threshold $15 (last resort) - EMERGENCY_MAX_LOSS $20 (absolute cap) - Fuzzy/Kelly exits active after grace period - Only override if trajectory confidence >75% AND positive acceleration #### Expected Outcome - Reduce "early cut" losses on trades with strong recovery potential - Golden Session: Smart waiting (only if model predicts profit) - Maintain fast cut for trades without recovery signals - Balance: more recovery time vs controlled risk --- ## [0.2.6] - 2026-02-11 ### Fixed (Critical: Grace Period & Threshold Unit Bugs) **Problem:** Trade #162554401 lost -$8.01 in Golden Session. Fuzzy exit confidence was 94.58% at t=86s but was SUPPRESSED by grace period. Three critical bugs discovered: #### BUG FIX 1: Fuzzy/Kelly Grace Threshold Wrong Unit - `abs(current_profit) < 200` was meant to be $2.00 but current_profit is in DOLLARS - So `200` = $200 threshold — effectively suppressed ALL loss exits during grace - **Fix:** Changed to `abs(current_profit) < 2.0` — only suppress micro-losses (<$2) #### BUG FIX 2: Fuzzy/Kelly Grace Period Not Unified - Fuzzy/Kelly section had its OWN hardcoded grace (90s for high_volatility) - This IGNORED all v0.2.5 fixes (ever_profitable cap, Golden Session reduction) - **Fix:** Replaced hardcoded dict with `grace_minutes * 60` (unified dynamic grace) #### BUG FIX 3: NO_RECOVERY & EMERGENCY Thresholds Wrong Unit - `NO_RECOVERY_THRESHOLD = 1500` ($1500) and `EMERGENCY_MAX_LOSS = 2000` ($2000) - These safety nets NEVER trigger for 0.01 lot trades (max ~$25 loss) - **Fix:** Changed to 15.0 ($15) and 20.0 ($20) respectively #### NEW: Golden Session Emergency Exit - Never-profitable trades in Golden Session with loss > $5 after 45s → immediate exit - No grace period, no fuzzy threshold — just cut the loss fast - Golden Session floor reduced: 1.0 min (never-profitable) / 1.5 min (ever-profitable) #### Impact Analysis - Trade #162554401 scenario: fuzzy 94.58% at -$7.93 would now EXIT (not suppressed) - Grace period in Golden + never-profitable: 72s (was 90s hardcoded) - Losses > $2 no longer suppressed during grace period at all - Safety nets (NO_RECOVERY $15, EMERGENCY $20) now actually functional --- ## [0.2.5] - 2026-02-11 ### Fixed (Professor AI Analysis: Golden Session + Loss Protection) **Problem:** v0.2.4 caused -$17.52 loss in 8 minutes during Golden Session (London-NY Overlap). Two trades (#162324181: -$8.20, #162333556: -$9.32) both with SMC 63% (FVG only), ML HOLD 50%. #### Root Cause Analysis 1. **Grace period too long for never-profitable trades** — 5 min grace given to trade that NEVER saw profit 2. **Max loss WIDENED during trade** — Dynamic multiplier changed from "declining"→"stalling", widening stop from $7.9→$8.8 3. **Golden Session (20:00-00:00 WIB) has extreme volatility** — No special handling despite ATR 1.20x+ #### Fix #3: Grace Period for Never-Profitable Trades - Added `ever_profitable` field to PositionGuard (true once profit > $0.50) - Trades that were NEVER profitable: grace capped at **2 minutes max** (was 5-8 min) - Trades that were once profitable: normal grace (regime-based) #### Fix #4: Monotonic Max Loss Ratchet - Added `tightest_max_loss` and `tightest_atr_loss` fields to PositionGuard - `effective_max_loss` can only TIGHTEN (shrink), never widen back - `max_atr_loss` can only TIGHTEN, never widen back - Prevents: trade state changing from "declining"→"stalling" widening the stop #### Golden Session Special Handling - `market_context` now includes `is_golden`, `session_name`, `session_volatility` - During Golden Session (London-NY Overlap): - `loss_mult *= 0.70` — 30% tighter max loss tolerance - `profit_mult *= 0.85` — Take profit slightly sooner (fast reversals) - Grace period reduced by 40% (`grace *= 0.60`) - Combined with Fix #3: never-profitable trade in Golden = 2 min max grace - Enhanced dynamic log shows: `[GOLDEN]` tag, ratchet values, ever_profitable status #### Expected Impact - **Trade #162324181 scenario:** Grace 5m → 1.2m (golden×never-profitable), max_loss $8.8 → stays at $7.9 - **Trade #162333556 scenario:** Grace 5m → 1.2m, tighter stop = earlier exit = smaller loss - **Net reduction:** -$17.52 → estimated -$8 to -$12 (30-55% improvement) --- ## [0.2.4] - 2026-02-11 ### Fixed (CRITICAL: Restore TRUE SMC-Only Logic) **User Discovery:** v0.2.3 logic was WRONG - still blocking SMC signals based on ML! #### Problem Identified - **User:** "Perasaan tadi sebelum perbaikan, kita mengabaikan ML dan fokus SMC saja" - **Investigation:** v0.2.3 still had 3-tier logic that BLOCKS SMC 60-75% if ML disagrees - **Original v4:** ML filters DISABLED - SMC signal = immediate trade (except SELL filter) - **v0.2.3 mistake:** Added medium tier that requires ML agreement (WRONG!) #### Root Cause Analysis ```python # ORIGINAL v4 (CORRECT - SMC-Only): if smc_signal: if ml_agrees: confidence = avg(smc, ml) # Boost else: confidence = smc # Use SMC as-is execute() # ALWAYS execute # v0.2.3 (WRONG - Still blocking): if smc >= 75%: execute() elif smc 60-75%: if ml_agrees: # ← WRONG! This blocks trades! execute() else: skip() # ← Blocked signal 63% wrongly! ``` #### Example Impact - **Signal:** SMC BUY 63%, ML HOLD 50% - **v0.2.3 behavior:** ❌ BLOCKED (medium tier needs ML confirm) - **Should be:** ✅ EXECUTE (SMC-only mode) #### Solution Implemented **Logic v6 - TRUE SMC-Only:** ```python if smc_signal and smc_conf >= 0.55: # SELL filter (only exception) if signal == "SELL": if ml_signal != "SELL" or ml_conf < 0.75: skip() # SELL safety filter # For all other signals: ML is OPTIONAL boost if ml_agrees: confidence = avg(smc, ml) # Boost else: confidence = smc # Use SMC as-is (ML IGNORED) execute() # ALWAYS execute if SMC >= 55% ``` **Key Changes:** - ❌ Removed: 3-tier logic (HIGH/MEDIUM/LOW) - ✅ Added: Single threshold (>= 55%) - ✅ ML role: OPTIONAL boost only (not blocker) - ✅ SELL filter: Only exception (requires ML >= 75%) **Expected Behavior:** | SMC | ML | v0.2.3 (Wrong) | v0.2.4 (Correct) | |-----|-----|----------------|------------------| | BUY 63% | HOLD 50% | ❌ BLOCKED | ✅ EXECUTE (conf 63%) | | BUY 75% | HOLD 50% | ✅ EXECUTE (conf 71%) | ✅ EXECUTE (conf 75%) | | BUY 80% | BUY 70% | ✅ EXECUTE (conf 75%) | ✅ EXECUTE (conf 75%) | | SELL 75% | HOLD 50% | ✅ EXECUTE | ❌ BLOCKED (safety) | **Files Modified:** - `main_live.py` - Signal logic v6 (line 1940-2010) - `VERSION` - Updated to 0.2.4 - `CHANGELOG.md` - This entry **User Feedback Integration:** - ✅ "Mengabaikan ML" - ML truly ignored (except SELL safety) - ✅ "Fokus SMC saja" - SMC >= 55% executes always - ✅ Original v4 intention restored --- ## [0.2.3] - 2026-02-11 ### Fixed (SMC Primary Strategy Restoration) **Philosophy Change:** SMC is PRIMARY, ML is SECONDARY support (not blocker) #### Problem Identified - **User Feedback:** "SMC adalah patokan utama, ML hanya pendukung" - **Issue:** v0.2.2 London Filter + SELL Filter blocking high-confidence SMC signals - **Example:** SMC BUY 75% confidence blocked because ML predicted HOLD 50% - **Impact:** Missing profitable trades when SMC is confident #### Solutions Implemented **FIX #1: London Filter - Penalty Instead of Block** 🔧 ```python # BEFORE (v0.2.2): if is_london and atr_ratio < 1.2: if ml_confidence < 0.70: return None # BLOCKS trade completely! # AFTER (v0.2.3): if is_london and atr_ratio < 1.2: london_penalty = 0.90 # Reduce confidence by 10%, don't block ``` - **Impact:** SMC signals no longer blocked, only confidence adjusted - **Files:** `main_live.py` line 1910-1935 **FIX #2: Signal Logic v5 - SMC Primary Hierarchy** 🎯 ```python # NEW 3-TIER LOGIC: if smc_confidence >= 0.75: # TIER 1: HIGH CONFIDENCE - Execute regardless of ML execute_trade(confidence = smc * 0.95 if ML disagree else avg(smc, ml)) elif smc_confidence >= 0.60: # TIER 2: MEDIUM CONFIDENCE - Require ML agreement if ml_agrees and ml_confidence >= 0.60: execute_trade(confidence = avg(smc, ml)) else: skip() else: # TIER 3: LOW CONFIDENCE - Skip (SMC not confident) skip() ``` **Logic Changes:** - **SMC >= 75%:** Execute ALWAYS (ML only boosts/minor penalty) - **SMC 60-75%:** Needs ML confirmation (both agree) - **SMC < 60%:** Skip (SMC itself not confident) - **SELL Filter:** Removed (SMC confidence determines execution) **Expected Results:** - ✅ High SMC confidence (75-85%) trades execute - ✅ No more blocking from ML HOLD predictions - ✅ ML still provides boost when agrees (+5-10% confidence) - ✅ ML disagree on high SMC = minor penalty (-5% confidence) **Trade Scenarios:** | SMC | ML | Old (v0.2.2) | New (v0.2.3) | |-----|-----|--------------|--------------| | BUY 85% | HOLD 50% | ❌ BLOCKED (London filter) | ✅ EXECUTE (conf 81%) | | BUY 75% | BUY 70% | ✅ EXECUTE (conf 73%) | ✅ EXECUTE (conf 73%) | | BUY 65% | HOLD 50% | ❌ BLOCKED (ML disagree) | ❌ SKIP (needs ML) | | SELL 80% | HOLD 60% | ❌ BLOCKED (SELL filter) | ✅ EXECUTE (conf 76%) | **Files Modified:** - `main_live.py` - Signal aggregation logic rewritten (line 1936-2035) - `VERSION` - Updated to 0.2.3 - `CHANGELOG.md` - This entry --- ## [0.2.2] - 2026-02-11 ### Fixed (Professor AI Optimizations - 5 Critical Fixes) **Exit Strategy v6.6 "Professor AI Validated"** - Implementing all Professor AI recommendations #### Trade Analysis Summary - **Trade #162091505:** +$0.27 profit, but only **38% peak capture** ($0.71 peak) - **Win Rate:** 76% (excellent) but **Avg Loss 2x Avg Win** (poor risk/reward) - **Risk/Reward:** 0.49 (below 1.0, target >1.5) - **Problem:** Exit too aggressive, loses 62% of peak profit #### Professor AI Diagnosis 1. ❌ **Trajectory predictor bug:** Manual calculation over-predicts 17-61x (misleading debug output) 2. ❌ **Poor peak capture:** 38% vs target 70%+ (early exit on deceleration) 3. ❌ **False breakout risk:** London + low ATR = potential whipsaw (no filter) 4. ⚠️ **Partial exit missing:** No 50% profit taking at tp_target (all-or-nothing) 5. ❌ **Unicode errors:** Emoji/arrows break Windows console logging #### Solutions Implemented **FIX #1: Remove Misleading Debug Code** 🔧 ```python # REMOVED dead code: manual_1m = current_profit + _vel * 60 + 0.5 * _accel * 60**2 # ^ This was NOT dampened, always showed 17-61x "error" # Trajectory predictor is CORRECT, debug was wrong! ``` - **Impact:** Clean logs, no more false bug warnings - **Files:** `src/smart_risk_manager.py` line 1262-1269 removed **FIX #2: Peak Detection Logic (CHECK 0A.4)** 🎯 ```python # NEW CHECK: Hold when approaching peak if profit >= tp_min and vel > 0.02 and accel < -0.001: time_to_peak = -vel / accel # When velocity reaches 0 if 0 < time_to_peak <= 30: # Peak within 30 seconds peak_estimate = profit + vel*t + 0.5*accel*t² if peak_estimate > profit * 1.15: # 15% more profit ahead HOLD() # Suppress fuzzy exit ``` - **Impact:** Prevents early exit when profit still rising but decelerating - **Example:** Profit $0.50, vel=+0.05, accel=-0.002 → peak in 25s at $1.15 → HOLD - **Expected:** Peak capture 38% → 70%+ - **Files:** `src/smart_risk_manager.py` CHECK 0A.4 (line 1550+) **FIX #3: London False Breakout Filter** ⚠️ ```python # NEW: Filter whipsaws in London + low volatility if session == "London" and atr_ratio < 1.2: # London + quiet = whipsaw risk if ml_confidence < 0.70: # Require HIGHER confidence (60% -> 70%) SKIP_ENTRY() ``` - **Impact:** Reduces false breakouts during London low-vol periods - **Trade #162091505:** Started at 16:54 London session, atr_ratio likely <1.2 - **Expected:** Win rate 76% maintained, fewer whipsaw losses - **Files:** `main_live.py` line 1907+ (before signal logic) **FIX #4: Enhanced Kelly Partial Exit Strategy** 💰 ```python # BEFORE: Kelly only for large profits (>$8) with fuzzy >80% if profit >= 8.0 and exit_confidence > 0.80: kelly_full_exit() # AFTER: Kelly active for ALL profits >= tp_min * 0.5 if profit >= tp_min * 0.5: # Earlier activation kelly_fraction = calculate_optimal_fraction() if 0.3 <= kelly_fraction < 1.0: LOG("[KELLY PARTIAL] Recommend close {frac}%") # TODO: Implement mt5.close_position(ticket, volume=lot*frac) elif kelly_fraction >= 0.70: FULL_EXIT() ``` - **Impact:** Recommends partial exits (50% at tp_target * 0.5) for peak capture - **Note:** Actual partial close implementation requires MT5 volume parameter - **Expected:** Risk/Reward 0.49 → 1.2+ (avg profit/trade $2.00 → $4.50) - **Files:** `src/smart_risk_manager.py` line 1426-1444 **FIX #5: Unicode Encoding Errors** 🔧 ```python # BEFORE: logger.add("logs/bot.log", ...) # No encoding (Windows cp1252 breaks on emoji) # AFTER: logger.add("logs/bot.log", encoding="utf-8", ...) # UTF-8 for emoji support # ALSO: Replace all emoji/arrows with ASCII "→" -> "->" "⚠️" -> "[WARNING]" "⏳" -> "[removed]" ``` - **Impact:** No more `UnicodeEncodeError: 'charmap' codec` errors - **Files:** `main_live.py` (logger setup), `src/*.py` (emoji/arrow replacement) #### Expected Performance Improvement | Metric | Before (v0.2.1) | Target (v0.2.2) | Improvement | |--------|-----------------|-----------------|-------------| | **Peak Capture** | 38% | 70%+ | +84% | | **Avg Profit/Trade** | $2.00 | $4.50 | +125% | | **Risk/Reward** | 0.49 | 1.2+ | +145% | | **Win Rate** | 76% | 76% (maintain) | 0% | | **Avg Loss** | -$4.10 | -$3.00 | -27% | #### Trade Retrospective (v0.2.2) Will validate after 5-10 trades: - Peak capture improvement from better deceleration handling - Reduced whipsaw losses from London filter - Better profit/loss ratio from partial exits --- ## [0.2.1] - 2026-02-11 ### Fixed (Fast Exit Optimization - Peak Capture Improvement) **Exit Strategy v6.5.1 "Faster Crash Exits"** - Addressing 35% peak capture issue from Trade #162076645 #### Problem Identified (Trade #162076645) - Trade peaked at **$1.10** but closed at **$0.39** (only **35% peak capture**) - Crash detected at 16:45:25 (predicted -$25.56) but exit **delayed 23 seconds** - Velocity crashed from +0.2481 → -0.0299 $/s in 5 seconds (extreme flip!) - Lost **$0.69** (64% of peak) waiting for fuzzy threshold - **Root Cause:** Dampening made crash warnings "less urgent" + fuzzy threshold too high #### Solutions Implemented **FIX 1: Dynamic Fuzzy Threshold on Crash** 🎯 ```python # BEFORE v0.2.0: if profit < 3.0: threshold = 0.75 # Fixed, even during crashes # AFTER v0.2.1: if trajectory_pred < 0: # Crash predicted threshold = threshold - 0.10 # Lower by 10% # $1.08 crash → 75% - 10% = 65% → exit faster! ``` - **Impact:** Exits 10-20 seconds faster when crash detected - **Trade #162076645:** Would exit at $1.08 (65% threshold) instead of waiting for $0.39 (76%) - **Expected:** Peak capture 35% → 70%+ **FIX 2: Asymmetric Dampening** ⚖️ ```python # BEFORE v0.2.0: growth_damped = growth * 0.30 # Dampen ALL (positive & negative) # Problem: Crash -$87 → Damped -$26 (less urgent!) # AFTER v0.2.1: if growth > 0: growth_damped = growth * 0.30 # Dampen optimism else: growth_damped = growth * 1.00 # DON'T dampen crashes! # Solution: Crash -$87 → RAW -$87 (urgent!) ``` - **Impact:** Crash predictions stay URGENT (not dampened) - **Positive predictions:** Still dampened to prevent over-optimism - **Trade #162076645:** Crash -$87.72 RAW (not -$25.56) → immediate panic exit! **FIX 3: Velocity Crash Override** 🚨 ```python # NEW CHECK 0A.3: Emergency exit on extreme velocity flips if velocity < -0.05 and prev_velocity > 0.10: if velocity_drop > 0.15: # Extreme crash return INSTANT_EXIT # Bypass fuzzy threshold! ``` - **Impact:** Instant exit on extreme momentum crashes (no delay!) - **Trade #162076645:** vel +0.2481 → -0.0299 (drop 0.2780 > 0.15) → instant exit at $1.08! - **Bypasses:** Fuzzy logic, trajectory override, all delays ### Changed - Version bumped from 0.2.0 → 0.2.1 (PATCH - bug fix) - Exit strategy upgraded from v6.5 → v6.5.1 - trajectory_predictor.py: Asymmetric dampening (only positive growth) - smart_risk_manager.py: Crash threshold adjustment + velocity override ### Expected Impact - **Peak Capture:** 35% → 70-80% ⬆️ (2x improvement!) - **Exit Delay:** 23s → 5-10s ⬇️ (70% faster on crashes) - **Profit Retention:** +$0.50-0.70 per crash trade ⬆️ - **False Exits:** No increase (only faster on REAL crashes) ### Trade #162076645 - Retrospective **Actual Performance:** - Duration: 46 seconds (very fast!) - Peak: $1.10, Close: $0.39 - Peak Capture: 35% (POOR) - Exit Reason: Fuzzy 76.66% (CORRECT but LATE) **With v0.2.1 (Simulated):** - Exit would trigger at $1.08 (16:45:25) - FIX 1: Threshold lowered 75% → 65% ✅ - FIX 2: Crash -$87.72 RAW (not damped) ✅ - FIX 3: Velocity crash override (+0.24 → -0.03) ✅ - **Expected Close:** $1.08 (98% peak capture!) - **Improvement:** +$0.69 (+177% better!) ### Note - This is a **PATCH version** (bug fix, backward compatible) - All 3 fixes work together synergistically - No changes to core prediction formula (still mathematically correct) - Only exit TIMING optimized (faster on crashes, same on normal exits) --- ## [0.2.0] - 2026-02-11 ### Added (Regime-Based Dampening for Trajectory Predictions) **Exit Strategy v6.5 "Realistic Predictions"** - Validated dampening from 33 minutes live monitoring #### Investigation Results (v0.1.4 Debug) - ✅ **Formula VERIFIED CORRECT** - All predictions matched manual calculations (diff=$0.00) - ❌ **Model TOO OPTIMISTIC** - Parabolic assumption ignores market friction/decay - 📊 **Data from 2 trades:** - Trade #161778984: Over-prediction 2.3x-17.2x (avg 7.5x) → closed +$4.15 ✅ - Position #161850770: Predicted profit $6-38 from loss -$7 to -$10 ❌ #### Root Cause Analysis **NOT a bug, but MODEL LIMITATION:** 1. Parabolic formula assumes acceleration continues indefinitely ❌ 2. Real market has friction (resistance at levels, momentum fade) ✅ 3. Predictions accurate for INPUT values, but inputs too volatile ✅ #### Solution: Regime-Based Dampening **Implementation v0.2.0:** - Added dampening factors to trajectory_predictor.py - Only dampen GROWTH component (velocity + acceleration), NOT base profit - Regime-specific factors validated from live data: ```python dampening_factors = { "ranging": 0.20, # 80% reduction (most conservative) "volatile": 0.30, # 70% reduction (validated) "trending": 0.50 # 50% reduction (momentum continues) } ``` **Validation from Live Trades:** - Trade #161778984 with 0.30x dampening: - Raw $71.42 → Damped $21.43 (actual: $4.15) - still 5x over but acceptable ✅ - Raw $12.23 → Damped $3.67 (actual: $4.15) - VERY CLOSE! ✅✅✅ - Raw $9.74 → Damped $2.92 (conservative, safe) ✅ - Position #161850770 with 0.30x dampening: - Raw $38.15 → Damped $11.45 (more realistic from -$7.74) ✅ - Raw $32.21 → Damped $9.66 (achievable expectation) ✅ #### New Features 1. **Regime parameter** added to `predict_future_profit()` and `should_hold_position()` 2. **Smart dampening** - only reduce growth component (v×t + 0.5×a×t²), not base profit 3. **Debug logging updated** - shows raw vs damped predictions with regime 4. **Backward compatible** - defaults to 0.30x if regime not provided ### Changed - Version bumped from 0.1.4 → 0.2.0 (MINOR - new feature) - Exit strategy upgraded from v6.4.3 → v6.5 - trajectory_predictor.py: Added `regime` parameter and dampening logic - smart_risk_manager.py: Pass `regime` to trajectory predictor (2 calls updated) ### Expected Impact - Prediction accuracy: 27% → 70-85% ⬆️ - Over-prediction: 7.5x → 1.2-1.5x ⬇️ - Peak capture: 100% maintained (exit timing stays excellent) ✅ - False holds: Reduced (more realistic profit expectations) ✅ ### Performance Targets - Average over-prediction: <2x (currently 7.5x) - Prediction accuracy: >70% (currently 27%) - Peak capture: Maintain 80%+ (currently 100% on Trade #161778984) ### Note - This is a **MINOR version** (new feature, backward compatible) - Dampening factors can be fine-tuned after 5-10 more trades - Consider adjusting to 0.25-0.35 range if needed - Core prediction formula remains unchanged and verified correct --- ## [0.1.4] - 2026-02-11 ### Added (Deep Debug for Trajectory Bug Investigation) **Exit Strategy v6.4.3 "Trajectory Debug Mode"** - Investigating 13x prediction error #### Problem Identified - Trajectory predictor formula is **CORRECT** (verified via test) - But live predictions are **13.4x over-optimistic** - Example: Expected $5.07, Logged $67.64 - Causing false HOLD signals → poor peak capture (54.5% avg) - Bug location: **UNKNOWN** (between Kalman → Predictor → Log) #### Debug Features Added 1. **Comprehensive Input Logging** (smart_risk_manager.py) - Log all inputs to trajectory predictor - Compare guard.velocity vs guard.kalman_velocity vs _vel - Track velocity_history and acceleration_history values 2. **Calculation Breakdown** (trajectory_predictor.py) - Log each term: p₀, v×t, 0.5×a×t² - Show final prediction for each horizon (1m, 3m, 5m) 3. **Manual Verification** (smart_risk_manager.py) - Calculate prediction manually inline - Compare predictor output vs manual calculation - Log WARNING if difference > $0.01 #### Next Steps - Monitor 1-2 trades with full debug output - Identify exact point where 13x scaling occurs - Fix bug in v0.1.5 - Expected: Peak capture 54% → 75%+ ### Changed - Version bumped from 0.1.3 → 0.1.4 (PATCH - debug release) - Exit strategy upgraded from v6.4.2 → v6.4.3 ### Note - This is a **DEBUG release** for investigation - No functional changes to trading logic - All debug logs use logger.debug() (won't spam console) --- ## [0.1.3] - 2026-02-11 ### Fixed (Critical: FIX 1 v0.1.1 Was Never Active!) **Exit Strategy v6.4.2 "Tiered Thresholds Finally Working"** - Live trade #161706070 revealed FIX 1 not active #### Problem (Trade #161706070) - Profit peaked at **$0.69** → closed at **$0.11** (lost 84% of peak!) - Exit reason: "Fuzzy 94.58%, threshold=90%" - **WRONG**: Profit $0.11 (<$1) should get threshold **70%**, not 90%! - **Root Cause**: Hardcoded fuzzy_threshold at line 1313-1324 NEVER called `_calculate_fuzzy_exit_threshold()` #### FIX: Activate Tiered Fuzzy Thresholds (FIX 1 v0.1.1) ✅ - **BEFORE**: Hardcoded thresholds ignored tiered function ```python if current_profit < 3.0: fuzzy_threshold = 0.90 # WRONG for micro profits! ``` - **AFTER**: Actually call the FIX 1 function ```python fuzzy_threshold = self._calculate_fuzzy_exit_threshold(current_profit) # Returns: <$1→70%, $1-3→75%, $3-8→85%, >$8→90% ``` - **IMPACT**: Micro profits (<$1) now exit at 70% confidence instead of 90% - Expected: Earlier exits on micro profits → higher profit retention - Target: Peak capture 16% → 60%+ for micro trades #### Trade #161706070 Analysis - Entry: BUY @ 5056.12 - Peak: $0.69 (vel +0.0748$/s, accel +0.0006) at 09:55:05 - Exit: $0.11 (vel -0.0040$/s) at 09:55:38 → 3m 5s duration - **Exit was correct** (price dropped to 5052.99, would be -$3.13 loss now) - **But late**: Should have exited at $0.50-0.60 with 70% threshold ### Changed - Version bumped from 0.1.2 → 0.1.3 (PATCH - critical bug fix) - Exit strategy upgraded from v6.4.1 → v6.4.2 ### Note - **BACKTEST v0.1.1 WAS INVALID** - FIX 1 was not active in backtest either - Need to re-run backtest with FIX 1 actually working - Grace period (v0.1.2) is still active and working --- ## [0.1.2] - 2026-02-11 ### Fixed (Grace Period for Loss Exits) **Exit Strategy v6.4.1 "Loss Recovery Window"** - Live trade analysis revealed early exit issue #### Problem (Trade #161699163) - Trade exited after only **18 seconds** with loss -$0.22 - Fuzzy confidence 94.58% triggered immediate exit - Velocity was still positive (+0.0693$/s) but profit retention "collapsed" - **Root Cause**: No grace period for micro swings, small loss after small profit treated as catastrophic #### FIX 1: Grace Period for Loss Trades ✅ - **BEFORE**: Fuzzy exit active immediately after entry - **AFTER**: Grace period based on regime: - Ranging: 120 seconds (2 minutes) - Volatile: 90 seconds (1.5 minutes) - Trending: 60 seconds (1 minute) - **Suppression Logic**: Loss <$2 during grace period → fuzzy exit suppressed - **IMPACT**: Prevents premature exits on micro swings, allows recovery window #### FIX 2: Profit Retention Calculation Fix ✅ - **BEFORE**: `retention = current_profit / peak_profit` → -$0.22 / $0.17 = -1.29 → clamped to 0 ("collapsed") - **AFTER**: Small loss (<$0) after small profit (<$3) → retention = 0.50 (medium, not collapsed) - **IMPACT**: Micro swings no longer trigger "collapsed retention" → 95% exit confidence ### Changed - Version bumped from 0.1.1 → 0.1.2 (PATCH - bug fix) - Exit strategy upgraded from v6.4 → v6.4.1 ### Expected Impact - Avg trade duration: 18s → 60-120s (more reasonable) - False early exits: -30% (grace period filtering) - Recovery opportunities: More micro swings can recover to profit ### Note - Trade #161699163 exit was actually **correct** (price continued to drop from 5053.74 → 5052.55) - Grace period prevents false exits while preserving correct exit decisions for sustained losses --- ## [0.1.1] - 2026-02-11 ### Fixed (Professor AI Exit Strategy Improvements) **Exit Strategy v6.4 "Validated Fixes"** - Backtest validated over 338 trades (90 days) #### FIX 1: Tiered Fuzzy Exit Thresholds (PRIORITY 1) ✅ - **BEFORE**: Fixed 90% fuzzy threshold for ALL profit levels - **AFTER**: Dynamic thresholds based on profit magnitude: - Micro profits (<$1): 70% threshold → early exit - Small profits ($1-$3): 75% threshold → protection - Medium profits ($3-$8): 85% threshold → hold longer - Large profits (>$8): 90% threshold → maximize - **IMPACT**: Avg win increased $4.07 → $9.36 (+130%), Micro profits reduced 75% → 13% #### FIX 2: Trajectory Prediction Calibration (PRIORITY 2) ✅ - **BEFORE**: Optimistic parabolic prediction (95% error rate) - **AFTER**: Conservative prediction with: - Regime penalty (ranging 0.4x, volatile 0.6x, trending 0.9x) - Uncertainty bounds (95% confidence interval lower bound) - Prevents premature exits based on overestimated future profit - **IMPACT**: More realistic profit forecasting, reduced false exits #### FIX 4: Unicode Fix (PRIORITY 4) ✅ - **BEFORE**: Emoji in exit messages caused encoding errors - **AFTER**: ASCII-only exit messages for Windows compatibility - **IMPACT**: No more UnicodeEncodeError in logs #### FIX 5: Maximum Loss Enforcement (PRIORITY 5) ✅ - **BEFORE**: Max loss $50/trade - **AFTER**: Max loss $25/trade with SL cap at entry - **IMPACT**: Tighter risk control (avg loss $33 in backtest due to M15 slippage, will be closer to $25 in live with tick data) ### Changed - Version bumped from 0.0.0 → 0.1.1 (Kalman + Bug Fixes) - Exit strategy upgraded from v6.3 → v6.4 ### Backtest Results (90 days, 338 trades) - **Avg Win**: $9.36 ✅ (target: $8-12) - **Micro Profits**: 13% ✅ (target: <20%, was 75%) - **Net P/L**: +$595.16 (11.9% return) - **Profit Factor**: 1.30 (sustainable) - **Sharpe Ratio**: 1.29 (near target 1.5) - **Fuzzy Exits**: 69% of trades (232/338) ### Note - FIX 3 (Session Filter) NOT applied - trade ALL sessions per user request - RR Ratio 1:3.57 due to M15 backtest slippage, expected to improve in live trading --- ## [0.0.0] - 2026-02-11 ### Initial Release Starting point for versioned releases. All previous development consolidated into v0.0.0 baseline. --- ## [0.0.0] - 2026-02-11 ### Initial Release Starting point for versioned releases. All previous development consolidated into v0.0.0 baseline. #### Core Features - **MT5 Integration**: Real-time connection to MetaTrader 5 - **Smart Money Concepts (SMC)**: Order Blocks, Fair Value Gaps, BOS/CHoCH detection - **Machine Learning**: XGBoost model for trade signal prediction (37 features) - **HMM Regime Detection**: Market classification (trending/ranging/volatile) - **Risk Management**: Multi-tier capital modes (MICRO/SMALL/MEDIUM/LARGE) - **Session Filtering**: Sydney/London/NY session optimization - **Telegram Notifications**: Real-time trade alerts and commands #### Advanced Exit Systems - **v6.0 Kalman Intelligence**: Kalman filter for velocity smoothing - **v6.1 Profit-Tier Strategy**: Dynamic exit thresholds based on profit magnitude - **v6.2 Bug Fixes**: ExitReason.STOP_LOSS → POSITION_LIMIT correction - **v6.3 Predictive Intelligence**: - Trajectory Predictor (profit forecasting 1-5min ahead) - Momentum Persistence Detector (continuation probability) - Recovery Strength Analyzer (loss recovery optimization) #### Technical Infrastructure - **Framework**: Python 3.11+, Polars (not Pandas), asyncio - **Models**: XGBoost (binary classification), HMM (regime detection) - **Database**: PostgreSQL for trade logging - **Dashboard**: Next.js web monitoring interface - **Deployment**: Docker support with multi-environment configs ### Performance Metrics (Baseline) - Win Rate: 56-58% - Average Win: $2.78 (v6.2) → Target $6-8 (v6.3) - Peak Capture: 71% → Target 85%+ - Daily Loss Limit: 5% of capital - Risk per Trade: 0.5-2% (capital-mode dependent) --- ## Version History Format ### [MAJOR.MINOR.PATCH] - YYYY-MM-DD #### Added - New features that are backward compatible #### Changed - Changes in existing functionality #### Deprecated - Features that will be removed in future versions #### Removed - Features that have been removed #### Fixed - Bug fixes #### Security - Security vulnerability fixes --- ## Semantic Versioning Guidelines ### MAJOR version (x.0.0) Increment when making incompatible API changes: - Breaking changes to core trading logic - Removal of major features - Database schema changes requiring migration - Configuration format changes Examples: - Switching from Pandas to Polars - Changing ML model architecture completely - Removing hard stop-loss system ### MINOR version (0.x.0) Increment when adding functionality in a backward-compatible manner: - New exit strategies (e.g., v6.3 Predictive Intelligence) - New indicators or features - New filters or risk management modes - Enhanced logging or monitoring Examples: - Adding Trajectory Predictor - Adding new session filter - Implementing Kelly Criterion ### PATCH version (0.0.x) Increment when making backward-compatible bug fixes: - Bug fixes that don't change behavior - Performance optimizations - Documentation updates - Code refactoring (no logic changes) Examples: - Fixing ExitReason.STOP_LOSS typo - Fixing variable scope errors - Correcting log messages --- ## Feature Tracking Current feature set determines version automatically: | Feature | Version Component | Impact | |---------|------------------|--------| | Basic Trading (SMC + ML + MT5) | 0.x.x | Core | | Exit v6.0 (Kalman) | 0.1.x | MINOR | | Exit v6.1 (Profit-Tier) | 0.2.x | MINOR | | Exit v6.2 (Bug Fixes) | 0.2.1 | PATCH | | Exit v6.3 (Predictive) | 0.3.x | MINOR | | Fuzzy Logic Controller | +0.1 | MINOR | | Kelly Criterion | +0.1 | MINOR | | Recovery Detector | +0.1 | MINOR | --- ## Links - [Repository](https://github.com/GifariKemal/xaubot-ai) - [Documentation](./docs/) - [Issues](https://github.com/GifariKemal/xaubot-ai/issues)