This commit is contained in:
薇薇安 2026-01-25 16:32:08 +08:00
parent 07d3bf4398
commit 83e628b611
8 changed files with 1482 additions and 0 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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