auto_trade_sys/docs/推荐系统超时问题和交易数据分析_2026-01-26.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

278 lines
8.9 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.

# 推荐系统超时问题和交易数据分析 - 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