diff --git a/backtest_gpu.py b/backtest_gpu.py index f7b0f19..cf15e0a 100644 --- a/backtest_gpu.py +++ b/backtest_gpu.py @@ -408,19 +408,21 @@ class VectorIndicators: # ══════════════════════════════════════════════════════════════════ # Per-indicator base weights -# Optimised 2026-05-07 via 36-combo sweep on H4 2022-2026 local data: -# ema_trend ×3, macd ×3, stochastic ×2, adx ×0.5, ichimoku ×0.5, rsi=0, bollinger=0 -# Combined result: +21.30% / -8.52% DD / Sharpe 0.47 vs baseline +7.12% / -9.05% DD / 0.23 +# Round 1 optimisation 2026-05-07: ema_trend=3.6, macd=3.3, stoch=1.6, adx=0.5, ichi=0.55 +# → +21.30% / -8.52% DD / Sharpe 0.47 +# Round 2 optimisation 2026-05-08 (GPU sweep relative to round-1 baseline): +# ema_trend ×0.5 was best single move: +32.68% / -6.15% DD / Sharpe 0.74 +# stochastic ×1.5 added modest improvement; macd kept unchanged # Original weights (engine.py defaults, pre-optimisation): # ema_trend=1.2, rsi=0.3, macd=1.1, bollinger=0.9, stochastic=0.8, adx=1.0, ichimoku=1.1 _BASE_W = { - "ema_trend": 3.6, - "macd": 3.3, - "stochastic": 1.6, - "adx": 0.5, - "ichimoku": 0.55, - "rsi": 0.0, # ablated — net drag on H4 2022-2026 - "bollinger": 0.0, # ablated — counter-trend noise on trending pair + "ema_trend": 1.8, # was 3.6 — over-weighted; halving lifts return +11pp, tightens DD + "macd": 3.3, # unchanged — dominant signal + "stochastic": 2.4, # was 1.6 — ×1.5 improved WR to 40.4% + "adx": 0.5, # unchanged + "ichimoku": 0.55, # unchanged + "rsi": 0.0, # ablated — confirmed: all multipliers give identical result + "bollinger": 0.0, # ablated — confirmed: all multipliers give identical result } # Regime-based weight multipliers — matches engine._compute_composite diff --git a/engine.py b/engine.py index f223f00..98c90e8 100644 --- a/engine.py +++ b/engine.py @@ -171,7 +171,7 @@ class TechnicalEngine: result.indicators["ema_trend"] = IndicatorSignal( name="EMA Trend", value=normalized, signal=signal, confidence=conf, - description=desc, weight=3.6, + description=desc, weight=1.8, ) if t is not None: result.key_levels["ema_trend"] = float(t) @@ -423,7 +423,7 @@ class TechnicalEngine: result.indicators["stochastic"] = IndicatorSignal( name="Stochastic", value=k_val, signal=signal, - confidence=conf, description=desc, weight=1.6, + confidence=conf, description=desc, weight=2.4, ) def _compute_adx(self, df: pd.DataFrame, result: TechnicalAnalysis):