auto_trade_sys/docs/扫描时间差异分析.md
薇薇安 83e628b611 a
2026-01-25 16:32:08 +08:00

211 lines
5.6 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.

# 扫描时间差异分析
## 🔍 问题分析
### 扫描逻辑
根据代码(`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