62 lines
1.8 KiB
Markdown
62 lines
1.8 KiB
Markdown
|
|
# FIX: Loss Exit Grace Period (v0.1.2)
|
||
|
|
|
||
|
|
## Problem
|
||
|
|
Trade #161699163 exit terlalu cepat (18 detik) meskipun exit decision ternyata correct.
|
||
|
|
User concern: Sistem tidak memberikan kesempatan recovery untuk micro swings.
|
||
|
|
|
||
|
|
## Root Cause
|
||
|
|
1. **No grace period for loss trades** - langsung fuzzy check setelah entry
|
||
|
|
2. **Profit retention bug** - loss setelah profit kecil dianggap "collapsed" (trigger 95% exit)
|
||
|
|
|
||
|
|
## Proposed Fix
|
||
|
|
|
||
|
|
### FIX 1: Grace Period untuk Loss Trades
|
||
|
|
```python
|
||
|
|
# Line ~1397 smart_risk_manager.py
|
||
|
|
# BEFORE:
|
||
|
|
if exit_confidence > 0.75:
|
||
|
|
return True, ExitReason.POSITION_LIMIT, ...
|
||
|
|
|
||
|
|
# AFTER:
|
||
|
|
# Grace period: 60-120s tergantung regime
|
||
|
|
grace_period_sec = {
|
||
|
|
"ranging": 120,
|
||
|
|
"volatile": 90,
|
||
|
|
"trending": 60
|
||
|
|
}.get(regime, 90)
|
||
|
|
|
||
|
|
time_since_entry = time.time() - guard.entry_time
|
||
|
|
if time_since_entry < grace_period_sec:
|
||
|
|
# Suppress fuzzy exit during grace period
|
||
|
|
logger.info(f"[GRACE PERIOD] Loss fuzzy={exit_confidence:.2%} suppressed (t={time_since_entry:.0f}s < {grace_period_sec}s)")
|
||
|
|
else:
|
||
|
|
if exit_confidence > 0.75:
|
||
|
|
return True, ExitReason.POSITION_LIMIT, ...
|
||
|
|
```
|
||
|
|
|
||
|
|
### FIX 2: Profit Retention Fix untuk Small Loss After Small Profit
|
||
|
|
```python
|
||
|
|
# fuzzy_exit_logic.py - evaluate() method
|
||
|
|
# BEFORE:
|
||
|
|
profit_retention_val = current_profit / peak_profit
|
||
|
|
|
||
|
|
# AFTER:
|
||
|
|
if current_profit < 0 and 0 < peak_profit < 3.0:
|
||
|
|
# Small loss after small profit = micro swing, bukan collapse
|
||
|
|
profit_retention_val = 0.50 # Medium retention (bukan collapsed)
|
||
|
|
else:
|
||
|
|
profit_retention_val = current_profit / peak_profit
|
||
|
|
```
|
||
|
|
|
||
|
|
## Expected Impact
|
||
|
|
- Avg trade duration: 18s → 60-120s (lebih reasonable)
|
||
|
|
- False early exits: -30% (grace period filtering)
|
||
|
|
- Recovery opportunities: Lebih banyak micro swings yang bisa recovery
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
- Backtest with grace period enabled
|
||
|
|
- Monitor next 10 trades: avg duration harus >60s
|
||
|
|
|
||
|
|
## Version
|
||
|
|
- Bump to v0.1.2 (PATCH - bug fix)
|