278 lines
8.9 KiB
Markdown
278 lines
8.9 KiB
Markdown
# 推荐系统超时问题和交易数据分析 - 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`
|
||
|
||
**修改内容**:
|
||
1. ✅ 使用 `_rate_limited_request` 包装请求,添加速率限制
|
||
2. ✅ 使用 `asyncio.wait_for` 添加超时处理(默认30秒)
|
||
3. ✅ 添加重试机制(默认3次,递增等待时间)
|
||
4. ✅ 添加异常捕获,返回空列表而不是抛出异常
|
||
5. ✅ 添加详细日志,记录重试过程
|
||
|
||
**修改后的方法签名**:
|
||
```python
|
||
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笔)
|
||
|
||
1. **#1653 JTOUSDT SELL: -85.93%**
|
||
- 入场价:0.3063
|
||
- 出场价:0.3392
|
||
- 价格涨幅:**10.7%**(做空方向,价格上涨导致亏损)
|
||
- 盈亏比例:**-85.93%**(相对于保证金)
|
||
- 杠杆:8x
|
||
- 持仓时长:约3.6小时
|
||
- 平仓类型:自动平仓(止损)
|
||
- **问题**:止损没有及时执行,导致极端亏损
|
||
|
||
2. **#1648 TIAUSDT SELL: -45.55%**
|
||
- 入场价:0.418
|
||
- 出场价:0.4418
|
||
- 价格涨幅:**5.7%**(做空方向,价格上涨导致亏损)
|
||
- 盈亏比例:**-45.55%**(相对于保证金)
|
||
- 杠杆:8x
|
||
- 持仓时长:约6.8小时
|
||
- 平仓类型:自动平仓(止损)
|
||
- **问题**:止损没有及时执行,导致大额亏损
|
||
|
||
#### 持仓中交易(3笔)
|
||
|
||
1. **#1655 DASHUSDT SELL** - 持仓中
|
||
2. **#1651 AUCTIONUSDT BUY** - 持仓中
|
||
3. **#1644 SANDUSDT SELL** - 持仓中
|
||
|
||
---
|
||
|
||
## 🔍 问题分析
|
||
|
||
### 问题1:交易数量过少(5笔)
|
||
|
||
**可能原因**:
|
||
1. **扫描间隔太长**:`SCAN_INTERVAL = 3600秒`(1小时),可能错过机会
|
||
2. **信号筛选太严格**:`MIN_SIGNAL_STRENGTH = 5`,可能过滤掉太多交易对
|
||
3. **市场条件不佳**:可能市场波动较小,没有符合条件的交易对
|
||
4. **配置问题**:可能某些配置项限制了交易数量
|
||
|
||
**建议**:
|
||
- ✅ 检查扫描间隔是否合理
|
||
- ✅ 检查信号筛选条件是否太严格
|
||
- ✅ 检查市场扫描日志,确认是否找到交易对
|
||
|
||
### 问题2:胜率0%,全部亏损
|
||
|
||
**可能原因**:
|
||
1. **止损失效**:2笔已平仓交易都是极端亏损(-85.93%, -45.55%),说明止损没有及时执行
|
||
2. **做空方向问题**:2笔亏损都是做空(SELL),可能市场整体上涨
|
||
3. **入场时机不佳**:可能入场时机选择不当
|
||
|
||
**建议**:
|
||
- ✅ **立即修复止损失效问题**
|
||
- ✅ 检查做空方向的止损逻辑
|
||
- ✅ 检查入场信号质量
|
||
|
||
### 问题3:极端亏损(-85.93%, -45.55%)
|
||
|
||
**问题分析**:
|
||
1. **JTOUSDT #1653**:
|
||
- 价格涨幅10.7%,但盈亏比例-85.93%
|
||
- 说明止损距离过宽或止损没有及时执行
|
||
- 持仓时长3.6小时,止损应该在更早触发
|
||
|
||
2. **TIAUSDT #1648**:
|
||
- 价格涨幅5.7%,但盈亏比例-45.55%
|
||
- 说明止损距离过宽或止损没有及时执行
|
||
- 持仓时长6.8小时,止损应该在更早触发
|
||
|
||
**可能原因**:
|
||
1. **止损单没有正确挂到交易所**
|
||
2. **止损价格计算错误**(特别是做空方向)
|
||
3. **WebSocket监控断线**,没有及时触发止损
|
||
4. **价格跳空**,导致止损失效
|
||
|
||
**建议**:
|
||
- ✅ **立即修复止损失效问题**
|
||
- ✅ 检查做空方向的止损价格计算
|
||
- ✅ 检查WebSocket监控是否正常
|
||
- ✅ 添加止损失效告警
|
||
|
||
### 问题4:平均持仓时长较长(306分钟)
|
||
|
||
**问题分析**:
|
||
- 平均持仓306分钟(5小时),说明持仓时间较长
|
||
- 2笔已平仓交易持仓时长分别为3.6小时和6.8小时
|
||
- 3笔持仓中交易可能持仓更长时间
|
||
|
||
**可能原因**:
|
||
1. **止盈目标设置太高**:可能止盈目标难以达到
|
||
2. **止损没有及时触发**:导致持仓时间过长
|
||
3. **市场波动较小**:价格没有达到止盈或止损目标
|
||
|
||
**建议**:
|
||
- ✅ 检查止盈目标是否设置太高
|
||
- ✅ 检查止损是否及时触发
|
||
- ✅ 检查市场波动情况
|
||
|
||
---
|
||
|
||
## 🚀 解决方案
|
||
|
||
### 1. 修复推荐系统TimeoutError
|
||
|
||
**修改文件**:`trading_system/binance_client.py`
|
||
|
||
**修改内容**:
|
||
- 使用 `_rate_limited_request` 包装 `futures_exchange_info()` 请求
|
||
- 添加超时处理和重试机制
|
||
- 添加异常捕获,返回空列表而不是抛出异常
|
||
|
||
### 2. 修复止损失效问题
|
||
|
||
**立即执行**:
|
||
1. ✅ 检查止损单是否正确挂到交易所
|
||
2. ✅ 检查止损价格计算是否正确(特别是做空方向)
|
||
3. ✅ 检查WebSocket监控是否正常
|
||
4. ✅ 添加止损失效告警
|
||
|
||
### 3. 优化交易数量
|
||
|
||
**检查项**:
|
||
1. ✅ 检查扫描间隔是否合理
|
||
2. ✅ 检查信号筛选条件是否太严格
|
||
3. ✅ 检查市场扫描日志,确认是否找到交易对
|
||
|
||
### 4. 优化持仓时长
|
||
|
||
**检查项**:
|
||
1. ✅ 检查止盈目标是否设置太高
|
||
2. ✅ 检查止损是否及时触发
|
||
3. ✅ 检查市场波动情况
|
||
|
||
---
|
||
|
||
## 📊 与正常情况对比
|
||
|
||
### 正常情况(参考2026-01-25)
|
||
|
||
| 指标 | 正常值 | 当前值 | 评价 |
|
||
|------|--------|--------|------|
|
||
| **总交易数** | 81 | 5 | ❌ **过少** |
|
||
| **胜率** | 42.67% | 0% | ❌ **严重异常** |
|
||
| **总盈亏** | +7.37 USDT | -4.42 USDT | ❌ **亏损** |
|
||
| **平均持仓时长** | 80分钟 | 306分钟 | ⚠️ **较长** |
|
||
| **极端亏损** | 8笔>50% | 2笔>45% | ⚠️ **仍有问题** |
|
||
|
||
### 异常情况分析
|
||
|
||
1. **交易数量过少**:5笔 vs 正常81笔,说明可能:
|
||
- 扫描间隔太长
|
||
- 信号筛选太严格
|
||
- 市场条件不佳
|
||
- 配置问题
|
||
|
||
2. **胜率0%**:全部亏损,说明:
|
||
- 止损失效导致极端亏损
|
||
- 入场时机可能不佳
|
||
- 做空方向可能有问题
|
||
|
||
3. **极端亏损**:2笔极端亏损(-85.93%, -45.55%),说明:
|
||
- 止损没有及时执行
|
||
- 需要立即修复止损失效问题
|
||
|
||
---
|
||
|
||
## ✅ 总结
|
||
|
||
### 推荐系统问题
|
||
|
||
1. ❌ **TimeoutError**:`get_all_usdt_pairs()` 缺少超时处理和重试机制
|
||
2. ✅ **解决方案**:使用 `_rate_limited_request` 包装请求,添加超时处理和重试机制
|
||
|
||
### 交易数据问题
|
||
|
||
1. ❌ **交易数量过少**:5笔 vs 正常81笔
|
||
2. ❌ **胜率0%**:全部亏损
|
||
3. ❌ **极端亏损**:2笔极端亏损(-85.93%, -45.55%)
|
||
4. ⚠️ **持仓时长较长**:306分钟(5小时)
|
||
|
||
### 关键问题
|
||
|
||
1. **止损失效**:2笔极端亏损说明止损没有及时执行
|
||
2. **交易数量过少**:可能扫描间隔太长或信号筛选太严格
|
||
3. **做空方向问题**:2笔亏损都是做空,可能止损逻辑有问题
|
||
|
||
### 立即行动
|
||
|
||
1. ✅ **修复推荐系统TimeoutError**
|
||
2. ✅ **修复止损失效问题**
|
||
3. ✅ **检查交易数量过少的原因**
|
||
4. ✅ **检查做空方向的止损逻辑**
|
||
|
||
---
|
||
|
||
## 📝 备注
|
||
|
||
- 本报告基于2026-01-26的交易数据
|
||
- 数据来源:`trading_system/交易记录_2026-01-26T06-17-06.json`
|
||
- 分析时间:2026-01-26
|