Add M5 pullback entry archetype (XAU_PB): +140R combined on 12mo
Second entry pattern alongside the Keltner-breakout: enter on the retrace to EMA21/KC-mid in an established trend (EMA >=3/4 aligned, ADX>=20, retrace 0.8-6.0 ATR, resumption bar closed back in trend direction, RSI in the pullback zone not the extended zone). Detector lives in the aggregator so live and GPU-backtest paths share one implementation. Own gates (composite floor 15, confirmation-TF agreement, MTF opposition, vol regimes) with a diagnostic funnel. PB stops anchor to the pullback swing (~$8 vs ~$25 breakout), so PB trades get their own trail arm (0.8R vs 0.6R global) via per-trade trail overrides in the backtester and strategy-aware Telegram alerts. 12mo M5 validation: PB alone +38.3R/254 trades, positive both halves and all four full quarters; core breakout trades undisturbed (+101.9R vs +105.0 baseline). Combined book: 549 trades (~10.6/wk), +140.1R, PF 1.78, DD 11.3R vs 311 trades/+105.0R before. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -148,6 +148,11 @@ class SignalConfig:
|
||||
# Set trail_arm_r = 0 to disable and exit at TP1 as before.
|
||||
trail_arm_r: float = 0.6
|
||||
trail_dist_r: float = 0.75
|
||||
# Pullback (XAU_PB) trades run tighter stops (~$8 vs ~$25), so the
|
||||
# global 0.6R arm fires on noise. Arm later; whole 0.8-arm row of
|
||||
# the grid is +35-38R vs +32R at global params (balanced halves).
|
||||
pb_trail_arm_r: float = 0.8
|
||||
pb_trail_dist_r: float = 0.75
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -213,6 +218,28 @@ class XauStrategyConfig:
|
||||
# halves of 6mo and 12mo backtests).
|
||||
m5_sell_min_rsi: float = 25.0
|
||||
|
||||
# ── M5 pullback entry (XAU_PB — see PULLBACK_ENTRY_PLAN.txt) ──
|
||||
# Second entry archetype: enter on the retrace to EMA21/KC-mid in
|
||||
# an established trend instead of at Keltner-breakout extension.
|
||||
# Validated 2026-07: +38.3R/254 trades on 12mo, positive both
|
||||
# halves and all four full quarters, core trades undisturbed.
|
||||
m5_pullback_enabled: bool = True
|
||||
# Composite score is weaker mid-pullback BY DESIGN (price sits
|
||||
# below the momentum bands) — separate, lower floor than Gate 1.
|
||||
m5_pullback_min_score: float = 15.0
|
||||
m5_pullback_adx_min: float = 20.0
|
||||
# RSI must be in the pullback zone, NOT the extended zone the
|
||||
# breakout entries fire in (those run 65-80).
|
||||
m5_pullback_rsi_buy: tuple = (35.0, 62.0)
|
||||
m5_pullback_rsi_sell: tuple = (38.0, 65.0)
|
||||
# Retrace depth from the pre-pullback swing extreme, in ATRs.
|
||||
# Shallower = still extended; deeper = trend likely broken.
|
||||
# M5 gold trend legs measure 3-4 ATR swing-to-trough (median 3.9),
|
||||
# so the ceiling sits well above that of higher TFs.
|
||||
m5_pullback_retrace_atr: tuple = (0.8, 6.0)
|
||||
# Price must have touched EMA21/KC-mid within this many bars.
|
||||
m5_pullback_touch_bars: int = 3
|
||||
|
||||
|
||||
@dataclass
|
||||
class FilterConfig:
|
||||
|
||||
Reference in New Issue
Block a user