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