From 833f8096d7854dc7fef15197fc8cfbc39a9d5c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Tue, 3 Feb 2026 16:21:07 +0800 Subject: [PATCH] 1 --- trading_system/risk_manager.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/trading_system/risk_manager.py b/trading_system/risk_manager.py index 6adeb1e..2bf6416 100644 --- a/trading_system/risk_manager.py +++ b/trading_system/risk_manager.py @@ -841,8 +841,13 @@ 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 - # 如果最终止损价对应的保证金百分比超过配置值,强制使用保证金止损 - if final_stop_loss_pct_margin > (stop_loss_percent * 100): + # ⚠️ 优化:如果使用的是ATR止损或技术止损,允许突破配置的保证金百分比限制 + # 因为仓位大小已经根据风险进行了调整,所以即使单笔亏损比例大(如80%保证金),总亏损金额仍受控 + # 只有在使用默认保证金止损策略时,才强制执行限制 + is_atr_or_tech = selected_method in ['ATR', '技术分析'] + + # 如果最终止损价对应的保证金百分比超过配置值,且不是ATR/技术止损,则强制使用保证金止损 + if final_stop_loss_pct_margin > (stop_loss_percent * 100) and not is_atr_or_tech: logger.warning( f"⚠️ 最终止损价({final_stop_loss:.4f}, 使用{selected_method})对应的保证金百分比({final_stop_loss_pct_margin:.2f}%) " f"超过配置值({stop_loss_percent*100:.1f}%),强制使用保证金止损({stop_loss_price_margin:.4f})" @@ -850,6 +855,12 @@ class RiskManager: final_stop_loss = stop_loss_price_margin selected_method = '保证金(强制)' final_stop_loss_pct_margin = stop_loss_percent * 100 + elif final_stop_loss_pct_margin > (stop_loss_percent * 100) and is_atr_or_tech: + logger.info( + f"ℹ️ {selected_method}止损 ({final_stop_loss:.4f}) 超过保证金配置值 " + f"({final_stop_loss_pct_margin:.2f}% > {stop_loss_percent*100:.1f}%)," + f"但予以保留(风险已通过仓位控制)" + ) logger.info( f"最终止损 ({side}): {final_stop_loss:.4f} (使用{selected_method}), "