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