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

5.6 KiB
Raw Permalink Blame History

扫描时间差异分析

🔍 问题分析

扫描逻辑

根据代码(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 时市场状态可能变成 rangingneutral
    • 如果 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分扫描

修改代码

# 在 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. 检查启动时间

# 查看各账户的启动时间
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