diff --git a/trading_system/risk_manager.py b/trading_system/risk_manager.py index b863765..3a52ed1 100644 --- a/trading_system/risk_manager.py +++ b/trading_system/risk_manager.py @@ -1173,6 +1173,27 @@ class RiskManager: final_stop_loss_amount = (final_stop_loss - entry_price) * quantity final_stop_loss_pct_margin = (final_stop_loss_amount / margin * 100) if margin > 0 else 0 + # ⚠️ 最终安全检查:确保止损价不等于入场价,且方向正确 + # 如果计算出的止损价无效(例如配置为0导致等于入场价),强制使用最小安全距离 + default_min_dist = 0.005 # 默认0.5% + + if side == 'BUY': + if final_stop_loss >= entry_price: + safe_sl = entry_price * (1 - default_min_dist) + logger.warning( + f"⚠️ 计算的止损价({final_stop_loss:.4f}) >= 入场价({entry_price:.4f}) 无效 (BUY)," + f"强制调整为安全止损价: {safe_sl:.4f} (-0.5%)" + ) + final_stop_loss = safe_sl + else: # SELL + if final_stop_loss <= entry_price: + safe_sl = entry_price * (1 + default_min_dist) + logger.warning( + f"⚠️ 计算的止损价({final_stop_loss:.4f}) <= 入场价({entry_price:.4f}) 无效 (SELL)," + f"强制调整为安全止损价: {safe_sl:.4f} (+0.5%)" + ) + final_stop_loss = safe_sl + logger.info( f"最终止损 ({side}): {final_stop_loss:.4f} (使用{selected_method}), " + (f"ATR={stop_loss_price_atr:.4f}, " if stop_loss_price_atr else "")