Tune EUR/USD trade setup: quality-scaled TP and tighter SL
EUR/USD A-grade signals had inverted quality curve (-1.65R) because all trades got RR≈0.50 and mature_move logic penalized high-score entries. Fix: add per-pair trade setup params (sl_atr_floor=1.2, min_rr=1.0, mature_move_threshold=35) and apply quality_scale to both tp_mult and min_rr so A-grade gets wider TP targets. Also wire EUR config into backtest via PAIR_PRODUCERS registry. Result: A-grade now +1.24R (was -1.65R), total EUR/USD +10.06R (was +4.20R). XAU/USD unchanged at +13.01R. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+17
-7
@@ -859,15 +859,25 @@ class SignalAggregator:
|
||||
else:
|
||||
is_buy = report.final_score >= 0
|
||||
levels = report.primary_analysis.key_levels
|
||||
min_rr = self.config.signals.min_rr_ratio
|
||||
|
||||
mature_move = abs(report.final_score) > 30
|
||||
tp_mult = 1.0 if mature_move else 1.5
|
||||
tp_swing_cap = 2.0 if mature_move else 2.5
|
||||
_is_eur = report.display_name == "EUR/USD" and self.config.eur_strategy.enabled
|
||||
|
||||
# Fix 3: Wider SL multiplier for XAU/USD (1.8x vs default 1.5x)
|
||||
sl_atr_floor = (self.config.xau_strategy.v2_sl_atr_multiplier
|
||||
if report.display_name == "XAU/USD" else 1.5)
|
||||
if _is_eur:
|
||||
eur = self.config.eur_strategy
|
||||
q_scale = eur.tp_quality_scale.get(report.signal_quality, 1.0)
|
||||
min_rr = eur.min_rr_ratio * q_scale
|
||||
mature_move = abs(report.final_score) > eur.mature_move_threshold
|
||||
base_tp = eur.tp_atr_multiplier if mature_move else eur.tp_atr_multiplier * 1.5
|
||||
tp_mult = base_tp * q_scale
|
||||
tp_swing_cap = (2.0 if mature_move else 2.5) * q_scale
|
||||
sl_atr_floor = eur.sl_atr_floor
|
||||
else:
|
||||
min_rr = self.config.signals.min_rr_ratio
|
||||
mature_move = abs(report.final_score) > 30
|
||||
tp_mult = 1.0 if mature_move else 1.5
|
||||
tp_swing_cap = 2.0 if mature_move else 2.5
|
||||
sl_atr_floor = (self.config.xau_strategy.v2_sl_atr_multiplier
|
||||
if report.display_name == "XAU/USD" else 1.5)
|
||||
|
||||
if is_buy:
|
||||
swing_lows = sorted(
|
||||
|
||||
Reference in New Issue
Block a user