5.6 KiB
5.6 KiB
扫描时间差异分析
🔍 问题分析
扫描逻辑
根据代码(trading_system/strategy.py):
- 启动后立即执行第一次扫描
- 扫描完成后,等待
SCAN_INTERVAL秒(默认3600秒=1小时) - 然后执行下一次扫描
问题场景
如果不同账户在不同时间启动:
示例:
-
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 下单少?
可能原因:
-
扫描时间不同,错过了最佳入场时机
- account2 在信号最强时扫描并下单
- account3/account4 在信号减弱后扫描,信号强度不足
-
市场变化导致信号过滤
- 10:00 时市场状态是
trending - 10:30 时市场状态可能变成
ranging或neutral - 如果
AUTO_TRADE_ONLY_TRENDING=True,会被过滤
- 10:00 时市场状态是
-
4H趋势变化
- 10:00 时 4H 趋势是
up - 10:30 时 4H 趋势可能变成
neutral - 如果
AUTO_TRADE_ALLOW_4H_NEUTRAL=False(旧配置),会被过滤
- 10:00 时 4H 趋势是
3. 为什么没有止盈?
可能原因:
-
持仓很少
- 如果下单很少,持仓自然就少
- 没有持仓,就没有止盈机会
-
止盈价设置过高
- 如果止盈价设置过高,价格未达到
- 例如:止盈价60%,但价格只涨了30%
-
移动止损过早触发
- 如果移动止损过早触发,可能在达到止盈前就被平仓
-
手动平仓干扰
- 如果手动平仓过早,可能导致止盈未触发
✅ 解决方案
方案1:同步扫描时间(推荐)
思路:让所有账户在相同的时间点扫描市场
实现方式:
- 对齐到整点:所有账户在整点(如 10:00、11:00、12:00)扫描
- 对齐到固定间隔:所有账户在固定间隔(如每小时的0分、30分)扫描
修改代码:
# 在 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:保持现状,但优化配置
思路:保持扫描时间不同,但优化配置以减少差异
实现方式:
- 降低信号强度阈值:
MIN_SIGNAL_STRENGTH从 7 降到 5 - 允许4H中性趋势:
AUTO_TRADE_ALLOW_4H_NEUTRAL=True - 允许震荡行情:
AUTO_TRADE_ONLY_TRENDING=False(不推荐)
优点:
- 不需要修改代码
- 可以立即生效
缺点:
- 仍然存在扫描时间差异
- 可能降低信号质量
🎯 推荐方案
推荐:方案1(同步扫描时间)
理由:
- 公平性:所有账户在同一时间扫描,机会均等
- 一致性:扫描结果更一致,便于对比分析
- 可预测性:扫描时间可预测,便于监控
实现步骤:
- 修改
trading_system/strategy.py,让扫描时间对齐到整点 - 重启所有交易进程
- 观察效果
📊 当前情况分析
account2 表现好
可能原因:
- 启动时间好:在信号最强时启动并扫描
- 市场时机好:启动时市场状态良好
- 信号质量高:扫描到的信号强度足够
account3/account4 表现差
可能原因:
- 启动时间差:在信号减弱后启动并扫描
- 市场时机差:启动时市场状态不佳
- 信号质量低:扫描到的信号强度不足
🔧 立即行动
1. 检查启动时间
# 查看各账户的启动时间
grep -E "交易策略开始执行|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | head -n 10
2. 检查扫描时间
# 查看各账户的扫描时间
grep -E "等待.*秒后进行下次扫描|开始扫描市场" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
3. 检查扫描结果
# 查看各账户的扫描结果
grep -E "扫描完成|找到.*个符合条件的交易对" /www/wwwroot/autosys_new/logs/trading_*.log | tail -n 20
✅ 完成时间
2026-01-25