auto_trade_sys/docs/TRADE_STATUS_SYNC_FIX.md
薇薇安 86b85c2609 a
2026-01-25 11:19:39 +08:00

2.3 KiB
Raw Blame History

订单状态同步问题分析与修复

🔍 问题分析

用户反映:订单记录中的订单状态没有及时同步,明明已经平仓了,但还是显示持仓状态。

可能的原因

  1. 自动平仓时的双重更新问题

    • _check_single_position 中先更新数据库第1926行
    • 然后调用 close_position第1943行
    • close_position 中如果币安还有持仓会再次更新数据库第615行
    • 但如果币安已经没有持仓了,close_position 会检查并更新第432-492行
    • 问题:如果 close_position 执行时币安订单还没完全成交,可能状态不一致
  2. 同步间隔太长

    • POSITION_SYNC_INTERVAL = 300秒5分钟
    • 如果自动平仓后数据库更新失败需要等5分钟才能同步
  3. 前端没有自动刷新

    • TradeList 组件只在加载时获取一次数据
    • 没有定时刷新机制
    • 用户需要手动刷新页面才能看到最新状态
  4. 平仓订单可能失败但数据库已更新

    • 如果先更新数据库,然后平仓订单失败,状态会不一致

🔧 修复方案

方案一:优化自动平仓流程(推荐)

问题_check_single_position 中先更新数据库,然后调用 close_position,但 close_position 可能因为币安订单还没成交而无法正确更新。

修复

  1. _check_single_position 中,不要先更新数据库
  2. 只调用 close_position,让 close_position 负责更新数据库
  3. 确保 close_position 在平仓成功后立即更新数据库

方案二:缩短同步间隔

当前300秒5分钟 建议60-120秒1-2分钟

方案三:前端自动刷新

添加TradeList 组件定时刷新每30秒或1分钟

方案四:平仓后立即同步

添加:在 close_position 成功后,立即触发一次状态同步

📝 具体修改

1. 优化自动平仓流程

修改 _check_single_position 方法,移除提前更新数据库的逻辑,让 close_position 统一处理。

2. 缩短同步间隔

POSITION_SYNC_INTERVAL 从 300秒 改为 60秒1分钟

3. 前端自动刷新

TradeList 组件中添加定时刷新机制

4. 平仓后立即同步

close_position 成功后,立即调用 sync_positions_with_binance