1
This commit is contained in:
parent
2b5906ca6d
commit
ab8023139f
|
|
@ -1600,17 +1600,37 @@ class BinanceClient:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self.client.futures_cancel_order(symbol=symbol, orderId=order_id)
|
# 使用更大的 recvWindow,降低在网络抖动时触发 -1021 的概率
|
||||||
|
await self.client.futures_cancel_order(symbol=symbol, orderId=order_id, recvWindow=20000)
|
||||||
logger.info(f"取消订单成功: {symbol} {order_id}")
|
logger.info(f"取消订单成功: {symbol} {order_id}")
|
||||||
return True
|
return True
|
||||||
except BinanceAPIException as e:
|
except BinanceAPIException as e:
|
||||||
# -2011 Unknown order sent:订单可能已成交/已撤销/已过期,这是典型幂等场景
|
|
||||||
# 取消操作应视为“已达成目标”(不再继续报错刷屏)
|
|
||||||
code = getattr(e, "code", None)
|
code = getattr(e, "code", None)
|
||||||
msg = str(e)
|
msg = str(e)
|
||||||
|
# -2011 Unknown order sent:订单可能已成交/已撤销/已过期,这是典型幂等场景
|
||||||
if code == -2011 or "code=-2011" in msg or "Unknown order sent" in msg:
|
if code == -2011 or "code=-2011" in msg or "Unknown order sent" in msg:
|
||||||
logger.info(f"取消订单幂等成功(订单可能已不存在): {symbol} {order_id} | {e}")
|
logger.info(f"取消订单幂等成功(订单可能已不存在): {symbol} {order_id} | {e}")
|
||||||
return True
|
return True
|
||||||
|
# -1021 时间戳不在 recvWindow 内:尝试同步服务器时间并重试一次
|
||||||
|
if code == -1021 or "code=-1021" in msg or "Timestamp for this request is outside of the recvWindow" in msg:
|
||||||
|
logger.warning(f"取消订单触发 -1021 时间戳错误,尝试同步服务器时间并重试一次: {symbol} {order_id} | {e}")
|
||||||
|
try:
|
||||||
|
# 触发一次与服务器对时,让 python-binance 更新内部时间偏差
|
||||||
|
await self.client.get_server_time()
|
||||||
|
except Exception as sync_e:
|
||||||
|
logger.debug(f"同步币安服务器时间失败(可忽略,继续重试取消): {sync_e}")
|
||||||
|
try:
|
||||||
|
await self.client.futures_cancel_order(symbol=symbol, orderId=order_id, recvWindow=20000)
|
||||||
|
logger.info(f"取消订单重试成功: {symbol} {order_id}")
|
||||||
|
return True
|
||||||
|
except BinanceAPIException as e2:
|
||||||
|
code2 = getattr(e2, "code", None)
|
||||||
|
msg2 = str(e2)
|
||||||
|
if code2 == -2011 or "code=-2011" in msg2 or "Unknown order sent" in msg2:
|
||||||
|
logger.info(f"取消订单幂等成功(重试后订单可能已不存在): {symbol} {order_id} | {e2}")
|
||||||
|
return True
|
||||||
|
logger.error(f"取消订单失败(重试后仍错误): {symbol} {order_id} | {e2}")
|
||||||
|
return False
|
||||||
logger.error(f"取消订单失败: {e}")
|
logger.error(f"取消订单失败: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user