diff --git a/signal_aggregator.py b/signal_aggregator.py index 99b1d1c..d08f99e 100755 --- a/signal_aggregator.py +++ b/signal_aggregator.py @@ -867,6 +867,8 @@ class SignalAggregator: is_buy = report.final_score >= 0 levels = report.primary_analysis.key_levels min_rr = self.config.signals.min_rr_ratio + tf = self.config.signals.tp_tightening_factor + pre_tight_min_rr = min_rr / tf if tf > 0 else min_rr mature_move = abs(report.final_score) > 30 tp_mult = 1.0 if mature_move else 1.5 @@ -896,14 +898,14 @@ class SignalAggregator: ) if (swing_highs and swing_highs[0] - price <= atr * tp_swing_cap - and swing_highs[0] - price >= sl_distance * min_rr): + and swing_highs[0] - price >= sl_distance * pre_tight_min_rr): tp1 = swing_highs[0] else: - tp1 = price + max(atr * tp_mult, sl_distance * min_rr) + tp1 = price + max(atr * tp_mult, sl_distance * pre_tight_min_rr) if len(swing_highs) >= 2 and swing_highs[1] - price <= atr * 5.0: tp2 = swing_highs[1] else: - tp2 = price + max(atr * (tp_mult + 1.5), sl_distance * min_rr * 1.5) + tp2 = price + max(atr * (tp_mult + 1.5), sl_distance * pre_tight_min_rr * 1.5) direction = "BUY" entry, sl = price, sl_price @@ -927,14 +929,14 @@ class SignalAggregator: ) if (swing_lows and price - swing_lows[0] <= atr * tp_swing_cap - and price - swing_lows[0] >= sl_distance * min_rr): + and price - swing_lows[0] >= sl_distance * pre_tight_min_rr): tp1 = swing_lows[0] else: - tp1 = price - max(atr * tp_mult, sl_distance * min_rr) + tp1 = price - max(atr * tp_mult, sl_distance * pre_tight_min_rr) if len(swing_lows) >= 2 and price - swing_lows[1] <= atr * 5.0: tp2 = swing_lows[1] else: - tp2 = price - max(atr * (tp_mult + 1.5), sl_distance * min_rr * 1.5) + tp2 = price - max(atr * (tp_mult + 1.5), sl_distance * pre_tight_min_rr * 1.5) direction = "SELL" entry, sl = price, sl_price