xauusd M15: halve the RSI regime multiplier in every regime (M15 override 5, rule-1 validated)

Owner-approved 2026-09-09 after the pre-registered weight test
(backtest/research/weight_test_2026-09-09.md). M15-only
technical.regime_weights_override = the shipped table with rsi x 0.5
(0.5 trending family / 0.75 ranging / 0.5 transitioning), derived in the
factory and pinned literally by the Module 9 equivalence test; a Module 33
test locks that M5/H1/H4 carry no override.

Evidence, 2-year Oanda window 2024-09-05..2026-09-05 at $0.65: 793/+117.62R
PF 1.41 -> 931/+146.14R PF 1.43 (fixed halves +27.9/+0.6R vs control); OOS
2024-06-01..2025-03-30 300/+40.59R PF 1.38 -> 355/+60.67R PF 1.49; 3-year
+151.90R -> +186.61R (max DD 15.5 -> 19.3R, 2026 -4R). Parity: the factory
run with no --set flag reproduces the validated candidate books byte-for-
byte (2-yr MD5 d185f099..., OOS 6f8f24b4...). M15 canonical book re-pinned
to backtest/oanda_m15_2yr_065_20260909.csv. Docs carry a one-line note.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nc9Ninzyi18QkWezrxeBvB
This commit is contained in:
Harwinder Sekhon
2026-09-09 17:36:41 -04:00
parent f6c7635c59
commit 2ac73017b8
6 changed files with 115 additions and 7 deletions
+60
View File
@@ -2078,6 +2078,35 @@ def _():
inline_cfg.xau_strategy.sell_blocked_hours_utc = [15, 17]
inline_cfg.signals.trail_arm_r = 0.70
inline_cfg.signals.trail_dist_r = 0.75
# M15 override 5 (2026-09-09): RSI x 0.5 in every regime —
# LITERAL so a silent default-table change fails loudly here.
inline_cfg.technical.regime_weights_override = {
"trending_up": {
"ema_trend": 2.0, "rsi": 0.5, "macd": 2.0,
"bollinger": 0.5, "keltner": 1.5, "roc": 1.5,
"candlestick": 0.8, "divergence": 1.0, "adx": 0.8,
},
"trending_down": {
"ema_trend": 2.0, "rsi": 0.5, "macd": 2.0,
"bollinger": 0.5, "keltner": 1.5, "roc": 1.5,
"candlestick": 0.8, "divergence": 1.0, "adx": 0.8,
},
"trending": {
"ema_trend": 2.0, "rsi": 0.5, "macd": 2.0,
"bollinger": 0.5, "keltner": 1.5, "roc": 1.5,
"candlestick": 0.8, "divergence": 1.0, "adx": 0.8,
},
"ranging": {
"ema_trend": 0.3, "rsi": 0.75, "macd": 1.5,
"bollinger": 1.5, "keltner": 2.0, "roc": 0.5,
"candlestick": 1.0, "divergence": 2.5, "adx": 0.5,
},
"transitioning": {
"ema_trend": 1.5, "rsi": 0.5, "macd": 2.5,
"bollinger": 1.0, "keltner": 2.5, "roc": 2.0,
"candlestick": 1.0, "divergence": 2.0, "adx": 1.0,
},
}
if tf == Timeframe.M5:
# Documented per-TF overrides (see xauusd.py docstring):
# hour 9 UTC blocked, hour 21 UNBLOCKED (2026-07-30
@@ -11861,6 +11890,37 @@ def _():
"the GPU engine must inherit the live composite, never shadow it"
@test("replay record follow-up: M15 factory halves RSI in every regime, other TFs carry no override")
def _():
# M15 override 5 (validated 2026-09-09): the M15 factory ships a
# regime_weights_override that is the shipped table with the RSI
# multiplier halved everywhere and every other cell untouched.
import engine as _eng
from pair_signals import PAIR_PRODUCERS
default = _eng.regime_weight_table(TechnicalConfig())
m15 = PAIR_PRODUCERS[XAUUSD](Timeframe.M15, [Timeframe.M5, Timeframe.H1])
override = m15.technical.regime_weights_override
assert set(override) == set(default), \
f"M15 override must cover exactly the shipped regimes: {sorted(override)}"
for regime, weights in default.items():
got = override[regime]
assert set(got) == set(weights), \
f"{regime}: indicator set changed: {sorted(got)}"
for name, mult in weights.items():
want = mult * 0.5 if name == "rsi" else mult
assert got[name] == want, \
f"{regime}.{name}: {got[name]} != {want} (default {mult})"
# The engine really runs with it (regime_weight_table prefers the override).
assert _eng.regime_weight_table(m15.technical) == override
# ...and it is M15-only — same per-TF pattern as every other override.
for tf, ctfs in [(Timeframe.M5, [Timeframe.M15, Timeframe.H1]),
(Timeframe.H1, [Timeframe.M15, Timeframe.H4]),
(Timeframe.H4, [Timeframe.H1, Timeframe.D1])]:
cfg = PAIR_PRODUCERS[XAUUSD](tf, ctfs)
assert cfg.technical.regime_weights_override == {}, \
f"{tf} must carry no regime weight override"
# ══════════════════════════════════════════════════════════════════════
# SUMMARY
# ══════════════════════════════════════════════════════════════════════