auto_trade_sys/TRADE_STATUS_SYNC_FIX.md
薇薇安 11e3532ac3 a
2026-01-17 20:23:49 +08:00

69 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 订单状态同步问题分析与修复
## 🔍 问题分析
用户反映:订单记录中的订单状态没有及时同步,明明已经平仓了,但还是显示持仓状态。
### 可能的原因
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`