auto_trade_sys/诊断日志问题.md
薇薇安 a862aec4f5 feat(binance_client): 优化 listenKey 创建与延长逻辑,支持 WebSocket API
在 `binance_client.py` 中更新 `create_futures_listen_key` 和 `keepalive_futures_listen_key` 方法,新增优先使用 WebSocket API 的功能,若 WebSocket 不可用则回退到 REST API。增强了错误处理和日志记录,确保在请求失败时提供更清晰的反馈。此改动提升了 listenKey 管理的灵活性和系统的稳定性。
2026-02-17 23:28:28 +08:00

3.5 KiB
Raw Blame History

日志问题分析

1. IPUSDT 持仓状态分析

日志信息:

IPUSDT [实时监控] 诊断: 
  • ROE(保证金盈亏): -5.83% (用户关注)
  • 价格变动: -1.46% (实际币价涨跌)
  • 杠杆倍数: 4.0x (放大倍数)
  • 当前价: 1.1490 | 入场价: 1.1660
  • 止损价: 1.1310 (目标ROE: -12.00%)
  • 触发止损: NO

分析:

  • 计算验证:

    • 价格变动: (1.1490 - 1.1660) / 1.1660 = -1.46% ✓
    • ROE: -1.46% × 4.0 = -5.84% ≈ -5.83% ✓
  • 止损状态:

    • 当前价 1.1490 > 止损价 1.1310,未触发止损 ✓
    • 距离止损: (1.1490 - 1.1310) / 1.1310 = 1.59%
    • 如果价格继续下跌到 1.1310ROE 将达到 -12.00%
  • ⚠️ 风险提示:

    • 当前亏损 -5.83%,距离止损还有 1.59% 的价格空间
    • 如果价格继续下跌,可能会触发止损

2. User Data Stream listenKey 创建失败

错误信息:

create_futures_listen_key 失败: 请求超时(可检查该账号网络或代理)
UserDataStream(account_id=2): 重新创建 listenKey 失败60s 后重试

可能原因:

  1. 网络连接问题:

    • 到币安 API 的网络不稳定
    • 代理设置问题
    • 防火墙阻止连接
  2. API 权限问题:

    • API Key 未启用 "Enable Reading"
    • API Key 未启用 "Enable Futures"
    • API Key 已过期或被禁用
  3. IP 白名单限制:

    • 当前 IP 不在 API Key 的 IP 白名单中
    • IP 白名单配置错误
  4. 币安服务问题:

    • 币安 API 服务暂时不可用
    • API 限流或维护中

影响:

  • 无法实时接收订单/持仓/余额推送
  • 订单号可能无法及时同步到数据库
  • ⚠️ 系统会每 60 秒重试创建 listenKey

3. 网络超时问题

日志显示:

  • 大量 TimeoutError 错误
  • 获取持仓信息失败(重试 7 次后失败)
  • 获取成交记录失败(重试 5 次后失败)

建议排查步骤:

步骤 1: 检查网络连接

# 测试币安 API 连接
curl -I https://fapi.binance.com/fapi/v1/ping

# 测试 listenKey 创建(需要 API Key
curl -X POST "https://fapi.binance.com/fapi/v1/listenKey" \
  -H "X-MBX-APIKEY: YOUR_API_KEY"

步骤 2: 检查 API Key 权限

  1. 登录币安账户
  2. 进入 API 管理页面
  3. 检查账号 2 的 API Key
    • Enable Reading
    • Enable Futures
    • IP 白名单设置(如果启用了)

步骤 3: 运行诊断工具

cd trading_system
python3 -m trading_system.check_user_data_stream

步骤 4: 检查代理设置

如果使用了代理,检查:

  • 代理服务器是否正常运行
  • 代理配置是否正确
  • 代理是否支持 HTTPS 连接

4. 建议解决方案

短期方案(立即执行):

  1. 检查网络连接: 确认服务器到币安的网络是否正常
  2. 验证 API Key: 确认账号 2 的 API Key 权限和 IP 白名单
  3. 增加超时时间: 如果网络较慢,可以增加超时时间(当前 10 秒)

长期方案(优化):

  1. 增加重试机制: 对于 listenKey 创建失败,增加指数退避重试
  2. 监控告警: 当 listenKey 创建失败时发送告警
  3. 降级方案: 当 WS 不可用时,增加 REST API 轮询频率

5. 查看详细日志

# 查看最近的 listenKey 相关日志
tail -100 trading_2.out.log | grep -i "listen_key\|UserDataStream"

# 查看 IPUSDT 相关日志
tail -100 trading_2.out.log | grep -i "IPUSDT"

# 查看所有超时错误
tail -200 trading_2.out.log | grep -i "TimeoutError"