1
This commit is contained in:
parent
79fb20bf41
commit
7e62247217
|
|
@ -960,6 +960,39 @@ class RiskManager:
|
||||||
f"但予以保留(风险已通过仓位控制)"
|
f"但予以保留(风险已通过仓位控制)"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ⚠️ 最终强制检查:最小止损距离(防止 -2021 Order would immediately trigger)
|
||||||
|
# 此检查必须在最后执行,覆盖之前的逻辑,因为这是交易所/系统的硬性约束
|
||||||
|
if stop_loss_price_price is not None:
|
||||||
|
adjusted = False
|
||||||
|
if side == 'BUY':
|
||||||
|
# 做多:止损价必须足够低 (SL <= Entry * (1 - MinDist))
|
||||||
|
if final_stop_loss > stop_loss_price_price:
|
||||||
|
logger.warning(
|
||||||
|
f"⚠️ 止损价({final_stop_loss:.4f})离入场价太近,"
|
||||||
|
f"强制调整为最小距离止损价({stop_loss_price_price:.4f})"
|
||||||
|
)
|
||||||
|
final_stop_loss = stop_loss_price_price
|
||||||
|
selected_method = '最小距离(强制)'
|
||||||
|
adjusted = True
|
||||||
|
else:
|
||||||
|
# 做空:止损价必须足够高 (SL >= Entry * (1 + MinDist))
|
||||||
|
if final_stop_loss < stop_loss_price_price:
|
||||||
|
logger.warning(
|
||||||
|
f"⚠️ 止损价({final_stop_loss:.4f})离入场价太近,"
|
||||||
|
f"强制调整为最小距离止损价({stop_loss_price_price:.4f})"
|
||||||
|
)
|
||||||
|
final_stop_loss = stop_loss_price_price
|
||||||
|
selected_method = '最小距离(强制)'
|
||||||
|
adjusted = True
|
||||||
|
|
||||||
|
if adjusted:
|
||||||
|
# 重新计算保证金百分比用于日志
|
||||||
|
if side == 'BUY':
|
||||||
|
final_stop_loss_amount = (entry_price - final_stop_loss) * quantity
|
||||||
|
else:
|
||||||
|
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
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"最终止损 ({side}): {final_stop_loss:.4f} (使用{selected_method}), "
|
f"最终止损 ({side}): {final_stop_loss:.4f} (使用{selected_method}), "
|
||||||
+ (f"ATR={stop_loss_price_atr:.4f}, " if stop_loss_price_atr else "")
|
+ (f"ATR={stop_loss_price_atr:.4f}, " if stop_loss_price_atr else "")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user