diff --git a/trading_system/binance_client.py b/trading_system/binance_client.py index 4a1344a..0430f57 100644 --- a/trading_system/binance_client.py +++ b/trading_system/binance_client.py @@ -628,6 +628,47 @@ class BinanceClient: logger.warning(f" 需要增加数量或提高仓位大小") return None + # 检查最小保证金要求(避免手续费侵蚀收益) + # 获取当前杠杆(如果无法获取,使用默认值) + current_leverage = config.TRADING_CONFIG.get('LEVERAGE', 10) + try: + # 尝试从持仓信息获取实际使用的杠杆 + positions = await self.client.futures_position_information(symbol=symbol) + if positions and len(positions) > 0: + position = positions[0] + if float(position.get('positionAmt', 0)) != 0: + # 有持仓,使用持仓的杠杆 + leverage_bracket = position.get('leverage', current_leverage) + if leverage_bracket: + current_leverage = int(leverage_bracket) + except Exception as e: + logger.debug(f"无法获取 {symbol} 的杠杆信息,使用默认值: {current_leverage}x ({e})") + + min_margin_usdt = config.TRADING_CONFIG.get('MIN_MARGIN_USDT', 1.0) + required_margin = notional_value / current_leverage + + if required_margin < min_margin_usdt: + logger.warning( + f"❌ {symbol} 订单保证金不足: {required_margin:.4f} USDT < " + f"最小保证金要求: {min_margin_usdt:.2f} USDT" + ) + logger.warning( + f" 订单名义价值: {notional_value:.2f} USDT, " + f"杠杆: {current_leverage}x, " + f"保证金: {required_margin:.4f} USDT" + ) + logger.warning( + f" 需要的最小名义价值: {min_margin_usdt * current_leverage:.2f} USDT " + f"(最小保证金 {min_margin_usdt:.2f} USDT × 杠杆 {current_leverage}x)" + ) + logger.warning(f" 跳过此订单,避免手续费侵蚀收益") + return None + + logger.info( + f" 保证金检查通过: {required_margin:.4f} USDT >= " + f"最小要求: {min_margin_usdt:.2f} USDT (杠杆: {current_leverage}x)" + ) + # 构建订单参数 order_params = { 'symbol': symbol, diff --git a/trading_system/config.py b/trading_system/config.py index fbfb5a6..2b7219b 100644 --- a/trading_system/config.py +++ b/trading_system/config.py @@ -164,7 +164,7 @@ def _get_trading_config(): 'MAX_POSITION_PERCENT': 0.05, 'MAX_TOTAL_POSITION_PERCENT': 0.30, 'MIN_POSITION_PERCENT': 0.01, - 'MIN_MARGIN_USDT': 0.5, # 最小保证金要求(USDT),避免手续费侵蚀收益 + 'MIN_MARGIN_USDT': 1.0, # 最小保证金要求(USDT),避免手续费侵蚀收益(提高到1.0以确保有足够收益) 'MIN_CHANGE_PERCENT': 0.5, # 降低到0.5%以获取更多推荐(推荐系统可以更宽松) 'TOP_N_SYMBOLS': 50, # 每次扫描后处理的交易对数量(增加到50以获取更多推荐) 'MAX_SCAN_SYMBOLS': 500, # 扫描的最大交易对数量(0表示扫描所有) diff --git a/trading_system/risk_manager.py b/trading_system/risk_manager.py index 8add938..9d1931f 100644 --- a/trading_system/risk_manager.py +++ b/trading_system/risk_manager.py @@ -303,7 +303,7 @@ class RiskManager: position_value = required_quantity * current_price # 检查最小保证金要求(避免手续费侵蚀收益) - min_margin_usdt = self.config.get('MIN_MARGIN_USDT', 0.5) # 默认0.5 USDT + min_margin_usdt = self.config.get('MIN_MARGIN_USDT', 1.0) # 默认1.0 USDT(提高到1.0以确保有足够收益) # 使用传入的实际杠杆,如果没有传入则使用配置的基础杠杆 actual_leverage = leverage if leverage is not None else self.config.get('LEVERAGE', 10)