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