在 `binance_client.py` 中更新 `create_futures_listen_key` 和 `keepalive_futures_listen_key` 方法,新增优先使用 WebSocket API 的功能,若 WebSocket 不可用则回退到 REST API。增强了错误处理和日志记录,确保在请求失败时提供更清晰的反馈。此改动提升了 listenKey 管理的灵活性和系统的稳定性。
125 lines
3.5 KiB
Markdown
125 lines
3.5 KiB
Markdown
# 日志问题分析
|
||
|
||
## 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.1310,ROE 将达到 -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"
|
||
```
|