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

125 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 日志问题分析
## 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: 检查网络连接
```bash
# 测试币安 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: 运行诊断工具
```bash
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. 查看详细日志
```bash
# 查看最近的 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"
```