5.4 KiB
5.4 KiB
交易对筛选优化方案(2026-01-27)
🔍 当前问题分析
问题描述
用户发现扫描到的交易对信号强度都是5-7,质疑:
- 是否按信号强度从高到低排序?
- 信号强度5-7是否合理?
当前实现
market_scanner.py:
- 计算
signalScore(简单的技术指标得分:RSI、MACD、布林带等) - 按
signalScore排序,取前TOP_N_SYMBOLS个(当前是8个) - 没有按
signal_strength排序或过滤
strategy.py:
- 对扫描到的交易对,调用
_analyze_trade_signal计算signal_strength - 检查
signal_strength >= MIN_SIGNAL_STRENGTH(当前是5) - 如果信号强度不足,只生成推荐,不自动交易
问题根源
-
两个不同的概念:
signalScore:简单的技术指标得分(用于排序)signal_strength:复杂的信号强度计算(包括多周期共振、趋势确认等)
-
排序依据错误:
- 当前按
signalScore排序,但实际交易判断用的是signal_strength - 导致
signalScore高的交易对,signal_strength可能只有5-7
- 当前按
-
信号强度5-7是否合理:
- 当前
MIN_SIGNAL_STRENGTH = 5,所以信号强度5-7是正常的 - 但问题是:应该优先选择信号强度更高的交易对(8-10分)
- 当前
✅ 优化方案
方案1:在扫描阶段预先计算signal_strength(推荐)
优点:
- 按真实的信号强度排序,优先选择高质量信号
- 可以在扫描阶段就过滤掉低质量信号
- 减少后续策略阶段的无效处理
缺点:
- 需要调用
_analyze_trade_signal,增加计算量 - 但考虑到已经获取了所有技术指标,计算量增加有限
实现:
- 在
market_scanner.py的_get_symbol_change中,调用_analyze_trade_signal计算signal_strength - 按
signal_strength排序,而不是按signalScore排序 - 可选:在扫描阶段就过滤掉
signal_strength < MIN_SIGNAL_STRENGTH的交易对
方案2:保持现状,但优化signalScore计算(简单)
优点:
- 不需要修改太多代码
- 保持扫描阶段简单快速
缺点:
signalScore和signal_strength仍然不一致- 可能仍然会出现信号强度5-7的情况
实现:
- 优化
signalScore的计算,使其更接近signal_strength - 增加多周期共振的权重
- 增加趋势确认的权重
🎯 推荐方案:方案1(按signal_strength排序)
实施步骤
-
在market_scanner.py中集成signal_strength计算
- 需要访问
TradingStrategy的_analyze_trade_signal方法 - 或者,将
_analyze_trade_signal提取为独立函数
- 需要访问
-
按signal_strength排序
- 替换当前的
signalScore排序逻辑 - 优先选择
signal_strength高的交易对
- 替换当前的
-
可选:在扫描阶段过滤
- 过滤掉
signal_strength < MIN_SIGNAL_STRENGTH的交易对 - 但考虑到可能没有足够的交易对,建议只排序,不严格过滤
- 过滤掉
📊 预期效果
优化前
- 按
signalScore排序,取前8个 - 信号强度:5, 5, 5, 5, 6, 6, 7, 7(可能的情况)
- 问题:信号强度普遍偏低
优化后
- 按
signal_strength排序,取前8个 - 信号强度:7, 7, 8, 8, 9, 9, 10, 10(理想情况)
- 效果:优先选择高质量信号,提升胜率
⚠️ 注意事项
-
性能考虑:
- 计算
signal_strength需要额外的计算量 - 但考虑到已经获取了所有技术指标,计算量增加有限
- 可以通过缓存优化
- 计算
-
交易对数量:
- 如果严格过滤,可能导致交易对数量不足
- 建议:只排序,不严格过滤(保留所有符合条件的交易对)
-
信号强度分布:
- 如果市场整体信号强度偏低,可能仍然会出现5-7的情况
- 这是正常的,说明当前市场条件不够理想
🔧 实施建议
阶段1:按signal_strength排序(立即实施)
- 在
market_scanner.py中集成signal_strength计算 - 按
signal_strength排序,而不是按signalScore排序 - 保持
TOP_N_SYMBOLS = 8,但优先选择信号强度高的
阶段2:可选优化(后续考虑)
- 在扫描阶段过滤掉
signal_strength < MIN_SIGNAL_STRENGTH的交易对 - 如果过滤后交易对数量不足,降低
MIN_SIGNAL_STRENGTH或增加TOP_N_SYMBOLS
📝 代码修改点
1. market_scanner.py
需要修改:
_get_symbol_change方法:添加signal_strength计算scan_market方法:按signal_strength排序
需要访问:
TradingStrategy._analyze_trade_signal方法- 或者,将信号强度计算逻辑提取为独立函数
2. 可选:提取信号强度计算逻辑
建议:
- 将
_analyze_trade_signal中的信号强度计算逻辑提取为独立函数 - 在
market_scanner.py和strategy.py中复用
✅ 总结
问题:
- 当前按
signalScore排序,但实际交易判断用的是signal_strength - 导致信号强度普遍偏低(5-7)
解决方案:
- 在扫描阶段预先计算
signal_strength - 按
signal_strength排序,优先选择高质量信号 - 预期信号强度分布:7-10分(而不是5-7分)
实施优先级:
- 高:按
signal_strength排序(立即实施) - 中:在扫描阶段过滤低质量信号(可选)