This commit is contained in:
薇薇安 2026-02-13 18:47:39 +08:00
parent d4fa954682
commit be1349c1fc

View File

@ -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 "")