auto_trade_sys/docs/archive/TRADE_STATUS_SYNC_FIX.md
薇薇安 225cb436d1 feat(trades): 添加可对账记录筛选功能以确保与币安一致
在获取交易记录和统计时,新增 `reconciled_only` 参数,默认值为 true,确保仅返回可对账的交易记录(包含 entry_order_id 和 exit_order_id)。此改动有助于提高统计的准确性,确保系统盈亏与币安一致。
2026-02-16 12:42:58 +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