8.9 KiB
8.9 KiB
推荐系统超时问题和交易数据分析 - 2026-01-26
问题1:推荐系统TimeoutError
错误信息
2026-01-25 17:19:07 - recommendations - ERROR - 推荐生成循环异常: TimeoutError
Traceback (most recent call last):
File "/www/wwwroot/autosys/trading_system/recommendations_main.py", line 145, in main
recos = await recommender.generate_recommendations(...)
File "/www/wwwroot/autosys/trading_system/trade_recommender.py", line 118, in generate_recommendations
top_symbols = await self.scanner.scan_market(...)
File "/www/wwwroot/autosys/trading_system/market_scanner.py", line 60, in scan_market
all_symbols = await self.client.get_all_usdt_pairs()
File "/www/wwwroot/autosys/trading_system/binance_client.py", line 333, in get_all_usdt_pairs
exchange_info = await self.client.futures_exchange_info()
...
File "/www/wwwroot/autosys_new/trading_system/.venv/lib/python3.12/site-packages/aiohttp/helpers.py", line 735, in __exit__
raise asyncio.TimeoutError from None
TimeoutError
问题分析
根本原因:
get_all_usdt_pairs()方法直接调用self.client.futures_exchange_info()- 没有使用
_rate_limited_request,缺少重试机制 - 没有超时处理,网络请求超时直接抛出异常
- 没有异常捕获,导致推荐服务循环中断
影响:
- 推荐服务在遇到网络超时时会中断
- 虽然外层有
try-except,但异常被记录后继续循环,可能导致推荐生成失败
解决方案 ✅ 已实施
修改文件:trading_system/binance_client.py
修改内容:
- ✅ 使用
_rate_limited_request包装请求,添加速率限制 - ✅ 使用
asyncio.wait_for添加超时处理(默认30秒) - ✅ 添加重试机制(默认3次,递增等待时间)
- ✅ 添加异常捕获,返回空列表而不是抛出异常
- ✅ 添加详细日志,记录重试过程
修改后的方法签名:
async def get_all_usdt_pairs(self, max_retries: int = 3, timeout: int = 30) -> List[str]:
重试策略:
- 最大重试次数:3次
- 超时时间:30秒/次
- 等待时间:递增(2秒、4秒、6秒)
- 失败时返回空列表,不会中断推荐服务循环
问题2:交易数据异常分析
统计数据
| 指标 | 数值 | 评价 |
|---|---|---|
| 总交易数 | 5 | ❌ 过少 |
| 胜率 | 0% | ❌ 全部亏损 |
| 总盈亏 | -4.42 USDT | ❌ 亏损 |
| 平均盈亏 | -2.21 USDT/笔 | ❌ 严重亏损 |
| 平均持仓时长 | 306分钟(5小时) | ⚠️ 较长 |
| 平仓原因 | 止损 2 / 持仓中 3 | ⚠️ 无止盈 |
| 平均盈利/平均亏损 | 0.00:1 | ❌ 无盈利 |
| 总交易量 | 132.97 USDT | ⚠️ 较少 |
交易详情
已平仓交易(2笔)
-
#1653 JTOUSDT SELL: -85.93%
- 入场价:0.3063
- 出场价:0.3392
- 价格涨幅:10.7%(做空方向,价格上涨导致亏损)
- 盈亏比例:-85.93%(相对于保证金)
- 杠杆:8x
- 持仓时长:约3.6小时
- 平仓类型:自动平仓(止损)
- 问题:止损没有及时执行,导致极端亏损
-
#1648 TIAUSDT SELL: -45.55%
- 入场价:0.418
- 出场价:0.4418
- 价格涨幅:5.7%(做空方向,价格上涨导致亏损)
- 盈亏比例:-45.55%(相对于保证金)
- 杠杆:8x
- 持仓时长:约6.8小时
- 平仓类型:自动平仓(止损)
- 问题:止损没有及时执行,导致大额亏损
持仓中交易(3笔)
- #1655 DASHUSDT SELL - 持仓中
- #1651 AUCTIONUSDT BUY - 持仓中
- #1644 SANDUSDT SELL - 持仓中
🔍 问题分析
问题1:交易数量过少(5笔)
可能原因:
- 扫描间隔太长:
SCAN_INTERVAL = 3600秒(1小时),可能错过机会 - 信号筛选太严格:
MIN_SIGNAL_STRENGTH = 5,可能过滤掉太多交易对 - 市场条件不佳:可能市场波动较小,没有符合条件的交易对
- 配置问题:可能某些配置项限制了交易数量
建议:
- ✅ 检查扫描间隔是否合理
- ✅ 检查信号筛选条件是否太严格
- ✅ 检查市场扫描日志,确认是否找到交易对
问题2:胜率0%,全部亏损
可能原因:
- 止损失效:2笔已平仓交易都是极端亏损(-85.93%, -45.55%),说明止损没有及时执行
- 做空方向问题:2笔亏损都是做空(SELL),可能市场整体上涨
- 入场时机不佳:可能入场时机选择不当
建议:
- ✅ 立即修复止损失效问题
- ✅ 检查做空方向的止损逻辑
- ✅ 检查入场信号质量
问题3:极端亏损(-85.93%, -45.55%)
问题分析:
-
JTOUSDT #1653:
- 价格涨幅10.7%,但盈亏比例-85.93%
- 说明止损距离过宽或止损没有及时执行
- 持仓时长3.6小时,止损应该在更早触发
-
TIAUSDT #1648:
- 价格涨幅5.7%,但盈亏比例-45.55%
- 说明止损距离过宽或止损没有及时执行
- 持仓时长6.8小时,止损应该在更早触发
可能原因:
- 止损单没有正确挂到交易所
- 止损价格计算错误(特别是做空方向)
- WebSocket监控断线,没有及时触发止损
- 价格跳空,导致止损失效
建议:
- ✅ 立即修复止损失效问题
- ✅ 检查做空方向的止损价格计算
- ✅ 检查WebSocket监控是否正常
- ✅ 添加止损失效告警
问题4:平均持仓时长较长(306分钟)
问题分析:
- 平均持仓306分钟(5小时),说明持仓时间较长
- 2笔已平仓交易持仓时长分别为3.6小时和6.8小时
- 3笔持仓中交易可能持仓更长时间
可能原因:
- 止盈目标设置太高:可能止盈目标难以达到
- 止损没有及时触发:导致持仓时间过长
- 市场波动较小:价格没有达到止盈或止损目标
建议:
- ✅ 检查止盈目标是否设置太高
- ✅ 检查止损是否及时触发
- ✅ 检查市场波动情况
🚀 解决方案
1. 修复推荐系统TimeoutError
修改文件:trading_system/binance_client.py
修改内容:
- 使用
_rate_limited_request包装futures_exchange_info()请求 - 添加超时处理和重试机制
- 添加异常捕获,返回空列表而不是抛出异常
2. 修复止损失效问题
立即执行:
- ✅ 检查止损单是否正确挂到交易所
- ✅ 检查止损价格计算是否正确(特别是做空方向)
- ✅ 检查WebSocket监控是否正常
- ✅ 添加止损失效告警
3. 优化交易数量
检查项:
- ✅ 检查扫描间隔是否合理
- ✅ 检查信号筛选条件是否太严格
- ✅ 检查市场扫描日志,确认是否找到交易对
4. 优化持仓时长
检查项:
- ✅ 检查止盈目标是否设置太高
- ✅ 检查止损是否及时触发
- ✅ 检查市场波动情况
📊 与正常情况对比
正常情况(参考2026-01-25)
| 指标 | 正常值 | 当前值 | 评价 |
|---|---|---|---|
| 总交易数 | 81 | 5 | ❌ 过少 |
| 胜率 | 42.67% | 0% | ❌ 严重异常 |
| 总盈亏 | +7.37 USDT | -4.42 USDT | ❌ 亏损 |
| 平均持仓时长 | 80分钟 | 306分钟 | ⚠️ 较长 |
| 极端亏损 | 8笔>50% | 2笔>45% | ⚠️ 仍有问题 |
异常情况分析
-
交易数量过少:5笔 vs 正常81笔,说明可能:
- 扫描间隔太长
- 信号筛选太严格
- 市场条件不佳
- 配置问题
-
胜率0%:全部亏损,说明:
- 止损失效导致极端亏损
- 入场时机可能不佳
- 做空方向可能有问题
-
极端亏损:2笔极端亏损(-85.93%, -45.55%),说明:
- 止损没有及时执行
- 需要立即修复止损失效问题
✅ 总结
推荐系统问题
- ❌ TimeoutError:
get_all_usdt_pairs()缺少超时处理和重试机制 - ✅ 解决方案:使用
_rate_limited_request包装请求,添加超时处理和重试机制
交易数据问题
- ❌ 交易数量过少:5笔 vs 正常81笔
- ❌ 胜率0%:全部亏损
- ❌ 极端亏损:2笔极端亏损(-85.93%, -45.55%)
- ⚠️ 持仓时长较长:306分钟(5小时)
关键问题
- 止损失效:2笔极端亏损说明止损没有及时执行
- 交易数量过少:可能扫描间隔太长或信号筛选太严格
- 做空方向问题:2笔亏损都是做空,可能止损逻辑有问题
立即行动
- ✅ 修复推荐系统TimeoutError
- ✅ 修复止损失效问题
- ✅ 检查交易数量过少的原因
- ✅ 检查做空方向的止损逻辑
📝 备注
- 本报告基于2026-01-26的交易数据
- 数据来源:
trading_system/交易记录_2026-01-26T06-17-06.json - 分析时间:2026-01-26