1
This commit is contained in:
parent
1830444ef0
commit
19371a8e60
|
|
@ -765,10 +765,10 @@ class BinanceClient:
|
|||
Returns:
|
||||
持仓列表
|
||||
"""
|
||||
retries = 5
|
||||
retries = 7
|
||||
last_error = None
|
||||
|
||||
read_timeout = getattr(config, 'READ_ONLY_REQUEST_TIMEOUT', 45)
|
||||
read_timeout = getattr(config, 'READ_ONLY_REQUEST_TIMEOUT', 60)
|
||||
for attempt in range(retries):
|
||||
try:
|
||||
# 增加 recvWindow 以避免 -1021 错误;仅此只读接口用较长超时,不影响下单类接口
|
||||
|
|
@ -815,9 +815,11 @@ class BinanceClient:
|
|||
logger.warning(f"获取持仓信息失败 (第 {attempt + 1}/{retries} 次): {_format_exception(e)},{wait}秒后重试...")
|
||||
await asyncio.sleep(wait)
|
||||
continue
|
||||
|
||||
logger.error(f"获取持仓信息失败: {_format_exception(e)}")
|
||||
return []
|
||||
# 最后一次仍失败,不在此处打 ERROR,交给循环外统一打「已重试 N 次」
|
||||
else:
|
||||
logger.error(f"获取持仓信息失败: {_format_exception(e)}")
|
||||
return []
|
||||
# 网络类错误且最后一次:跳出循环,由下方统一打日志并返回 []
|
||||
except Exception as e:
|
||||
logger.error(f"获取持仓信息失败: {_format_exception(e)}")
|
||||
return []
|
||||
|
|
@ -838,15 +840,19 @@ class BinanceClient:
|
|||
Returns:
|
||||
成交记录列表
|
||||
"""
|
||||
retries = 3
|
||||
read_timeout = getattr(config, 'READ_ONLY_REQUEST_TIMEOUT', 45)
|
||||
retries = 5
|
||||
last_error = None
|
||||
attempts_made = 0
|
||||
read_timeout = getattr(config, 'READ_ONLY_REQUEST_TIMEOUT', 60)
|
||||
for attempt in range(retries):
|
||||
attempts_made = attempt + 1
|
||||
try:
|
||||
return await asyncio.wait_for(
|
||||
self.client.futures_account_trades(symbol=symbol, limit=limit, recvWindow=20000),
|
||||
timeout=read_timeout
|
||||
)
|
||||
except (asyncio.TimeoutError, BinanceAPIException) as e:
|
||||
last_error = e
|
||||
is_retryable = isinstance(e, asyncio.TimeoutError) or (
|
||||
isinstance(e, BinanceAPIException) and (e.code == -1021 or str(e.code).startswith('5'))
|
||||
)
|
||||
|
|
@ -854,11 +860,12 @@ class BinanceClient:
|
|||
logger.warning(f"获取成交记录失败 {symbol} (第 {attempt + 1}/{retries} 次): {_format_exception(e)},1秒后重试...")
|
||||
await asyncio.sleep(1)
|
||||
continue
|
||||
logger.error(f"获取成交记录失败 {symbol}: {_format_exception(e)}")
|
||||
return []
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"获取成交记录失败 {symbol}: {_format_exception(e)}")
|
||||
return []
|
||||
if last_error:
|
||||
logger.error(f"获取成交记录失败 {symbol} (已重试 {attempts_made} 次): {_format_exception(last_error)}")
|
||||
return []
|
||||
|
||||
async def get_symbol_info(self, symbol: str) -> Optional[Dict]:
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ def reload_config():
|
|||
CONNECTION_TIMEOUT = int(os.getenv('CONNECTION_TIMEOUT', '30')) # 连接超时时间(秒)
|
||||
CONNECTION_RETRIES = int(os.getenv('CONNECTION_RETRIES', '3')) # 连接重试次数
|
||||
# 仅用于 get_open_positions / get_recent_trades 等只读接口的单次等待时间,不影响下单/止损止盈的快速失败
|
||||
READ_ONLY_REQUEST_TIMEOUT = int(os.getenv('READ_ONLY_REQUEST_TIMEOUT', '45'))
|
||||
READ_ONLY_REQUEST_TIMEOUT = int(os.getenv('READ_ONLY_REQUEST_TIMEOUT', '60'))
|
||||
|
||||
# Redis 缓存配置(优先从数据库,回退到环境变量和默认值)
|
||||
REDIS_URL = _get_config_value('REDIS_URL', os.getenv('REDIS_URL', 'redis://localhost:6379'))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user