# 日志问题分析 ## 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" ```