feat: leverage-based position cap (replaces hardcoded max_position)
max_position_absolute is now computed from max_leverage:
max_position = floor(capital * max_leverage / (price * multiplier))
- Added max_leverage config field (default: 5.0)
- compute_max_position() derives position from leverage + median price
- Hyperopt risk_intensity scales max_leverage (not position directly)
- Updated all TOML configs: dqn-production, dqn-smoketest, dqn-localdev
- Hyperopt search space: max_leverage = [2.0, 10.0] (replaces [1.0, 4.0] contracts)
- GpuBacktestConfig wired with max_leverage for consistent eval
With $35K capital, ES at $5K, multiplier=50:
5× leverage → floor(35000*5/250000) = 0.7 → 1 contract (safe)
Old default 2.0 contracts → 14× leverage (dangerous)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>