2.7 KiB
2.7 KiB
币安 API -1003 限频/封禁说明
错误含义
- APIError(code=-1003):
Way too many requests; IP ... banned until 1771041059726 - 表示当前 IP 请求过于频繁,被临时封禁,直到指定时间戳(毫秒)后自动解除。
如何查看「还要等多久」
时间戳 1771041059726 是毫秒,表示封禁解除时间(Unix 时间戳,毫秒)。
在项目根目录执行:
python3 -c "
from datetime import datetime, timezone
ts_ms = 1771041059726 # 替换成你日志里的时间戳
utc = datetime.fromtimestamp(ts_ms/1000, tz=timezone.utc)
now = datetime.now(timezone.utc)
delta = utc - now
print('解封时间(UTC):', utc.strftime('%Y-%m-%d %H:%M:%S'))
print('当前时间(UTC):', now.strftime('%Y-%m-%d %H:%M:%S'))
if delta.total_seconds() > 0:
print('还需等待:', delta.days, '天', delta.seconds//3600, '小时', (delta.seconds%3600)//60, '分钟')
else:
print('已过解封时间,可重试;若仍报错可等几分钟或换网络。')
"
把上面脚本里的 1771041059726 换成你实际日志中的 banned until 后面的数字即可。
如何减少再次被限/封禁
- 拉大扫描间隔:全局配置里把
SCAN_INTERVAL调大(如 900 → 1200 或 1800),降低整体请求频率。 - 缩小扫描范围:适当减小
MAX_SCAN_SYMBOLS、TOP_N_SYMBOLS,减少单次扫描的 API 调用量。 - 并发已做限制:
market_scanner已用信号量限制并发(如 3),避免同时打爆;若仍触限,可再减小并发或增加批次间延迟。 - 错误提示:日志里「分析超时(10秒)」多是因为当时已被限频/封禁导致请求挂起或失败,解封后一般会恢复。
解封后若仍偶发 -1003,可先等 1~2 分钟再跑,或临时增大 SCAN_INTERVAL 再观察。
获取持仓/成交超时(TimeoutError)
若日志出现「获取持仓信息最终失败 (已重试 7 次): TimeoutError」或「获取成交记录失败 XXX (已重试 5 次): TimeoutError」:
- 网络/限频:与 -1003 类似,可能是当时网络抖动或请求排队,重试已用 60 秒超时 × 多轮;过几分钟通常恢复。
- 适当拉长只读超时(可选):在运行交易进程的环境里设置环境变量
READ_ONLY_REQUEST_TIMEOUT=90(默认 60 秒),只读接口(持仓、成交、交易对信息)单次等待时间会变长,不影响下单/止损止盈的快速失败。 - 本次已做:获取交易对信息(如 ENAUSDT)增加 60 秒超时 + 3 次重试;获取成交记录后几次重试间隔改为 2 秒;开仓失败时会打出完整异常与堆栈,便于排查。