diff --git a/trading_system/binance_client.py b/trading_system/binance_client.py index 26d5797..3aeabef 100644 --- a/trading_system/binance_client.py +++ b/trading_system/binance_client.py @@ -665,14 +665,22 @@ class BinanceClient: logger.info(f" 当前价格: {current_price:.4f} USDT") logger.info(f" 订单名义价值: {notional_value:.2f} USDT") logger.info(f" 最小名义价值: {min_notional:.2f} USDT") + logger.info(f" 平仓模式: {reduce_only}") # 检查名义价值是否满足最小要求 - if notional_value < min_notional: + # 注意:对于平仓操作(reduce_only=True),币安允许更小的名义价值,所以放宽检查 + # 但为了安全,仍然检查一个更小的阈值(0.1 USDT) + min_notional_for_order = 0.1 if reduce_only else min_notional + + if notional_value < min_notional_for_order: logger.warning( f"❌ {symbol} 订单名义价值不足: {notional_value:.2f} USDT < " - f"最小要求: {min_notional:.2f} USDT" + f"最小要求: {min_notional_for_order:.2f} USDT" ) - logger.warning(f" 需要增加数量或提高仓位大小") + if reduce_only: + logger.warning(f" 这是平仓订单,但名义价值仍然太小,无法执行") + else: + logger.warning(f" 需要增加数量或提高仓位大小") return None # 检查最小保证金要求(避免手续费侵蚀收益) @@ -694,7 +702,11 @@ class BinanceClient: min_margin_usdt = config.TRADING_CONFIG.get('MIN_MARGIN_USDT', 0.5) # 默认0.5 USDT required_margin = notional_value / current_leverage - if required_margin < min_margin_usdt: + # 对于平仓操作(reduce_only=True),跳过最小保证金检查 + # 因为这是关闭现有持仓,不应该因为保证金不足而拒绝平仓 + if reduce_only: + logger.info(f" 平仓操作:跳过最小保证金检查(名义价值: {notional_value:.2f} USDT)") + elif required_margin < min_margin_usdt: # 如果保证金不足,自动调整到最小保证金要求 required_notional_value = min_margin_usdt * current_leverage logger.warning(