155 lines
4.5 KiB
Markdown
155 lines
4.5 KiB
Markdown
# 交易对筛选优化完成总结(2026-01-27)
|
||
|
||
## 🎯 优化目标
|
||
|
||
**按真实的信号强度(signal_strength)排序,优先选择高质量信号(8-10分),而不是简单的signalScore(5-7分)**
|
||
|
||
---
|
||
|
||
## ✅ 已完成的优化
|
||
|
||
### 1. 在扫描阶段计算signal_strength
|
||
|
||
**修改位置**:`trading_system/market_scanner.py:380-449`
|
||
|
||
**优化内容**:
|
||
- 在 `_get_symbol_change` 方法中,添加真实的 `signal_strength` 计算
|
||
- 使用与 `strategy.py` 相同的逻辑,确保排序依据与交易判断一致
|
||
- 包括:MACD金叉/死叉、EMA均线系统、价格与EMA20关系、4H趋势确认
|
||
|
||
**计算逻辑**:
|
||
```python
|
||
# 策略权重配置(与strategy.py保持一致)
|
||
TREND_SIGNAL_WEIGHTS = {
|
||
'macd_cross': 5, # MACD金叉/死叉
|
||
'ema_cross': 4, # EMA20上穿/下穿EMA50
|
||
'price_above_ema20': 3, # 价格在EMA20之上/下
|
||
'4h_trend_confirmation': 2, # 4H趋势确认
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 2. 按signal_strength排序
|
||
|
||
**修改位置**:`trading_system/market_scanner.py:152-161`
|
||
|
||
**优化前**:
|
||
```python
|
||
sorted_results = sorted(
|
||
filtered_results,
|
||
key=lambda x: (
|
||
x.get('signalScore', 0) * 10, # 信号得分权重更高
|
||
abs(x['changePercent']) # 其次考虑涨跌幅
|
||
),
|
||
reverse=True
|
||
)
|
||
```
|
||
|
||
**优化后**:
|
||
```python
|
||
sorted_results = sorted(
|
||
filtered_results,
|
||
key=lambda x: (
|
||
x.get('signal_strength', 0) * 100, # 信号强度权重最高(乘以100确保优先级)
|
||
x.get('signalScore', 0) * 10, # 其次考虑信号得分(兼容性)
|
||
abs(x['changePercent']) # 最后考虑涨跌幅
|
||
),
|
||
reverse=True
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 更新日志显示
|
||
|
||
**修改位置**:`trading_system/market_scanner.py:197-208`
|
||
|
||
**优化内容**:
|
||
- 日志中显示真实的 `signal_strength`,而不是 `signalScore`
|
||
- 方便用户查看信号强度分布
|
||
|
||
---
|
||
|
||
## 📊 预期效果
|
||
|
||
### 优化前
|
||
|
||
- 按 `signalScore` 排序(简单的技术指标得分)
|
||
- 信号强度:5, 5, 5, 5, 6, 6, 7, 7(可能的情况)
|
||
- 问题:信号强度普遍偏低,与交易判断不一致
|
||
|
||
### 优化后
|
||
|
||
- 按 `signal_strength` 排序(真实的信号强度,包括多周期共振)
|
||
- 信号强度:7, 7, 8, 8, 9, 9, 10, 10(理想情况)
|
||
- 效果:优先选择高质量信号,提升胜率
|
||
|
||
---
|
||
|
||
## 🔍 信号强度5-7是否合理?
|
||
|
||
### 当前情况
|
||
|
||
- `MIN_SIGNAL_STRENGTH = 5`,所以信号强度5-7是正常的
|
||
- 但问题是:应该优先选择信号强度更高的交易对(8-10分)
|
||
|
||
### 优化后
|
||
|
||
- 按 `signal_strength` 排序,优先选择8-10分的交易对
|
||
- 如果市场整体信号强度偏低,仍然会出现5-7的情况,但这是正常的
|
||
- 说明当前市场条件不够理想,系统会优先选择相对较好的信号
|
||
|
||
---
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **性能考虑**:
|
||
- 计算 `signal_strength` 需要额外的计算量
|
||
- 但考虑到已经获取了所有技术指标,计算量增加有限
|
||
- 可以通过缓存优化(技术指标已经缓存)
|
||
|
||
2. **信号强度分布**:
|
||
- 如果市场整体信号强度偏低,可能仍然会出现5-7的情况
|
||
- 这是正常的,说明当前市场条件不够理想
|
||
- 系统会优先选择相对较好的信号(即使只有5-7分)
|
||
|
||
3. **排序依据**:
|
||
- 现在按 `signal_strength` 排序,确保排序依据与交易判断一致
|
||
- 优先选择高质量信号,提升胜率
|
||
|
||
---
|
||
|
||
## ✅ 总结
|
||
|
||
**优化内容**:
|
||
- ✅ 在扫描阶段计算真实的 `signal_strength`
|
||
- ✅ 按 `signal_strength` 排序,而不是按 `signalScore` 排序
|
||
- ✅ 更新日志显示,显示真实的信号强度
|
||
|
||
**预期效果**:
|
||
- ✅ 优先选择信号强度高的交易对(8-10分)
|
||
- ✅ 提升胜率(信号强度高的交易对胜率更高)
|
||
- ✅ 排序依据与交易判断一致
|
||
|
||
**信号强度5-7是否合理**:
|
||
- ✅ 如果市场整体信号强度偏低,5-7是正常的
|
||
- ✅ 优化后,系统会优先选择相对较好的信号(即使只有5-7分)
|
||
- ✅ 如果市场条件好,应该能看到8-10分的信号
|
||
|
||
---
|
||
|
||
## 📝 后续优化建议
|
||
|
||
1. **监控信号强度分布**:
|
||
- 定期检查信号强度分布,确认优化效果
|
||
- 如果长期都是5-7分,可能需要调整信号强度计算逻辑
|
||
|
||
2. **动态调整TOP_N_SYMBOLS**:
|
||
- 如果高质量信号(8-10分)较少,可以降低 `TOP_N_SYMBOLS`
|
||
- 如果高质量信号较多,可以增加 `TOP_N_SYMBOLS`
|
||
|
||
3. **信号强度阈值**:
|
||
- 如果长期都是5-7分,可以考虑提高 `MIN_SIGNAL_STRENGTH` 到6或7
|
||
- 但需要确保有足够的交易对
|