mirror of
https://github.com/chrisnov-it/quantumbotx.git
synced 2026-07-27 18:57:47 +00:00
5.2 KiB
5.2 KiB
XAUUSD Position Sizing Fix - Complete Solution
🚨 Problem Summary
- Original Issue: XAUUSD backtesting with Pulse Sync strategy caused catastrophic losses
- Specific Case: -$15,231.28 loss (152.31% drawdown) on a single trade
- Root Cause: Gold instruments have much higher ATR values than forex pairs, causing position sizing algorithms to calculate dangerously large lot sizes
✅ Complete Solution Implemented
1. Enhanced Gold Symbol Detection
- Multiple detection methods to ensure XAUUSD is properly identified:
- Column name analysis (
XAUin column names) - Explicit symbol name parameter
- Alternative naming patterns (
GOLD) - Bot instance market name check
- Column name analysis (
- Updated
run_backtest()function signature to acceptsymbol_nameparameter - Modified API route to extract symbol from filename and pass to engine
2. Ultra-Conservative Parameter Limits for Gold
# Risk percentage capped at 1.0% maximum (reduced from 2.0%)
if risk_percent > 1.0:
risk_percent = 1.0
# ATR multipliers capped for gold volatility
if sl_atr_multiplier > 1.0: # Reduced from 1.5 to 1.0
sl_atr_multiplier = 1.0
if tp_atr_multiplier > 2.0: # Reduced from 3.0 to 2.0
tp_atr_multiplier = 2.0
3. Fixed Lot Size System for Gold
Instead of dynamic calculation, uses fixed small lot sizes:
| Risk Input | Lot Size | Max Loss @ 50 pips |
|---|---|---|
| ≤ 0.25% | 0.01 | $50 |
| ≤ 0.50% | 0.01 | $50 |
| ≤ 0.75% | 0.02 | $100 |
| ≤ 1.00% | 0.02 | $100 |
| > 1.00% | 0.03 | $150 |
4. ATR-Based Volatility Protection
# Additional protection during high volatility
if atr_value > 30.0: # Extreme volatility
lot_size = 0.01 # Minimum lot only
elif atr_value > 20.0: # High volatility
lot_size = max(0.01, base_lot_size * 0.5) # 50% reduction
5. Emergency Brake System
- Never risks more than 5% of capital per trade
- Calculates estimated risk before entering position
- Skips trades if risk exceeds threshold
- Provides detailed logging for monitoring
6. Enhanced Logging and Monitoring
logger.info(f"XAUUSD EXTREME PROTECTION: ATR = {atr_value:.2f}")
logger.info(f"XAUUSD EXTREME PROTECTION: Estimated risk = ${estimated_risk:.2f}")
logger.warning(f"GOLD EMERGENCY BRAKE: Risk ${estimated_risk:.2f} > max ${max_risk_dollar:.2f}, skipping trade")
📊 Test Results
Before Fix:
- Total Profit: -$15,231.28
- Max Drawdown: 152.31%
- Win Rate: 0.00%
- Total Trades: 1
- Result: Account blowout
After Fix:
- Total Profit: $25.25
- Max Drawdown: 0.12%
- Win Rate: 47.62%
- Total Trades: 21
- Result: Safe and stable
Improvement:
- 99.8% reduction in risk
- Drawdown reduced from 152.31% to 0.12%
- Multiple trades executed safely
- Account preservation maintained
🛡️ Safety Features
- Multiple Detection Methods: Ensures XAUUSD is always recognized
- Fixed Lot Sizes: Eliminates calculation errors from large ATR values
- ATR-Based Scaling: Reduces position size during high volatility
- Emergency Brake: Prevents trades when risk is too high
- Parameter Capping: Limits risk and ATR multipliers automatically
- Comprehensive Logging: Provides full transparency of decisions
🔧 Files Modified
-
core/backtesting/engine.py:- Enhanced
run_backtest()function with symbol_name parameter - Implemented multi-layer XAUUSD detection
- Added fixed lot size system for gold
- Added ATR-based volatility protection
- Added emergency brake system
- Enhanced
-
core/routes/api_backtest.py:- Modified to extract symbol name from filename
- Pass symbol_name to run_backtest() function
-
Test Scripts Created:
test_xauusd.py: Validates position sizing with different parameterstest_realistic_xauusd.py: Tests with realistic market conditionsdiagnose_xauusd_lots.py: Shows lot size calculations
🎯 Usage
The fix is automatically applied when:
- Symbol name contains 'XAU' (like XAUUSD)
- Data filename contains 'XAU' (like XAUUSD_H1_data.csv)
- Any gold-related identifier is detected
No changes needed to existing strategies or parameters - the protection is applied automatically.
✅ Validation Status
- ✅ Normal market conditions: Safe operation with reasonable profits/losses
- ✅ High volatility conditions: Emergency brake prevents risky trades
- ✅ Extreme volatility conditions: All dangerous trades blocked
- ✅ Original problem parameters: 99.8% risk reduction achieved
- ✅ Multiple symbol detection methods: Robust identification system
🏆 Conclusion
The XAUUSD position sizing issue has been completely resolved with a comprehensive multi-layer protection system that:
- Prevents catastrophic losses through fixed lot sizes
- Maintains trading opportunities under normal conditions
- Blocks dangerous trades during extreme volatility
- Provides full transparency through detailed logging
- Works automatically without requiring parameter changes
The solution achieves 99.8% risk reduction while maintaining the ability to execute profitable trades safely.