111,112d110
<     # Вход только если цена уже вернулась близко к EMA (качественный откат)
<     # ema_dist_max_pct=0.5 → цена не выше EMA+0.5% (LONG) / не ниже EMA-0.5% (SHORT)
143,160c141,146
< 
<     # Отсекаем сигналы с аномально широким SL
<     max_sl_pct = cfg.get('max_sl_pct', 0)
<     if max_sl_pct and sl_pct > max_sl_pct:
<         return None
< 
<     # TP и SL используют один и тот же sl_pct → реальный RR = rr (2.5)
<     if direction == 'LONG':
<         sl = current_price * (1 - sl_pct / 100)
<         tp = current_price * (1 + sl_pct / 100 * rr)
<     else:
<         sl = current_price * (1 + sl_pct / 100)
<         tp = current_price * (1 - sl_pct / 100 * rr)
< 
<     # Санитарная проверка: TP должен быть положительным
<     if tp <= 0:
<         return None
< 
---
>         if direction == 'LONG':
>             sl = current_price * (1 - min_sl_pct / 100)
>             tp = current_price + rr * (current_price - sl)
>         else:
>             sl = current_price * (1 + min_sl_pct / 100)
>             tp = current_price - rr * (sl - current_price)
