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