diff --git a/signal_aggregator.py b/signal_aggregator.py index 7e6d24f..6f14bb0 100755 --- a/signal_aggregator.py +++ b/signal_aggregator.py @@ -704,6 +704,7 @@ class SignalAggregator: or (report.final_signal == SignalStrength.NEUTRAL and report.final_score < 0) ) if (self.config.xau_strategy.enabled + and report.display_name == "XAU/USD" and xau_is_sell_dir and report.signal_quality not in self.config.xau_strategy.sell_min_quality): report.warnings.append( @@ -734,6 +735,7 @@ class SignalAggregator: # Shorts in quiet markets fade against gold's macro uptrend; # only take sells when volatility regime confirms real selling. if (self.config.xau_strategy.enabled + and report.display_name == "XAU/USD" and xau_is_sell_dir and report.signal_quality in ("A+", "A", "B", "C") and report.volatility_regime @@ -744,12 +746,16 @@ class SignalAggregator: report.signal_quality = "D" report.trade_setup = None - # ── 6h. M5 noise gate ──────────────────────────────────── - if self.config.primary_timeframe == Timeframe.M5: + # ── 6h. M5 noise gate (gold-tuned thresholds — XAU only) ── + if (self.config.primary_timeframe == Timeframe.M5 + and report.display_name == "XAU/USD"): self._apply_m5_filters(report) # ── 7. Trade setup for actionable signals ────────────────── - if report.trade_setup is None and report.signal_quality in ("A+", "A"): + # ATR generator is XAU-only: it hardcodes gold pip value and + # 2-decimal price rounding. + if (report.trade_setup is None and report.signal_quality in ("A+", "A") + and report.display_name == "XAU/USD"): atr = (report.primary_analysis.key_levels.get("atr", 0) if report.primary_analysis else 0) if atr > 0: @@ -765,6 +771,7 @@ class SignalAggregator: # trend-continuation pullback (retrace to EMA21/KC-mid). Runs # after reasons so its marker lands at reasons[0] for tagging. if (self.config.primary_timeframe == Timeframe.M5 + and report.display_name == "XAU/USD" and self.config.xau_strategy.m5_pullback_enabled and report.trade_setup is None and report.signal_quality != "F"):