diff --git a/trading_system/risk_manager.py b/trading_system/risk_manager.py index a12387a..4c3733d 100644 --- a/trading_system/risk_manager.py +++ b/trading_system/risk_manager.py @@ -256,16 +256,26 @@ class RiskManager: min_notional = 5.0 # 币安合约最小名义价值 if position_value < min_notional: logger.warning(f" ⚠ 仓位价值 {position_value:.2f} USDT < 最小名义价值 {min_notional:.2f} USDT") - # 尝试增加仓位价值到最小名义价值,但不超过最大仓位限制 - max_allowed_value = available_balance * max_position_percent - if min_notional <= max_allowed_value: + + # 计算需要的最小仓位比例来满足最小名义价值 + required_position_percent = min_notional / available_balance + logger.info(f" 需要的最小仓位比例: {required_position_percent*100:.2f}% (最小名义价值 {min_notional:.2f} USDT / 可用余额 {available_balance:.2f} USDT)") + + # 检查是否可以使用更大的仓位比例(但不超过最大仓位限制) + if required_position_percent <= max_position_percent: + # 可以使用更大的仓位比例来满足最小名义价值 + position_percent = required_position_percent position_value = min_notional - logger.info(f" ✓ 调整仓位价值到最小名义价值: {position_value:.2f} USDT") + logger.info(f" ✓ 调整仓位比例到 {position_percent*100:.2f}% 以满足最小名义价值: {position_value:.2f} USDT") else: + # 即使使用最大仓位比例也无法满足最小名义价值 + max_allowed_value = available_balance * max_position_percent logger.warning( f" ❌ 无法满足最小名义价值要求: " - f"需要 {min_notional:.2f} USDT,但最大允许 {max_allowed_value:.2f} USDT" + f"需要 {min_notional:.2f} USDT (仓位比例 {required_position_percent*100:.2f}%)," + f"但最大允许 {max_allowed_value:.2f} USDT (仓位比例 {max_position_percent*100:.1f}%)" ) + logger.warning(f" 💡 建议: 增加账户余额到至少 {min_notional / max_position_percent:.2f} USDT 才能满足最小名义价值要求") return None # 计算数量(考虑合约的最小数量精度)