auto_trade_sys/docs/市场扫描优化分析.md
薇薇安 83e628b611 a
2026-01-25 16:32:08 +08:00

181 lines
4.8 KiB
Markdown
Raw Permalink 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.

# 市场扫描优化分析
## 🔍 当前情况
### 扫描流程
1. **获取所有USDT永续合约交易对**544个
2. **限制扫描数量**150个`MAX_SCAN_SYMBOLS=150`
3. **初步筛选**28个通过最小涨跌幅和成交量过滤
4. **最终选择**5个`TOP_N_SYMBOLS=5`
### 问题分析
#### 问题1扫描150个只取5个是否合理
**当前逻辑**
- 扫描前150个交易对按币安返回顺序可能不是按市值排序
- 初步筛选后28个需要详细分析
- 最终只选择5个按信号得分和涨跌幅排序
**问题**
1. **可能错过好机会**
- 如果前150个中没有包含某些优质山寨币会错过
- 如果信号得分排序不准确,可能错过更好的机会
2. **TOP_N_SYMBOLS=5 可能太少**
- 山寨币策略配置:`MAX_OPEN_POSITIONS=4`最多4个持仓
- 如果只选择5个可能不够
- 建议:`TOP_N_SYMBOLS` 应该 >= `MAX_OPEN_POSITIONS * 1.5`至少6-8个
#### 问题2是否需要跳过主流币
**当前逻辑**
- 没有过滤主流币BTC、ETH、BNB等
- 如果主流币出现在前150个中会被扫描和分析
**问题**
1. **山寨币策略不应该交易主流币**
- 主流币波动小,不符合山寨币高盈亏比策略
- 主流币流动性太好,价格冲击小,但也不容易有大波动
2. **主流币可能占用扫描名额**
- 如果BTC、ETH出现在前150个中会占用扫描和分析资源
- 但最终可能因为信号强度不足而不交易
---
## ✅ 优化方案
### 方案1过滤主流币推荐
**实现**:在扫描前过滤掉主流币
**主流币列表**
```python
MAJOR_COINS = {'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT'}
```
**优点**
- 专注于山寨币,符合策略定位
- 节省扫描和分析资源
- 避免主流币占用名额
**缺点**
- 如果主流币出现异常波动,会错过(但这不是山寨币策略的目标)
### 方案2增加 TOP_N_SYMBOLS
**当前**`TOP_N_SYMBOLS=5`
**建议**:增加到 `8-10`
**理由**
- `MAX_OPEN_POSITIONS=4`,需要更多候选
- 增加选择余地,避免错过好机会
- 即使选择8-10个最终也可能只交易4个受持仓限制
### 方案3优化排序逻辑
**当前排序**
```python
sorted_results = sorted(
filtered_results,
key=lambda x: (
x.get('signalScore', 0) * 10, # 信号得分权重更高
abs(x['changePercent']) # 其次考虑涨跌幅
),
reverse=True
)
```
**优化建议**
1. **增加成交量权重**:成交量越大,流动性越好
2. **增加波动率权重**:波动率越大,机会越大
3. **排除主流币**:在排序前排除主流币
---
## 🎯 推荐配置
### 优化后的配置
```python
MAX_SCAN_SYMBOLS = 150 # 保持150个覆盖主流山寨
TOP_N_SYMBOLS = 8 # 增加到8个给更多选择余地
EXCLUDE_MAJOR_COINS = True # 排除主流币(新增配置)
MAJOR_COINS = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT', 'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT']
```
**理由**
1. **保持扫描150个**:覆盖主流山寨币
2. **增加到8个候选**:给更多选择余地,避免错过好机会
3. **排除主流币**:专注于山寨币,符合策略定位
---
## 🔧 实现方案
### 1. 添加主流币过滤
`market_scanner.py` 中添加主流币过滤逻辑:
```python
# 主流币列表(山寨币策略应该排除)
MAJOR_COINS = {'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT',
'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT',
'LINKUSDT', 'UNIUSDT', 'ATOMUSDT', 'ETCUSDT', 'LTCUSDT'}
# 在扫描前过滤主流币
if cfg.get('EXCLUDE_MAJOR_COINS', True):
symbols = [s for s in symbols if s not in MAJOR_COINS]
logger.info(f"排除主流币后,剩余 {len(symbols)} 个交易对")
```
### 2. 增加 TOP_N_SYMBOLS
在配置中增加 `TOP_N_SYMBOLS` 到 8
```python
TOP_N_SYMBOLS = 8 # 从5增加到8给更多选择余地
```
### 3. 优化排序逻辑
增加成交量和波动率权重:
```python
sorted_results = sorted(
filtered_results,
key=lambda x: (
x.get('signalScore', 0) * 10, # 信号得分权重最高
abs(x['changePercent']) * 2, # 涨跌幅权重
x.get('volume24h', 0) / 1000000, # 成交量权重(百万美元)
x.get('volatility', 0) * 100 # 波动率权重
),
reverse=True
)
```
---
## 📊 预期效果
### 优化前
- 扫描150个可能包含主流币
- 最终选择5个
- 可能错过好机会
### 优化后
- 扫描150个排除主流币专注于山寨币
- 最终选择8个给更多选择余地
- 减少错过好机会的概率
---
## ✅ 完成时间
2026-01-25