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

8.9 KiB
Raw Blame History

推荐系统超时问题和交易数据分析 - 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. 添加详细日志,记录重试过程

修改后的方法签名

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. TimeoutErrorget_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