384 lines
9.5 KiB
Markdown
384 lines
9.5 KiB
Markdown
# Advanced Exit Strategies v7 - Quick Start Guide
|
|||
|
|
|
||
|
|
## 🚀 Installation & Setup (5 Minutes)
|
||
|
|
|
||
|
|
### Step 1: Install Dependencies
|
||
|
|
```bash
|
||
|
|
pip install scikit-fuzzy>=0.4.2
|
||
|
|
pip install scipy>=1.11.0
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 2: Enable Advanced Exits
|
||
|
|
Edit `.env` file:
|
||
|
|
```bash
|
||
|
|
# Advanced Exit Strategies (v7)
|
||
|
|
ADVANCED_EXITS_ENABLED=1 # 1=ON, 0=OFF (default: ON)
|
||
|
|
KALMAN_ENABLED=1 # Keep ON for compatibility
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 3: Verify Installation
|
||
|
|
```bash
|
||
|
|
# Test all 6 systems
|
||
|
|
python -c "from src.extended_kalman_filter import ExtendedKalmanFilter; print('✓ EKF OK')"
|
||
|
|
python -c "from src.pid_exit_controller import PIDExitController; print('✓ PID OK')"
|
||
|
|
python -c "from src.fuzzy_exit_logic import FuzzyExitController; print('✓ Fuzzy OK')"
|
||
|
|
python -c "from src.order_flow_metrics import VolumeToxicityDetector; print('✓ OFI OK')"
|
||
|
|
python -c "from src.optimal_stopping_solver import OptimalStoppingHJB; print('✓ HJB OK')"
|
||
|
|
python -c "from src.kelly_position_scaler import KellyPositionScaler; print('✓ Kelly OK')"
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected output:
|
||
|
|
```
|
||
|
|
✓ EKF OK
|
||
|
|
✓ PID OK
|
||
|
|
✓ Fuzzy OK
|
||
|
|
✓ OFI OK
|
||
|
|
✓ HJB OK
|
||
|
|
✓ Kelly OK
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 4: Test Run
|
||
|
|
```bash
|
||
|
|
python main_live.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Check logs for:
|
||
|
|
```
|
||
|
|
SMART RISK MANAGER v2.3 (Exit v7 Advanced) INITIALIZED
|
||
|
|
✓ Fuzzy Exit Controller initialized
|
||
|
|
✓ Kelly Position Scaler initialized
|
||
|
|
✓ Volume Toxicity Detector initialized
|
||
|
|
✓ HJB Solver initialized
|
||
|
|
Advanced Exits: ENABLED (EKF + PID + Fuzzy + OFI + HJB + Kelly)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 What Changed?
|
||
|
|
|
||
|
|
### Before (v6 - Kalman Intelligence)
|
||
|
|
```
|
||
|
|
Exit decision = IF velocity < -0.10 THEN exit
|
||
|
|
IF time > 30min THEN exit
|
||
|
|
...8 isolated checks
|
||
|
|
```
|
||
|
|
**Problem**: Fixed thresholds, isolated checks, binary True/False
|
||
|
|
|
||
|
|
### After (v7 - Advanced Intelligence)
|
||
|
|
```
|
||
|
|
Exit decision = FUZZY(velocity, accel, retention, rsi, time, profit_lvl)
|
||
|
|
→ exit_confidence (0-1)
|
||
|
|
→ IF confidence > 0.75 THEN exit
|
||
|
|
→ IF 0.50-0.75 THEN Kelly partial exit
|
||
|
|
```
|
||
|
|
**Solution**: Dynamic thresholds, probabilistic confidence, partial exits
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Key Features
|
||
|
|
|
||
|
|
### 1. Extended Kalman Filter (EKF)
|
||
|
|
**What it does**: Predicts acceleration 2-5 seconds earlier
|
||
|
|
```python
|
||
|
|
# 3D state: [profit, velocity, acceleration]
|
||
|
|
profit_filtered, vel, accel = ekf.update(profit, vel_deriv, momentum)
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ Detects crashes before they happen (negative acceleration)
|
||
|
|
- ✅ Reduces false exits from noise (friction model)
|
||
|
|
- ✅ Adapts to market regime (ranging vs trending)
|
||
|
|
|
||
|
|
### 2. PID Controller
|
||
|
|
**What it does**: Smooths trail stop adjustments
|
||
|
|
```python
|
||
|
|
# Trail adjustment: -0.2 to +0.2 ATR
|
||
|
|
pid_adj = pid.update(velocity, profit)
|
||
|
|
trail_atr += pid_adj # Smooth update
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ No sudden trail jumps (derivative term predicts)
|
||
|
|
- ✅ Compensates for persistent underperformance (integral term)
|
||
|
|
- ✅ Immediate response to velocity changes (proportional term)
|
||
|
|
|
||
|
|
### 3. Fuzzy Logic
|
||
|
|
**What it does**: Aggregates 6 inputs into exit confidence
|
||
|
|
```python
|
||
|
|
exit_conf = fuzzy.evaluate(
|
||
|
|
velocity=-0.10, # Declining
|
||
|
|
acceleration=-0.003, # Negative
|
||
|
|
profit_retention=0.7,# Medium retention
|
||
|
|
rsi=45, time=12, profit_level=0.5
|
||
|
|
)
|
||
|
|
# Output: 0.68 → Medium confidence, check Kelly for partial
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ Combines weak signals (3 medium = 1 strong)
|
||
|
|
- ✅ No more missed exits from isolated checks
|
||
|
|
- ✅ Probabilistic vs binary decision
|
||
|
|
|
||
|
|
### 4. Order Flow Imbalance (OFI)
|
||
|
|
**What it does**: Detects institutional activity
|
||
|
|
```python
|
||
|
|
ofi_pseudo = (buy_vol - sell_vol) / total_vol # -1 to +1
|
||
|
|
toxicity = |vol_accel| + |ofi_div|*2 + spread_expansion
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ Preemptive exit before flash crash (toxicity > 2.5)
|
||
|
|
- ✅ Trend confirmation (high OFI + position direction = hold)
|
||
|
|
- ✅ Reversal detection (OFI divergence)
|
||
|
|
|
||
|
|
### 5. HJB Solver (Optimal Stopping)
|
||
|
|
**What it does**: Optimal exit for ranging markets
|
||
|
|
```python
|
||
|
|
# Ornstein-Uhlenbeck mean reversion
|
||
|
|
optimal_threshold = hjb.solve_exit_threshold(profit, target)
|
||
|
|
# Fast reversion → exit at 75% of target
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ Ranging markets: don't wait for full TP (will revert)
|
||
|
|
- ✅ Time-to-target estimation
|
||
|
|
- ✅ Continuation value calculation
|
||
|
|
|
||
|
|
### 6. Kelly Criterion
|
||
|
|
**What it does**: Partial exits based on confidence
|
||
|
|
```python
|
||
|
|
kelly_hold = kelly.calculate_optimal_fraction(exit_conf, profit, target)
|
||
|
|
# hold < 0.25 → full exit
|
||
|
|
# hold 0.25-0.70 → partial exit (close 30-75%)
|
||
|
|
# hold > 0.70 → keep 100%
|
||
|
|
```
|
||
|
|
|
||
|
|
**When it helps**:
|
||
|
|
- ✅ Partial exits protect gains
|
||
|
|
- ✅ Dynamic position sizing
|
||
|
|
- ✅ Risk-adjusted decisions (win rate + payoff ratio)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📈 Expected Improvements
|
||
|
|
|
||
|
|
| Metric | v6 Baseline | v7 Target | Improvement |
|
||
|
|
|--------|-------------|-----------|-------------|
|
||
|
|
| **Win Rate** | 50-55% | 58-63% | +8% |
|
||
|
|
| **Avg Profit/Trade** | $5-8 | $8-12 | +50% |
|
||
|
|
| **Peak Capture %** | 80-85% | 85-92% | +7% |
|
||
|
|
| **Max Drawdown** | -$50 | -$35 | -30% |
|
||
|
|
| **False Exits** | 15% | <10% | -33% |
|
||
|
|
| **Sharpe Ratio** | 1.2 | 1.5+ | +25% |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧪 Testing
|
||
|
|
|
||
|
|
### Run Unit Tests
|
||
|
|
```bash
|
||
|
|
pytest tests/test_advanced_exits.py -v
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected output:
|
||
|
|
```
|
||
|
|
test_ekf_initialization PASSED
|
||
|
|
test_ekf_detects_deceleration PASSED
|
||
|
|
test_pid_proportional_response PASSED
|
||
|
|
test_fuzzy_crashing_velocity PASSED
|
||
|
|
test_ofi_calculation PASSED
|
||
|
|
test_hjb_fast_reversion PASSED
|
||
|
|
test_kelly_high_confidence_exit PASSED
|
||
|
|
test_all_systems_work_together PASSED
|
||
|
|
...
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run Integration Test
|
||
|
|
```bash
|
||
|
|
python tests/test_modules.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run Backtest (6-month)
|
||
|
|
```bash
|
||
|
|
python backtests/backtest_live_sync.py --threshold 0.50 --advanced-exits --save
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Configuration Tuning
|
||
|
|
|
||
|
|
### Basic (Use Defaults)
|
||
|
|
```bash
|
||
|
|
# In .env
|
||
|
|
ADVANCED_EXITS_ENABLED=1
|
||
|
|
# All other settings use defaults from config.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### Advanced (Custom Tuning)
|
||
|
|
Edit `src/config.py`:
|
||
|
|
```python
|
||
|
|
@dataclass
|
||
|
|
class AdvancedExitConfig:
|
||
|
|
# Fuzzy thresholds
|
||
|
|
fuzzy_exit_threshold: float = 0.70 # Lower = more exits
|
||
|
|
fuzzy_warning_threshold: float = 0.50
|
||
|
|
|
||
|
|
# PID gains (Ziegler-Nichols tuning)
|
||
|
|
pid_kp: float = 0.15 # Increase for faster response
|
||
|
|
pid_ki: float = 0.05 # Increase for drift compensation
|
||
|
|
pid_kd: float = 0.10 # Increase for crash prediction
|
||
|
|
|
||
|
|
# Toxicity thresholds
|
||
|
|
toxicity_threshold: float = 1.5 # Lower = more sensitive
|
||
|
|
toxicity_critical: float = 2.5
|
||
|
|
|
||
|
|
# Kelly parameters
|
||
|
|
kelly_base_win_rate: float = 0.55 # Update from backtest
|
||
|
|
kelly_avg_win: float = 8.0
|
||
|
|
kelly_avg_loss: float = 4.0
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🐛 Troubleshooting
|
||
|
|
|
||
|
|
### Issue: Import Error
|
||
|
|
```
|
||
|
|
ImportError: No module named 'skfuzzy'
|
||
|
|
```
|
||
|
|
**Solution**:
|
||
|
|
```bash
|
||
|
|
pip install scikit-fuzzy scipy
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: Advanced Exits Not Enabled
|
||
|
|
**Check logs**:
|
||
|
|
```
|
||
|
|
SMART RISK MANAGER v2.2 (Exit v6 Kalman) INITIALIZED
|
||
|
|
```
|
||
|
|
**Solution**: Check `.env` file:
|
||
|
|
```bash
|
||
|
|
ADVANCED_EXITS_ENABLED=1
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: Fuzzy System Fails
|
||
|
|
```
|
||
|
|
Could not initialize FuzzyExitController: ...
|
||
|
|
```
|
||
|
|
**Solution**: System falls back to v6 logic automatically. Check dependencies:
|
||
|
|
```bash
|
||
|
|
python -c "import skfuzzy; print('OK')"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: Too Many Exits
|
||
|
|
**Symptom**: Win rate drops, many small profits
|
||
|
|
**Solution**: Increase fuzzy threshold:
|
||
|
|
```python
|
||
|
|
fuzzy_exit_threshold: float = 0.75 # Was 0.70
|
||
|
|
```
|
||
|
|
|
||
|
|
### Issue: Too Few Exits
|
||
|
|
**Symptom**: Large drawdowns, late exits
|
||
|
|
**Solution**: Decrease fuzzy threshold:
|
||
|
|
```python
|
||
|
|
fuzzy_exit_threshold: float = 0.65 # Was 0.70
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Monitoring
|
||
|
|
|
||
|
|
### Key Metrics to Watch
|
||
|
|
1. **Exit Confidence** (logs every 60s):
|
||
|
|
```
|
||
|
|
[FUZZY] Exit confidence: 0.58 (medium)
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **PID Diagnostics** (logs every 60s):
|
||
|
|
```
|
||
|
|
[PID] #12345 adj=+0.123 P=0.100 I=0.015 D=0.008
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Toxicity Levels**:
|
||
|
|
```
|
||
|
|
[TOXICITY] Score: 1.8 (warning) - preemptive exit
|
||
|
|
```
|
||
|
|
|
||
|
|
4. **Kelly Fractions**:
|
||
|
|
```
|
||
|
|
[KELLY PARTIAL] Close 50% (hold=0.50, fuzzy=0.62)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Performance Metrics
|
||
|
|
```bash
|
||
|
|
# Check bot_status.json
|
||
|
|
cat data/bot_status.json | grep "exit_reason"
|
||
|
|
|
||
|
|
# Exit reason distribution (should see more "fuzzy_high", "kelly_partial")
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚦 Rollback Plan
|
||
|
|
|
||
|
|
### If Performance Degrades
|
||
|
|
1. **Disable advanced exits**:
|
||
|
|
```bash
|
||
|
|
echo "ADVANCED_EXITS_ENABLED=0" >> .env
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Restart bot**:
|
||
|
|
```bash
|
||
|
|
python main_live.py
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **System reverts to v6** (Kalman Intelligence):
|
||
|
|
```
|
||
|
|
SMART RISK MANAGER v2.2 (Exit v6 Kalman) INITIALIZED
|
||
|
|
```
|
||
|
|
|
||
|
|
### Gradual Rollout
|
||
|
|
1. **Week 1**: Demo account with `ADVANCED_EXITS_ENABLED=1`
|
||
|
|
2. **Week 2**: Analyze metrics (Sharpe, win rate, avg profit)
|
||
|
|
3. **Week 3**: Tune parameters if needed
|
||
|
|
4. **Week 4**: Go live if Sharpe improves 20%+
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 Further Reading
|
||
|
|
|
||
|
|
- **Full Implementation**: `docs/ADVANCED-EXIT-IMPLEMENTATION-v7.md`
|
||
|
|
- **Architecture**: See "Architecture Overview" section
|
||
|
|
- **Mathematical Background**: `docs/research/Gemini Algoritma Matematika Trading_ Exit Strategi.md`
|
||
|
|
- **Original Research**: `docs/research/mathematical-exit-strategies-research.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🤝 Support
|
||
|
|
|
||
|
|
**Issues**: Report at https://github.com/GifariKemal/xaubot-ai/issues
|
||
|
|
**Questions**: Tag @GifariKemal
|
||
|
|
**Logs**: Check `logs/` directory for detailed diagnostics
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✨ Summary
|
||
|
|
|
||
|
|
You've just upgraded XAUBot AI to v7 with **predictive, probabilistic exit management**! 🎉
|
||
|
|
|
||
|
|
**What to expect**:
|
||
|
|
- ✅ Exits 2-5 seconds earlier (EKF acceleration)
|
||
|
|
- ✅ Smoother trail stops (PID)
|
||
|
|
- ✅ Better signal aggregation (Fuzzy)
|
||
|
|
- ✅ Crash protection (Toxicity)
|
||
|
|
- ✅ Optimal timing (HJB)
|
||
|
|
- ✅ Partial exits (Kelly)
|
||
|
|
|
||
|
|
**Next steps**:
|
||
|
|
1. Run unit tests: `pytest tests/test_advanced_exits.py -v`
|
||
|
|
2. Run backtest: `python backtests/backtest_live_sync.py --advanced-exits`
|
||
|
|
3. Demo account: 2 weeks monitoring
|
||
|
|
4. Go live: If Sharpe improves 20%+
|
||
|
|
|
||
|
|
**Good luck trading! 🚀📈**
|