auto_trade_sys/docs/交易对筛选优化方案_2026-01-27.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

176 lines
5.4 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-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` 排序(立即实施)
- **中**:在扫描阶段过滤低质量信号(可选)