feat(binance_client, position_manager): 增强杠杆设置与异常处理逻辑
在 `binance_client.py` 中为杠杆设置添加了网络超时重试机制,确保在请求超时的情况下能够自动重试,提升了系统的稳定性。同时,在 `position_manager.py` 中优化了临时持仓记录的错误日志,增加了异常信息的详细记录,便于后续调试与问题追踪。这些改进增强了系统的可靠性与可维护性。
This commit is contained in:
parent
b588d5b82b
commit
3bfbafbab2
|
|
@ -2641,32 +2641,38 @@ class BinanceClient:
|
|||
# 必须确保序列中的值小于 target_leverage
|
||||
fallback_levels = [50, 20, 10, 5, 3, 2, 1]
|
||||
|
||||
# 第一次尝试:目标杠杆
|
||||
try:
|
||||
await self.client.futures_change_leverage(symbol=symbol, leverage=target_leverage)
|
||||
logger.info(f"设置杠杆成功: {symbol} {target_leverage}x")
|
||||
return target_leverage
|
||||
except BinanceAPIException as e:
|
||||
error_msg = str(e).lower()
|
||||
logger.warning(f"设置杠杆 {target_leverage}x 失败: {e},尝试降低杠杆...")
|
||||
|
||||
# 如果是 leverage 相关错误,尝试降级
|
||||
if 'leverage' in error_msg or 'invalid' in error_msg or 'max' in error_msg:
|
||||
for fallback in fallback_levels:
|
||||
if fallback >= target_leverage:
|
||||
continue
|
||||
|
||||
try:
|
||||
await self.client.futures_change_leverage(symbol=symbol, leverage=fallback)
|
||||
logger.warning(
|
||||
f"{symbol} 杠杆降级成功: {target_leverage}x -> {fallback}x"
|
||||
)
|
||||
return fallback
|
||||
except BinanceAPIException:
|
||||
continue
|
||||
|
||||
logger.error(f"设置杠杆最终失败: {symbol} (目标: {target_leverage}x)")
|
||||
return 0
|
||||
# 第一次尝试:目标杠杆(网络超时重试 2 次)
|
||||
for attempt in range(3):
|
||||
try:
|
||||
await self.client.futures_change_leverage(symbol=symbol, leverage=target_leverage)
|
||||
logger.info(f"设置杠杆成功: {symbol} {target_leverage}x")
|
||||
return target_leverage
|
||||
except (TimeoutError, asyncio.TimeoutError):
|
||||
if attempt < 2:
|
||||
wait_sec = (attempt + 1) * 3
|
||||
logger.warning(f"设置杠杆请求超时 ({symbol} {target_leverage}x),{wait_sec} 秒后重试 ({attempt + 1}/2)")
|
||||
await asyncio.sleep(wait_sec)
|
||||
else:
|
||||
logger.error(f"设置杠杆请求超时 ({symbol} {target_leverage}x),已重试 2 次仍失败")
|
||||
return 0
|
||||
except BinanceAPIException as e:
|
||||
error_msg = str(e).lower()
|
||||
logger.warning(f"设置杠杆 {target_leverage}x 失败: {e},尝试降低杠杆...")
|
||||
# 如果是 leverage 相关错误,尝试降级
|
||||
if 'leverage' in error_msg or 'invalid' in error_msg or 'max' in error_msg:
|
||||
for fallback in fallback_levels:
|
||||
if fallback >= target_leverage:
|
||||
continue
|
||||
try:
|
||||
await self.client.futures_change_leverage(symbol=symbol, leverage=fallback)
|
||||
logger.warning(
|
||||
f"{symbol} 杠杆降级成功: {target_leverage}x -> {fallback}x"
|
||||
)
|
||||
return fallback
|
||||
except (TimeoutError, asyncio.TimeoutError, BinanceAPIException):
|
||||
continue
|
||||
logger.error(f"设置杠杆最终失败: {symbol} (目标: {target_leverage}x)")
|
||||
return 0
|
||||
|
||||
def get_realtime_price(self, symbol: str) -> Optional[float]:
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -3609,7 +3609,11 @@ class PositionManager:
|
|||
except Exception as e:
|
||||
logger.warning(f"{symbol} 补挂币安止盈止损失败(不影响监控): {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"[账号{self.account_id}] {symbol} 创建临时持仓记录失败: {e}")
|
||||
err_msg = str(e) or repr(e) or type(e).__name__
|
||||
logger.error(
|
||||
f"[账号{self.account_id}] {symbol} 创建临时持仓记录失败: {err_msg}",
|
||||
exc_info=True,
|
||||
)
|
||||
else:
|
||||
# 已在 active_positions 的持仓:启动前统一补挂/修正交易所 SL/TP(识别缺止盈、止损过远等异常并替换)
|
||||
position_info = self.active_positions.get(symbol)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user