a
This commit is contained in:
parent
07d3bf4398
commit
83e628b611
135
docs/亏损分析_ZENUSDT.md
Normal file
135
docs/亏损分析_ZENUSDT.md
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
# 亏损分析 - ZENUSDT
|
||||
|
||||
## 📊 当前情况
|
||||
|
||||
### 交易信息
|
||||
|
||||
```
|
||||
ZENUSDT [实时监控] 诊断: 亏损-10.19% of margin |
|
||||
当前价: 9.6910 |
|
||||
入场价: 9.8160 |
|
||||
止损价: 9.6197 (目标: -16.00% of margin) |
|
||||
方向: BUY |
|
||||
是否触发: False |
|
||||
监控状态: 运行中
|
||||
```
|
||||
|
||||
### 计算验证
|
||||
|
||||
**价格变化**:
|
||||
- 入场价:9.8160
|
||||
- 当前价:9.6910
|
||||
- 价格跌幅 = (9.8160 - 9.6910) / 9.8160 = **1.27%**
|
||||
|
||||
**保证金亏损**:
|
||||
- 假设杠杆:8倍(山寨币策略默认)
|
||||
- 保证金亏损 = 1.27% × 8 = **10.16%**(接近-10.19%)
|
||||
|
||||
**止损价计算**:
|
||||
- 止损价:9.6197
|
||||
- 止损距离 = 9.8160 - 9.6197 = 0.1963
|
||||
- 止损百分比(价格)= 0.1963 / 9.8160 = **2.00%**
|
||||
- 止损目标(保证金)= 2.00% × 8 = **16.00%**
|
||||
|
||||
---
|
||||
|
||||
## ✅ 是否正常?
|
||||
|
||||
### 结论:**正常** ✅
|
||||
|
||||
**理由**:
|
||||
|
||||
1. **亏损-10.19%是正常的市场波动**
|
||||
- 价格只下跌了1.27%,这是正常的市场波动
|
||||
- 山寨币波动大,1-2%的价格波动很常见
|
||||
|
||||
2. **止损目标-16%符合策略配置**
|
||||
- 山寨币策略配置:`STOP_LOSS_PERCENT = 15%`(固定止损)
|
||||
- 实际止损目标-16%可能是因为:
|
||||
- ATR止损计算的结果(`ATR_STOP_LOSS_MULTIPLIER = 2.0`)
|
||||
- 止损价选择逻辑选择了ATR止损而不是固定止损
|
||||
- 16%接近15%,在合理范围内
|
||||
|
||||
3. **止损未触发是正常的**
|
||||
- 当前亏损-10.19% < 止损目标-16%
|
||||
- 止损机制正常工作,会在亏损达到-16%时触发
|
||||
|
||||
4. **符合山寨币策略设计**
|
||||
- 山寨币策略设计:宽止损(15%)+ 高盈亏比(4:1)
|
||||
- 允许较大的价格波动,避免被正常波动扫损
|
||||
|
||||
---
|
||||
|
||||
## 📈 止损价分析
|
||||
|
||||
### 止损价计算方式
|
||||
|
||||
根据山寨币策略配置:
|
||||
- `STOP_LOSS_PERCENT = 15%`(固定止损15%)
|
||||
- `ATR_STOP_LOSS_MULTIPLIER = 2.0`(ATR止损2.0倍)
|
||||
|
||||
**实际止损价**:9.6197
|
||||
- 止损距离 = 9.8160 - 9.6197 = 0.1963
|
||||
- 止损百分比 = 0.1963 / 9.8160 = 2.00%
|
||||
- 保证金亏损 = 2.00% × 8 = 16.00%
|
||||
|
||||
**分析**:
|
||||
- 如果使用固定止损15%,止损价应该是:9.8160 × (1 - 0.15/8) = 9.8160 × 0.98125 = 9.6315
|
||||
- 实际止损价9.6197 < 9.6315,说明可能使用了ATR止损
|
||||
- ATR止损可能计算出了更远的止损价(更宽松)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 需要注意的情况
|
||||
|
||||
### 1. 如果亏损继续扩大
|
||||
|
||||
**如果价格继续下跌**:
|
||||
- 当前亏损:-10.19%
|
||||
- 止损目标:-16.00%
|
||||
- **还有5.81%的缓冲空间**
|
||||
|
||||
**建议**:
|
||||
- 如果亏损达到-15%,接近止损目标,可以关注
|
||||
- 如果亏损达到-16%,止损会自动触发
|
||||
|
||||
### 2. 如果止损未及时触发
|
||||
|
||||
**如果价格快速下跌,止损未及时触发**:
|
||||
- 检查WebSocket监控是否正常工作
|
||||
- 检查止损单是否正常挂到交易所
|
||||
- 如果止损单失效,系统会通过WebSocket监控触发平仓
|
||||
|
||||
---
|
||||
|
||||
## 🎯 总结
|
||||
|
||||
### ✅ 当前情况:**正常**
|
||||
|
||||
1. **亏损-10.19%是正常的市场波动**
|
||||
- 价格只下跌了1.27%,这是正常的
|
||||
- 山寨币波动大,1-2%的价格波动很常见
|
||||
|
||||
2. **止损目标-16%符合策略配置**
|
||||
- 接近15%的固定止损设置
|
||||
- 可能是ATR止损计算的结果
|
||||
|
||||
3. **止损机制正常工作**
|
||||
- 当前亏损-10.19% < 止损目标-16%
|
||||
- 止损会在亏损达到-16%时自动触发
|
||||
|
||||
4. **符合山寨币策略设计**
|
||||
- 宽止损(15%)允许较大的价格波动
|
||||
- 避免被正常波动扫损
|
||||
|
||||
### 💡 建议
|
||||
|
||||
1. **继续观察**:如果亏损继续扩大,接近-15%时可以关注
|
||||
2. **信任策略**:止损机制正常工作,会在达到-16%时自动触发
|
||||
3. **不要手动干预**:除非系统故障,否则不要手动平仓
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
180
docs/市场扫描优化分析.md
Normal file
180
docs/市场扫描优化分析.md
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
# 市场扫描优化分析
|
||||
|
||||
## 🔍 当前情况
|
||||
|
||||
### 扫描流程
|
||||
|
||||
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
|
||||
127
docs/市场扫描优化完成总结.md
Normal file
127
docs/市场扫描优化完成总结.md
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
# 市场扫描优化完成总结
|
||||
|
||||
## ✅ 已完成的优化
|
||||
|
||||
### 1. 添加主流币过滤
|
||||
|
||||
**实现位置**:`trading_system/market_scanner.py`
|
||||
|
||||
**功能**:
|
||||
- 在扫描前过滤掉主流币(BTC、ETH、BNB等)
|
||||
- 专注于山寨币,符合策略定位
|
||||
|
||||
**主流币列表**(20个):
|
||||
```python
|
||||
major_coins = {
|
||||
'BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'SOLUSDT', 'XRPUSDT',
|
||||
'ADAUSDT', 'DOGEUSDT', 'DOTUSDT', 'AVAXUSDT', 'MATICUSDT',
|
||||
'LINKUSDT', 'UNIUSDT', 'ATOMUSDT', 'ETCUSDT', 'LTCUSDT',
|
||||
'NEARUSDT', 'APTUSDT', 'ARBUSDT', 'OPUSDT', 'SUIUSDT'
|
||||
}
|
||||
```
|
||||
|
||||
**配置项**:
|
||||
- `EXCLUDE_MAJOR_COINS`: `True`(默认开启)
|
||||
|
||||
### 2. 增加 TOP_N_SYMBOLS
|
||||
|
||||
**优化前**:`TOP_N_SYMBOLS = 5`
|
||||
|
||||
**优化后**:`TOP_N_SYMBOLS = 8`
|
||||
|
||||
**理由**:
|
||||
- `MAX_OPEN_POSITIONS=4`,需要更多候选
|
||||
- 增加选择余地,避免错过好机会
|
||||
- 即使选择8个,最终也可能只交易4个(受持仓限制)
|
||||
|
||||
### 3. 更新配置
|
||||
|
||||
**已更新的文件**:
|
||||
1. `trading_system/config.py` - 默认配置
|
||||
2. `trading_system/market_scanner.py` - 扫描逻辑
|
||||
3. `backend/config_manager.py` - 配置管理器
|
||||
4. `backend/api/routes/config.py` - API配置元数据
|
||||
5. `frontend/src/components/GlobalConfig.jsx` - 前端全局配置
|
||||
6. `frontend/src/components/ConfigPanel.jsx` - 前端用户配置
|
||||
|
||||
---
|
||||
|
||||
## 📊 优化效果
|
||||
|
||||
### 优化前
|
||||
|
||||
- 扫描150个交易对,可能包含主流币
|
||||
- 最终选择5个
|
||||
- 可能错过好机会(选择太少)
|
||||
- 主流币占用扫描资源
|
||||
|
||||
### 优化后
|
||||
|
||||
- 扫描150个交易对,**排除主流币**,专注于山寨币
|
||||
- 最终选择**8个**,给更多选择余地
|
||||
- 减少错过好机会的概率
|
||||
- 节省扫描和分析资源
|
||||
|
||||
---
|
||||
|
||||
## 🎯 预期改进
|
||||
|
||||
### 1. 更专注于山寨币
|
||||
|
||||
- 排除主流币后,扫描结果更符合山寨币策略
|
||||
- 避免主流币占用扫描名额
|
||||
|
||||
### 2. 增加交易机会
|
||||
|
||||
- `TOP_N_SYMBOLS` 从5增加到8,给更多选择余地
|
||||
- 即使选择8个,最终也可能只交易4个(受持仓限制)
|
||||
- 减少错过好机会的概率
|
||||
|
||||
### 3. 提高效率
|
||||
|
||||
- 排除主流币后,减少不必要的扫描和分析
|
||||
- 专注于有潜力的山寨币
|
||||
|
||||
---
|
||||
|
||||
## 🔧 配置说明
|
||||
|
||||
### EXCLUDE_MAJOR_COINS
|
||||
|
||||
- **类型**:`boolean`
|
||||
- **默认值**:`True`
|
||||
- **说明**:是否排除主流币(BTC、ETH、BNB等),专注于山寨币
|
||||
- **建议**:山寨币策略建议开启
|
||||
|
||||
### TOP_N_SYMBOLS
|
||||
|
||||
- **类型**:`number`
|
||||
- **默认值**:`8`(从5增加到8)
|
||||
- **说明**:每次扫描后处理的交易对数量
|
||||
- **建议**:应该 >= `MAX_OPEN_POSITIONS * 1.5`(至少6-8个)
|
||||
|
||||
---
|
||||
|
||||
## 🚀 下一步操作
|
||||
|
||||
1. **重启交易进程**:
|
||||
```bash
|
||||
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
|
||||
```
|
||||
|
||||
2. **验证优化**:
|
||||
```bash
|
||||
# 查看日志,确认主流币被排除
|
||||
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "排除主流币|扫描完成"
|
||||
```
|
||||
|
||||
3. **观察效果**:
|
||||
- 观察扫描结果是否更专注于山寨币
|
||||
- 观察是否增加了交易机会
|
||||
- 观察是否减少了错过好机会的情况
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
253
docs/市场扫描深度分析.md
Normal file
253
docs/市场扫描深度分析.md
Normal file
|
|
@ -0,0 +1,253 @@
|
|||
# 市场扫描深度分析
|
||||
|
||||
## 🤔 问题1:过滤掉主流币会更有利吗?
|
||||
|
||||
### 分析维度
|
||||
|
||||
#### 1. 策略定位分析
|
||||
|
||||
**山寨币策略的特点**:
|
||||
- **高盈亏比(4:1)**:追求大赢家,用少数大单覆盖亏损
|
||||
- **宽止损(15%)**:容忍山寨币高波动
|
||||
- **快速止盈(60%)**:不恋战,快速锁定利润
|
||||
- **严格筛选**:只做流动性最好、信号最强的币种
|
||||
|
||||
**主流币的特点**:
|
||||
- **波动小**:BTC、ETH 波动率通常 < 2%,不符合山寨币策略的宽止损设计
|
||||
- **流动性极好**:价格冲击小,但也不容易有大波动
|
||||
- **趋势稳定**:不容易出现暴涨暴跌,不符合"快速止盈"的设计
|
||||
|
||||
**结论**:✅ **过滤主流币更有利**
|
||||
|
||||
**理由**:
|
||||
1. **策略不匹配**:主流币波动小,不符合山寨币策略的宽止损+高盈亏比设计
|
||||
2. **机会成本**:扫描主流币占用资源,可能错过更好的山寨币机会
|
||||
3. **专注性**:专注于山寨币,策略更清晰
|
||||
|
||||
---
|
||||
|
||||
#### 2. 实际交易表现分析
|
||||
|
||||
**主流币 vs 山寨币的交易表现**:
|
||||
|
||||
| 指标 | 主流币(BTC/ETH) | 山寨币 |
|
||||
|------|------------------|--------|
|
||||
| **波动率** | 1-3% | 5-20% |
|
||||
| **盈亏比潜力** | 1.5:1 | 4:1+ |
|
||||
| **止损触发率** | 低(波动小) | 高(波动大) |
|
||||
| **止盈触发率** | 低(波动小) | 高(波动大) |
|
||||
| **适合策略** | 波段/长期持有 | 高盈亏比狙击 |
|
||||
|
||||
**结论**:✅ **过滤主流币更有利**
|
||||
|
||||
**理由**:
|
||||
- 主流币波动小,很难达到4:1的盈亏比目标
|
||||
- 山寨币波动大,更容易出现暴涨,更容易达到4:1的盈亏比目标
|
||||
|
||||
---
|
||||
|
||||
#### 3. 资源利用分析
|
||||
|
||||
**扫描资源分配**:
|
||||
|
||||
**过滤主流币前**:
|
||||
- 扫描150个交易对
|
||||
- 可能包含10-20个主流币
|
||||
- 实际山寨币:130-140个
|
||||
|
||||
**过滤主流币后**:
|
||||
- 扫描150个交易对(排除主流币)
|
||||
- 实际山寨币:150个
|
||||
- **增加10-20个山寨币的扫描机会**
|
||||
|
||||
**结论**:✅ **过滤主流币更有利**
|
||||
|
||||
**理由**:
|
||||
- 增加10-20个山寨币的扫描机会
|
||||
- 更专注于有潜力的山寨币
|
||||
- 提高找到优质机会的概率
|
||||
|
||||
---
|
||||
|
||||
### 综合结论:过滤主流币更有利 ✅
|
||||
|
||||
**理由总结**:
|
||||
1. **策略匹配**:主流币不符合山寨币策略的宽止损+高盈亏比设计
|
||||
2. **机会成本**:扫描主流币占用资源,可能错过更好的山寨币机会
|
||||
3. **资源利用**:过滤主流币后,增加10-20个山寨币的扫描机会
|
||||
4. **专注性**:专注于山寨币,策略更清晰
|
||||
|
||||
---
|
||||
|
||||
## 🤔 问题2:只扫描150个少吗?
|
||||
|
||||
### 分析维度
|
||||
|
||||
#### 1. 市场覆盖分析
|
||||
|
||||
**币安USDT永续合约总数**:544个
|
||||
|
||||
**扫描150个的覆盖率**:
|
||||
- 覆盖率:150/544 = **27.6%**
|
||||
- 剩余未扫描:394个(72.4%)
|
||||
|
||||
**问题**:
|
||||
- 如果按币安默认顺序,前150个可能包含:
|
||||
- 主流币(10-20个)
|
||||
- 中等市值币(50-80个)
|
||||
- 小市值币(50-80个)
|
||||
|
||||
**可能错过的机会**:
|
||||
- 如果优质山寨币不在前150个中,会错过
|
||||
- 如果按市值排序,小市值优质币可能被排除
|
||||
|
||||
**结论**:⚠️ **可能不够,取决于排序方式**
|
||||
|
||||
---
|
||||
|
||||
#### 2. 筛选效率分析
|
||||
|
||||
**当前筛选流程**:
|
||||
1. 扫描150个交易对
|
||||
2. 初步筛选:28个(通过最小涨跌幅和成交量)
|
||||
3. 详细分析:28个(获取K线和技术指标)
|
||||
4. 最终选择:5-8个(按信号得分排序)
|
||||
|
||||
**筛选比例**:
|
||||
- 初步筛选:28/150 = 18.7%
|
||||
- 最终选择:5-8/150 = 3.3-5.3%
|
||||
|
||||
**分析**:
|
||||
- 如果扫描150个,最终只选择5-8个,说明筛选很严格
|
||||
- 如果增加扫描数量,可能找到更多符合条件的交易对
|
||||
|
||||
**结论**:⚠️ **可能不够,建议增加到200-250**
|
||||
|
||||
---
|
||||
|
||||
#### 3. 性能影响分析
|
||||
|
||||
**扫描150个的性能**:
|
||||
- API请求:批量获取24小时行情(1次)
|
||||
- 详细分析:28个交易对(获取K线和技术指标)
|
||||
- 总耗时:约10-30秒
|
||||
|
||||
**如果增加到250个**:
|
||||
- API请求:批量获取24小时行情(1次,数据量增加)
|
||||
- 初步筛选:可能50-60个
|
||||
- 详细分析:50-60个交易对
|
||||
- 总耗时:约20-60秒
|
||||
|
||||
**分析**:
|
||||
- 性能影响:增加扫描数量会增加扫描时间,但仍在可接受范围内
|
||||
- 收益:可能找到更多优质机会
|
||||
|
||||
**结论**:✅ **可以增加到200-250,性能影响可接受**
|
||||
|
||||
---
|
||||
|
||||
#### 4. 机会成本分析
|
||||
|
||||
**扫描150个 vs 250个**:
|
||||
|
||||
| 指标 | 150个 | 250个 |
|
||||
|------|-------|-------|
|
||||
| **覆盖率** | 27.6% | 46.0% |
|
||||
| **初步筛选** | 28个 | 50-60个 |
|
||||
| **最终选择** | 5-8个 | 8-12个 |
|
||||
| **扫描时间** | 10-30秒 | 20-60秒 |
|
||||
| **错过机会** | 可能错过 | 减少错过 |
|
||||
|
||||
**分析**:
|
||||
- 增加扫描数量,可能找到更多优质机会
|
||||
- 扫描时间增加,但仍在可接受范围内(1小时扫描间隔)
|
||||
- 减少错过好机会的概率
|
||||
|
||||
**结论**:✅ **建议增加到200-250**
|
||||
|
||||
---
|
||||
|
||||
### 综合结论:150个可能不够,建议增加到200-250 ✅
|
||||
|
||||
**理由总结**:
|
||||
1. **覆盖率不足**:150/544 = 27.6%,可能错过72.4%的机会
|
||||
2. **筛选效率**:如果增加扫描数量,可能找到更多符合条件的交易对
|
||||
3. **性能影响可接受**:扫描时间增加,但1小时扫描间隔足够
|
||||
4. **机会成本**:减少错过好机会的概率
|
||||
|
||||
---
|
||||
|
||||
## 🎯 推荐配置
|
||||
|
||||
### 优化后的配置
|
||||
|
||||
```python
|
||||
MAX_SCAN_SYMBOLS = 250 # 从150增加到250(增加覆盖率)
|
||||
TOP_N_SYMBOLS = 8 # 保持8个(给更多选择余地)
|
||||
EXCLUDE_MAJOR_COINS = True # 排除主流币(专注于山寨币)
|
||||
```
|
||||
|
||||
**理由**:
|
||||
1. **增加覆盖率**:250/544 = 46.0%,减少错过机会的概率
|
||||
2. **保持专注**:排除主流币,专注于山寨币
|
||||
3. **给更多选择**:TOP_N_SYMBOLS=8,给更多选择余地
|
||||
|
||||
---
|
||||
|
||||
## 📊 预期效果
|
||||
|
||||
### 优化前
|
||||
|
||||
- 扫描150个,可能包含主流币
|
||||
- 覆盖率:27.6%
|
||||
- 最终选择:5个
|
||||
- 可能错过好机会
|
||||
|
||||
### 优化后
|
||||
|
||||
- 扫描250个,排除主流币,专注于山寨币
|
||||
- 覆盖率:46.0%(增加18.4%)
|
||||
- 最终选择:8个
|
||||
- 减少错过好机会的概率
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 1. 排序方式
|
||||
|
||||
**问题**:如果按币安默认顺序,前250个可能不是最优的
|
||||
|
||||
**建议**:
|
||||
- 如果可能,按24小时成交量排序
|
||||
- 或者按市值排序,但排除主流币
|
||||
|
||||
### 2. 性能影响
|
||||
|
||||
**扫描时间**:
|
||||
- 150个:10-30秒
|
||||
- 250个:20-60秒
|
||||
|
||||
**影响**:
|
||||
- 扫描时间增加,但1小时扫描间隔足够
|
||||
- 性能影响可接受
|
||||
|
||||
### 3. 筛选严格性
|
||||
|
||||
**当前筛选**:
|
||||
- 初步筛选:28/150 = 18.7%
|
||||
- 最终选择:5-8/150 = 3.3-5.3%
|
||||
|
||||
**如果增加到250个**:
|
||||
- 初步筛选:可能50-60个(20-24%)
|
||||
- 最终选择:8-12个(3.2-4.8%)
|
||||
|
||||
**分析**:
|
||||
- 筛选比例基本一致,说明筛选逻辑合理
|
||||
- 增加扫描数量,可能找到更多符合条件的交易对
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
153
docs/扫描效率优化完成总结.md
Normal file
153
docs/扫描效率优化完成总结.md
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
# 扫描效率优化完成总结
|
||||
|
||||
## ✅ 已完成的优化
|
||||
|
||||
### 1. 增加 MAX_SCAN_SYMBOLS
|
||||
|
||||
**优化前**:`MAX_SCAN_SYMBOLS = 150`
|
||||
**优化后**:`MAX_SCAN_SYMBOLS = 250`
|
||||
|
||||
**效果**:
|
||||
- 覆盖率:从 27.6% 提升到 **46.0%**(增加 18.4%)
|
||||
- 减少错过好机会的概率
|
||||
|
||||
**已更新的文件**:
|
||||
1. `trading_system/config.py` - 默认配置
|
||||
2. `backend/config_manager.py` - 配置管理器
|
||||
3. `frontend/src/components/GlobalConfig.jsx` - 前端全局配置
|
||||
4. `frontend/src/components/ConfigPanel.jsx` - 前端用户配置
|
||||
|
||||
---
|
||||
|
||||
### 2. 优化缓存机制
|
||||
|
||||
#### 2.1 增加24小时行情数据缓存TTL
|
||||
|
||||
**优化位置**:`trading_system/binance_client.py`
|
||||
|
||||
**优化前**:`TTL: 30秒`
|
||||
**优化后**:`TTL: 60秒`
|
||||
|
||||
**理由**:
|
||||
- 24小时行情数据变化较慢,可以缓存更长时间
|
||||
- 多个账户可以共用同一个缓存,减少API请求
|
||||
- 提升扫描效率
|
||||
|
||||
#### 2.2 添加技术指标计算结果缓存
|
||||
|
||||
**优化位置**:`trading_system/market_scanner.py`
|
||||
|
||||
**功能**:
|
||||
- 缓存技术指标计算结果(RSI、MACD、布林带、ATR、EMA等)
|
||||
- 基于K线数据的最后更新时间判断缓存是否有效
|
||||
- 如果K线数据没有更新,直接使用缓存的技术指标
|
||||
|
||||
**缓存键**:`indicators:{symbol}:{primary_interval}:{confirm_interval}`
|
||||
|
||||
**缓存TTL**:30秒(与K线缓存一致)
|
||||
|
||||
**效果**:
|
||||
- 减少重复计算技术指标的开销
|
||||
- 多个账户可以共用同一个缓存
|
||||
- 提升扫描效率(特别是扫描250个交易对时)
|
||||
|
||||
---
|
||||
|
||||
## 📊 性能提升
|
||||
|
||||
### 优化前
|
||||
|
||||
**扫描150个交易对**:
|
||||
- 获取24小时行情:1次API请求(缓存30秒)
|
||||
- 详细分析28个:28次K线API请求(有缓存)
|
||||
- 计算技术指标:28次计算(无缓存,每次都计算)
|
||||
- **总耗时**:约10-30秒
|
||||
|
||||
### 优化后
|
||||
|
||||
**扫描250个交易对**:
|
||||
- 获取24小时行情:1次API请求(缓存60秒,多个账户共用)
|
||||
- 详细分析50-60个:50-60次K线API请求(有缓存,多个账户共用)
|
||||
- 计算技术指标:50-60次计算(有缓存,多个账户共用)
|
||||
- **总耗时**:约15-40秒(虽然扫描数量增加,但缓存优化减少了实际计算时间)
|
||||
|
||||
**性能提升**:
|
||||
- 24小时行情缓存TTL增加,减少API请求
|
||||
- 技术指标计算结果缓存,减少重复计算
|
||||
- 多个账户可以共用缓存,进一步提升效率
|
||||
|
||||
---
|
||||
|
||||
## 🎯 缓存策略
|
||||
|
||||
### 1. 24小时行情数据缓存
|
||||
|
||||
- **缓存键**:`ticker_24h:all`
|
||||
- **TTL**:60秒
|
||||
- **共享**:所有账户共用
|
||||
- **更新频率**:每60秒更新一次
|
||||
|
||||
### 2. K线数据缓存
|
||||
|
||||
- **缓存键**:`klines:{symbol}:{interval}:{limit}`
|
||||
- **TTL**:根据interval动态设置(1h=60秒,4h=300秒)
|
||||
- **共享**:所有账户共用
|
||||
- **更新频率**:根据interval动态更新
|
||||
|
||||
### 3. 技术指标计算结果缓存
|
||||
|
||||
- **缓存键**:`indicators:{symbol}:{primary_interval}:{confirm_interval}`
|
||||
- **TTL**:30秒
|
||||
- **共享**:所有账户共用
|
||||
- **更新频率**:当K线数据更新时自动失效
|
||||
|
||||
---
|
||||
|
||||
## 📈 预期效果
|
||||
|
||||
### 1. 扫描覆盖率提升
|
||||
|
||||
- **优化前**:150/544 = 27.6%
|
||||
- **优化后**:250/544 = **46.0%**(增加18.4%)
|
||||
- **效果**:减少错过好机会的概率
|
||||
|
||||
### 2. 扫描效率提升
|
||||
|
||||
- **优化前**:每次扫描都需要重新计算技术指标
|
||||
- **优化后**:技术指标计算结果缓存,减少重复计算
|
||||
- **效果**:虽然扫描数量增加,但实际耗时增加不多
|
||||
|
||||
### 3. 多账户效率提升
|
||||
|
||||
- **优化前**:每个账户独立扫描,重复计算
|
||||
- **优化后**:多个账户共用缓存,减少重复计算
|
||||
- **效果**:多个账户同时扫描时,效率显著提升
|
||||
|
||||
---
|
||||
|
||||
## 🚀 下一步操作
|
||||
|
||||
1. **重启交易进程**:
|
||||
```bash
|
||||
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
|
||||
```
|
||||
|
||||
2. **验证优化**:
|
||||
```bash
|
||||
# 查看日志,确认扫描数量增加到250
|
||||
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "限制扫描数量|排除主流币|扫描完成"
|
||||
|
||||
# 查看缓存使用情况
|
||||
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep -E "使用缓存|已缓存|从Redis缓存"
|
||||
```
|
||||
|
||||
3. **观察效果**:
|
||||
- 观察扫描时间是否在可接受范围内(15-40秒)
|
||||
- 观察是否找到了更多优质机会
|
||||
- 观察缓存命中率
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
202
docs/扫描时间对齐分析.md
Normal file
202
docs/扫描时间对齐分析.md
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
# 扫描时间对齐分析
|
||||
|
||||
## 🤔 问题:是否需要对齐扫描时间?
|
||||
|
||||
### 当前情况
|
||||
|
||||
- **account2**:下单胜率高,单子多
|
||||
- **account3/account4**:下单很少,没有止盈
|
||||
|
||||
**可能原因**:
|
||||
- 不同账户在不同时间启动,导致扫描时间不同
|
||||
- 扫描时间不同,可能错过最佳入场时机
|
||||
|
||||
---
|
||||
|
||||
## ⚖️ 对齐时间 vs 不对齐时间
|
||||
|
||||
### 方案1:对齐扫描时间(所有账户在同一时间扫描)
|
||||
|
||||
#### ✅ 优点
|
||||
|
||||
1. **机会均等**
|
||||
- 所有账户在同一时间扫描,机会均等
|
||||
- 避免因启动时间不同导致的差异
|
||||
|
||||
2. **结果一致**
|
||||
- 扫描结果更一致,便于对比分析
|
||||
- 所有账户看到相同的市场状态
|
||||
|
||||
3. **可预测性**
|
||||
- 扫描时间可预测(如每小时的整点)
|
||||
- 便于监控和调试
|
||||
|
||||
4. **公平性**
|
||||
- 所有账户在同一时间点看到相同的交易机会
|
||||
- 避免"先到先得"的不公平
|
||||
|
||||
#### ❌ 缺点
|
||||
|
||||
1. **减少多变性**
|
||||
- 所有账户在同一时间扫描,可能都扫描到相同的交易对
|
||||
- 如果市场在某个时间点出现好机会,所有账户都会同时下单
|
||||
|
||||
2. **订单竞争**
|
||||
- 多个账户同时下单同一个币种,可能导致:
|
||||
- 订单竞争(如果多个账户都想买同一个币种)
|
||||
- 价格冲击(大量订单同时进入市场)
|
||||
- 滑点增加
|
||||
|
||||
3. **市场冲击**
|
||||
- 如果多个账户同时下单,可能对市场价格造成冲击
|
||||
- 特别是在小市值币种上,影响更明显
|
||||
|
||||
4. **缺乏分散**
|
||||
- 所有账户在同一时间点操作,缺乏时间分散
|
||||
- 如果市场在某个时间点出现异常,所有账户都会受影响
|
||||
|
||||
---
|
||||
|
||||
### 方案2:不对齐扫描时间(保持当前逻辑)
|
||||
|
||||
#### ✅ 优点
|
||||
|
||||
1. **增加多变性**
|
||||
- 不同账户在不同时间扫描,可能扫描到不同的交易对
|
||||
- 增加交易机会的多样性
|
||||
|
||||
2. **分散订单时间**
|
||||
- 订单时间分散,减少价格冲击
|
||||
- 避免多个账户同时下单导致的滑点
|
||||
|
||||
3. **风险分散**
|
||||
- 如果某个账户错过了机会,其他账户可能在不同时间捕捉到
|
||||
- 如果市场在某个时间点出现异常,不会所有账户都受影响
|
||||
|
||||
4. **更接近真实交易**
|
||||
- 真实交易中,不同交易者也会在不同时间入场
|
||||
- 不对齐时间更符合市场实际情况
|
||||
|
||||
#### ❌ 缺点
|
||||
|
||||
1. **机会不均等**
|
||||
- 不同账户在不同时间扫描,机会不均等
|
||||
- 某些账户可能因为启动时间差而错过最佳入场时机
|
||||
|
||||
2. **难以对比分析**
|
||||
- 因为扫描时间不同,难以对比不同账户的表现
|
||||
- 可能误判为配置问题,实际上是扫描时间问题
|
||||
|
||||
3. **可能错过机会**
|
||||
- 如果某个账户在信号最强时扫描并下单
|
||||
- 其他账户在信号减弱后扫描,可能信号强度不足
|
||||
|
||||
---
|
||||
|
||||
## 🎯 推荐方案
|
||||
|
||||
### 推荐:**不对齐扫描时间**(保持当前逻辑)
|
||||
|
||||
**理由**:
|
||||
|
||||
1. **减少市场冲击**
|
||||
- 多个账户同时下单可能导致价格冲击和滑点
|
||||
- 分散订单时间更有利于执行
|
||||
|
||||
2. **增加多变性**
|
||||
- 不同账户在不同时间扫描,可能捕捉到不同的交易机会
|
||||
- 增加交易机会的多样性
|
||||
|
||||
3. **风险分散**
|
||||
- 如果市场在某个时间点出现异常,不会所有账户都受影响
|
||||
- 分散风险更有利于整体稳定性
|
||||
|
||||
4. **更符合实际情况**
|
||||
- 真实交易中,不同交易者也会在不同时间入场
|
||||
- 不对齐时间更符合市场实际情况
|
||||
|
||||
---
|
||||
|
||||
## 🔍 当前问题的真正原因
|
||||
|
||||
### 可能不是扫描时间问题
|
||||
|
||||
如果 account3/account4 下单很少,可能的原因:
|
||||
|
||||
1. **配置差异**
|
||||
- `MIN_SIGNAL_STRENGTH` 设置不同
|
||||
- `AUTO_TRADE_ALLOW_4H_NEUTRAL` 设置不同
|
||||
- 其他配置项不同
|
||||
|
||||
2. **账户余额不足**
|
||||
- 余额不足,无法满足最小仓位要求
|
||||
- 已达到最大持仓数或每日限额
|
||||
|
||||
3. **市场时机**
|
||||
- 启动时市场状态不佳
|
||||
- 扫描到的信号强度不足
|
||||
|
||||
4. **风险控制限制**
|
||||
- 已达到每日开仓限额
|
||||
- 已达到最大持仓数
|
||||
|
||||
---
|
||||
|
||||
## ✅ 建议
|
||||
|
||||
### 1. 保持不对齐扫描时间
|
||||
|
||||
**理由**:
|
||||
- 减少市场冲击
|
||||
- 增加多变性
|
||||
- 风险分散
|
||||
|
||||
### 2. 检查配置差异
|
||||
|
||||
**重点检查**:
|
||||
- `MIN_SIGNAL_STRENGTH`:是否一致
|
||||
- `AUTO_TRADE_ALLOW_4H_NEUTRAL`:是否一致
|
||||
- `TOP_N_SYMBOLS`:是否一致
|
||||
- 其他关键配置项
|
||||
|
||||
### 3. 检查账户余额
|
||||
|
||||
**检查项**:
|
||||
- 账户余额是否充足
|
||||
- 是否满足最小仓位要求
|
||||
- 是否已达到最大持仓数或每日限额
|
||||
|
||||
### 4. 检查市场扫描结果
|
||||
|
||||
**检查项**:
|
||||
- 扫描到的交易对数量
|
||||
- 信号强度分布
|
||||
- 被过滤的原因
|
||||
|
||||
---
|
||||
|
||||
## 📊 结论
|
||||
|
||||
### 不建议对齐扫描时间
|
||||
|
||||
**理由**:
|
||||
1. **减少市场冲击**:分散订单时间更有利于执行
|
||||
2. **增加多变性**:不同账户在不同时间扫描,可能捕捉到不同的交易机会
|
||||
3. **风险分散**:如果市场在某个时间点出现异常,不会所有账户都受影响
|
||||
4. **更符合实际情况**:真实交易中,不同交易者也会在不同时间入场
|
||||
|
||||
### 当前问题的真正原因
|
||||
|
||||
**更可能是配置差异,而不是扫描时间问题**
|
||||
|
||||
**建议**:
|
||||
1. 检查 account3/account4 的配置是否与 account2 一致
|
||||
2. 检查账户余额是否充足
|
||||
3. 检查风险控制限制
|
||||
4. 检查市场扫描结果
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
210
docs/扫描时间差异分析.md
Normal file
210
docs/扫描时间差异分析.md
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
# 扫描时间差异分析
|
||||
|
||||
## 🔍 问题分析
|
||||
|
||||
### 扫描逻辑
|
||||
|
||||
根据代码(`trading_system/strategy.py`):
|
||||
1. **启动后立即执行第一次扫描**
|
||||
2. **扫描完成后,等待 `SCAN_INTERVAL` 秒(默认3600秒=1小时)**
|
||||
3. **然后执行下一次扫描**
|
||||
|
||||
### 问题场景
|
||||
|
||||
如果不同账户在不同时间启动:
|
||||
|
||||
**示例**:
|
||||
- **account2** 在 10:00 启动
|
||||
- 第一次扫描:10:00
|
||||
- 下次扫描:11:00
|
||||
- 再下次:12:00
|
||||
|
||||
- **account3** 在 10:30 启动
|
||||
- 第一次扫描:10:30
|
||||
- 下次扫描:11:30
|
||||
- 再下次:12:30
|
||||
|
||||
- **account4** 在 11:00 启动
|
||||
- 第一次扫描:11:00
|
||||
- 下次扫描:12:00
|
||||
- 再下次:13:00
|
||||
|
||||
### 影响分析
|
||||
|
||||
#### 1. 扫描时间不同导致的问题
|
||||
|
||||
**问题**:
|
||||
- 不同账户在不同时间扫描市场
|
||||
- 可能扫描到不同的交易对(市场在变化)
|
||||
- 可能扫描到不同的信号强度
|
||||
- 可能错过某些交易机会
|
||||
|
||||
**示例**:
|
||||
- 10:00 时,BTCUSDT 出现强信号(信号强度8)
|
||||
- account2 在 10:00 扫描,发现并下单
|
||||
- account3 在 10:30 扫描,BTCUSDT 信号可能已经减弱(信号强度5)
|
||||
- account3 可能因为信号强度不足而跳过
|
||||
|
||||
#### 2. 为什么 account3/account4 下单少?
|
||||
|
||||
**可能原因**:
|
||||
1. **扫描时间不同,错过了最佳入场时机**
|
||||
- account2 在信号最强时扫描并下单
|
||||
- account3/account4 在信号减弱后扫描,信号强度不足
|
||||
|
||||
2. **市场变化导致信号过滤**
|
||||
- 10:00 时市场状态是 `trending`
|
||||
- 10:30 时市场状态可能变成 `ranging` 或 `neutral`
|
||||
- 如果 `AUTO_TRADE_ONLY_TRENDING=True`,会被过滤
|
||||
|
||||
3. **4H趋势变化**
|
||||
- 10:00 时 4H 趋势是 `up`
|
||||
- 10:30 时 4H 趋势可能变成 `neutral`
|
||||
- 如果 `AUTO_TRADE_ALLOW_4H_NEUTRAL=False`(旧配置),会被过滤
|
||||
|
||||
#### 3. 为什么没有止盈?
|
||||
|
||||
**可能原因**:
|
||||
1. **持仓很少**
|
||||
- 如果下单很少,持仓自然就少
|
||||
- 没有持仓,就没有止盈机会
|
||||
|
||||
2. **止盈价设置过高**
|
||||
- 如果止盈价设置过高,价格未达到
|
||||
- 例如:止盈价60%,但价格只涨了30%
|
||||
|
||||
3. **移动止损过早触发**
|
||||
- 如果移动止损过早触发,可能在达到止盈前就被平仓
|
||||
|
||||
4. **手动平仓干扰**
|
||||
- 如果手动平仓过早,可能导致止盈未触发
|
||||
|
||||
---
|
||||
|
||||
## ✅ 解决方案
|
||||
|
||||
### 方案1:同步扫描时间(推荐)
|
||||
|
||||
**思路**:让所有账户在相同的时间点扫描市场
|
||||
|
||||
**实现方式**:
|
||||
1. **对齐到整点**:所有账户在整点(如 10:00、11:00、12:00)扫描
|
||||
2. **对齐到固定间隔**:所有账户在固定间隔(如每小时的0分、30分)扫描
|
||||
|
||||
**修改代码**:
|
||||
```python
|
||||
# 在 strategy.py 中,修改等待逻辑
|
||||
scan_interval = config.TRADING_CONFIG.get('SCAN_INTERVAL', 3600)
|
||||
|
||||
# 计算到下一个整点的时间
|
||||
now = datetime.now()
|
||||
next_hour = (now.replace(minute=0, second=0, microsecond=0) + timedelta(hours=1))
|
||||
wait_seconds = (next_hour - now).total_seconds()
|
||||
|
||||
logger.info(f"等待到下一个整点({next_hour.strftime('%H:%M:%S')})进行扫描,剩余 {wait_seconds:.0f} 秒...")
|
||||
await asyncio.sleep(wait_seconds)
|
||||
```
|
||||
|
||||
**优点**:
|
||||
- 所有账户在同一时间扫描,机会均等
|
||||
- 避免因扫描时间不同导致的差异
|
||||
|
||||
**缺点**:
|
||||
- 需要等待到下一个整点,可能延迟第一次扫描
|
||||
|
||||
### 方案2:缩短扫描间隔
|
||||
|
||||
**思路**:缩短 `SCAN_INTERVAL`,让扫描更频繁
|
||||
|
||||
**实现方式**:
|
||||
- 将 `SCAN_INTERVAL` 从 3600 秒(1小时)改为 1800 秒(30分钟)或更短
|
||||
|
||||
**优点**:
|
||||
- 扫描更频繁,减少错过机会的概率
|
||||
- 不同账户的扫描时间差异影响更小
|
||||
|
||||
**缺点**:
|
||||
- 增加API调用频率
|
||||
- 可能增加系统负载
|
||||
|
||||
### 方案3:保持现状,但优化配置
|
||||
|
||||
**思路**:保持扫描时间不同,但优化配置以减少差异
|
||||
|
||||
**实现方式**:
|
||||
1. **降低信号强度阈值**:`MIN_SIGNAL_STRENGTH` 从 7 降到 5
|
||||
2. **允许4H中性趋势**:`AUTO_TRADE_ALLOW_4H_NEUTRAL=True`
|
||||
3. **允许震荡行情**:`AUTO_TRADE_ONLY_TRENDING=False`(不推荐)
|
||||
|
||||
**优点**:
|
||||
- 不需要修改代码
|
||||
- 可以立即生效
|
||||
|
||||
**缺点**:
|
||||
- 仍然存在扫描时间差异
|
||||
- 可能降低信号质量
|
||||
|
||||
---
|
||||
|
||||
## 🎯 推荐方案
|
||||
|
||||
### 推荐:方案1(同步扫描时间)
|
||||
|
||||
**理由**:
|
||||
1. **公平性**:所有账户在同一时间扫描,机会均等
|
||||
2. **一致性**:扫描结果更一致,便于对比分析
|
||||
3. **可预测性**:扫描时间可预测,便于监控
|
||||
|
||||
**实现步骤**:
|
||||
1. 修改 `trading_system/strategy.py`,让扫描时间对齐到整点
|
||||
2. 重启所有交易进程
|
||||
3. 观察效果
|
||||
|
||||
---
|
||||
|
||||
## 📊 当前情况分析
|
||||
|
||||
### account2 表现好
|
||||
|
||||
**可能原因**:
|
||||
1. **启动时间好**:在信号最强时启动并扫描
|
||||
2. **市场时机好**:启动时市场状态良好
|
||||
3. **信号质量高**:扫描到的信号强度足够
|
||||
|
||||
### account3/account4 表现差
|
||||
|
||||
**可能原因**:
|
||||
1. **启动时间差**:在信号减弱后启动并扫描
|
||||
2. **市场时机差**:启动时市场状态不佳
|
||||
3. **信号质量低**:扫描到的信号强度不足
|
||||
|
||||
---
|
||||
|
||||
## 🔧 立即行动
|
||||
|
||||
### 1. 检查启动时间
|
||||
|
||||
```bash
|
||||
# 查看各账户的启动时间
|
||||
grep -E "交易策略开始执行|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | head -n 10
|
||||
```
|
||||
|
||||
### 2. 检查扫描时间
|
||||
|
||||
```bash
|
||||
# 查看各账户的扫描时间
|
||||
grep -E "等待.*秒后进行下次扫描|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
|
||||
```
|
||||
|
||||
### 3. 检查扫描结果
|
||||
|
||||
```bash
|
||||
# 查看各账户的扫描结果
|
||||
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
222
docs/账户交易差异分析.md
Normal file
222
docs/账户交易差异分析.md
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
# 账户交易差异分析
|
||||
|
||||
## 📊 问题描述
|
||||
|
||||
- **account2**:下单胜率高,单子多
|
||||
- **account3**:下单很少,没有止盈
|
||||
- **account4**:下单很少,没有止盈
|
||||
|
||||
---
|
||||
|
||||
## 🔍 可能原因分析
|
||||
|
||||
### 1. 配置差异
|
||||
|
||||
**检查项**:
|
||||
- `MIN_SIGNAL_STRENGTH`:信号强度阈值
|
||||
- `AUTO_TRADE_ALLOW_4H_NEUTRAL`:是否允许4H中性趋势
|
||||
- `AUTO_TRADE_ONLY_TRENDING`:是否只交易趋势行情
|
||||
- `MIN_VOLUME_24H`:最小成交量要求
|
||||
- `TOP_N_SYMBOLS`:只做最强N个
|
||||
- `MAX_DAILY_ENTRIES`:每日最大开仓次数
|
||||
- `MAX_OPEN_POSITIONS`:最大持仓数
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看account2、account3、account4的配置
|
||||
# 在前端配置页面查看,或通过API查询
|
||||
```
|
||||
|
||||
### 2. 账户余额差异
|
||||
|
||||
**问题**:
|
||||
- 如果账户余额不足,可能无法开仓
|
||||
- 如果余额太小,可能无法满足最小仓位要求
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看账户余额
|
||||
grep -E "账户余额|余额|balance" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
|
||||
```
|
||||
|
||||
### 3. 市场扫描结果差异
|
||||
|
||||
**问题**:
|
||||
- 不同账户可能扫描到不同的交易对
|
||||
- 信号强度可能不同
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看扫描结果
|
||||
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30
|
||||
```
|
||||
|
||||
### 4. 信号强度差异
|
||||
|
||||
**问题**:
|
||||
- 如果 `MIN_SIGNAL_STRENGTH` 设置过高,可能过滤掉大部分信号
|
||||
- account3和account4可能信号强度不足
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看信号强度
|
||||
grep -E "技术指标分析|信号强度|should_trade" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30
|
||||
```
|
||||
|
||||
### 5. 风险控制限制
|
||||
|
||||
**问题**:
|
||||
- `MAX_DAILY_ENTRIES`:可能已达到每日限额
|
||||
- `MAX_OPEN_POSITIONS`:可能已达到最大持仓数
|
||||
- `MAX_TOTAL_POSITION_PERCENT`:可能已达到总仓位上限
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看风险控制日志
|
||||
grep -E "风险检查|已达到最大|每日限额" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
|
||||
```
|
||||
|
||||
### 6. 止盈未触发的原因
|
||||
|
||||
**问题**:
|
||||
- 止盈价设置过高,价格未达到
|
||||
- 移动止损过早触发,导致止盈未触发
|
||||
- 手动平仓过早,导致止盈未触发
|
||||
|
||||
**检查方法**:
|
||||
```bash
|
||||
# 查看止盈相关日志
|
||||
grep -E "止盈|take_profit|触发.*目标" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 30
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 排查步骤
|
||||
|
||||
### 步骤1:检查配置差异
|
||||
|
||||
1. **前端检查**:
|
||||
- 登录前端,分别查看 account2、account3、account4 的配置
|
||||
- 对比关键配置项是否一致
|
||||
|
||||
2. **日志检查**:
|
||||
```bash
|
||||
# 查看启动时的配置输出
|
||||
grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_2.log | head -n 60
|
||||
grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_3.log | head -n 60
|
||||
grep -A 50 "交易配置(当前策略)" /www/wwwroot/autosys_new/logs/trading_4.log | head -n 60
|
||||
```
|
||||
|
||||
### 步骤2:检查市场扫描
|
||||
|
||||
```bash
|
||||
# 查看最近的扫描活动
|
||||
grep -E "开始扫描|扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
|
||||
grep -E "开始扫描|扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
|
||||
```
|
||||
|
||||
### 步骤3:检查交易信号
|
||||
|
||||
```bash
|
||||
# 查看交易信号分析
|
||||
grep -E "处理交易对|技术指标分析|跳过自动交易" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
|
||||
grep -E "处理交易对|技术指标分析|跳过自动交易" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
|
||||
```
|
||||
|
||||
### 步骤4:检查风险控制
|
||||
|
||||
```bash
|
||||
# 查看风险控制日志
|
||||
grep -E "风险检查|余额不足|已达到最大|每日限额" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
|
||||
grep -E "风险检查|余额不足|已达到最大|每日限额" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
|
||||
```
|
||||
|
||||
### 步骤5:检查止盈情况
|
||||
|
||||
```bash
|
||||
# 查看止盈相关日志
|
||||
grep -E "止盈|take_profit|触发.*目标|自动平仓(止盈)" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 20
|
||||
grep -E "止盈|take_profit|触发.*目标|自动平仓(止盈)" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 解决方案
|
||||
|
||||
### 方案1:统一配置(推荐)
|
||||
|
||||
**如果配置不同**:
|
||||
1. 在全局配置页面应用"山寨币狙击(高盈亏比)"策略
|
||||
2. 确保所有账户使用相同的配置
|
||||
3. 重启所有交易进程
|
||||
|
||||
### 方案2:检查账户余额
|
||||
|
||||
**如果余额不足**:
|
||||
1. 检查账户余额是否充足
|
||||
2. 确保余额满足最小仓位要求(`MIN_MARGIN_USDT`)
|
||||
|
||||
### 方案3:降低信号强度阈值
|
||||
|
||||
**如果信号强度不足**:
|
||||
1. 检查 `MIN_SIGNAL_STRENGTH` 是否过高
|
||||
2. 如果 account3/account4 的信号强度都是5,而 `MIN_SIGNAL_STRENGTH=7`,会被过滤
|
||||
3. 建议统一设置为5
|
||||
|
||||
### 方案4:检查止盈逻辑
|
||||
|
||||
**如果止盈未触发**:
|
||||
1. 检查止盈价设置是否正确
|
||||
2. 检查移动止损是否过早触发
|
||||
3. 检查是否有手动平仓干扰
|
||||
|
||||
---
|
||||
|
||||
## 🎯 快速检查命令
|
||||
|
||||
```bash
|
||||
# 1. 检查配置差异
|
||||
echo "=== Account 2 配置 ==="
|
||||
grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 5
|
||||
|
||||
echo "=== Account 3 配置 ==="
|
||||
grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 5
|
||||
|
||||
echo "=== Account 4 配置 ==="
|
||||
grep -E "MIN_SIGNAL_STRENGTH|AUTO_TRADE_ALLOW_4H_NEUTRAL|TOP_N_SYMBOLS" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 5
|
||||
|
||||
# 2. 检查扫描结果
|
||||
echo "=== Account 2 扫描 ==="
|
||||
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 5
|
||||
|
||||
echo "=== Account 3 扫描 ==="
|
||||
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 5
|
||||
|
||||
echo "=== Account 4 扫描 ==="
|
||||
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 5
|
||||
|
||||
# 3. 检查交易信号
|
||||
echo "=== Account 2 信号 ==="
|
||||
grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_2.log | tail -n 10
|
||||
|
||||
echo "=== Account 3 信号 ==="
|
||||
grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_3.log | tail -n 10
|
||||
|
||||
echo "=== Account 4 信号 ==="
|
||||
grep -E "处理交易对|开仓成功" /www/wwwroot/autosys_new/logs/trading_4.log | tail -n 10
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 建议
|
||||
|
||||
1. **统一配置**:确保所有账户使用相同的策略配置
|
||||
2. **检查余额**:确保账户余额充足
|
||||
3. **降低门槛**:如果信号强度不足,降低 `MIN_SIGNAL_STRENGTH`
|
||||
4. **检查止盈**:确认止盈逻辑正常工作
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成时间
|
||||
|
||||
2026-01-25
|
||||
Loading…
Reference in New Issue
Block a user