Round-2 weight optimisation — reduce EMA trend, boost stochastic
GPU sweep (36 combos, RTX 4070 SUPER) on H4 2022-2026 relative to the round-1 baseline revealed EMA trend was over-weighted at 3.6. Halving it and nudging stochastic up yields cleaner, higher-quality signals. Weight changes (backtest_gpu.py _BASE_W + engine.py): ema_trend: 3.6 -> 1.8 (over-weighted; halving tightens signal filter) stochastic: 1.6 -> 2.4 (x1.5; improved WR to 40.4% in sweep) macd: 3.3 (unchanged — dominant signal, kept as anchor) adx/ichimoku/rsi/bollinger: unchanged Combined result vs round-1 (H4 local data 2022-2026): Trades: 160 -> 73 (-87 — filters out marginal setups) Win Rate: 38.1% -> 43.8% (+5.7pp) Profit Factor: 1.19 -> 1.52 Return: +21.30% -> +23.86% (+2.57pp) Max DD: -8.52% -> -9.32% Sharpe: 0.47 -> 0.71 (+51%) Sortino: 1.91 -> 3.06 (+60%) Fewer trades at much higher quality. The lower EMA weight means only strong, multi-indicator confluences clear the grade threshold — the 73 remaining trades have 43.8% WR vs 38.1% and expectancy nearly 3x.
This commit is contained in:
+12
-10
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user