stock-ai-agent/backend/ABNORMAL_ORDERS_README.md
2026-02-21 19:39:19 +08:00

125 lines
2.9 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. **OPEN 状态但成交价为 0 的订单**:这些订单被系统认为是"已成交"但价格无效,导致平仓计算时显示 `$0.00`
2. **PENDING 状态但有成交价的订单**:状态不一致,可能导致重复处理
## 使用方法
### 方法 1: Python 脚本(推荐)
在服务器上执行:
```bash
cd /path/to/Stock_Agent/backend
# 检查异常订单(不会修改数据)
python3 check_abnormal_orders.py
# 自动修复异常订单(会删除/修改数据,需要确认)
python3 fix_abnormal_orders.py
```
### 方法 2: SQL 查询
如果有 SQLite 命令行工具:
```bash
cd /path/to/Stock_Agent/backend
# 需要先确认数据库路径
sqlite3 /path/to/your/database.db < check_abnormal_orders.sql
```
或者直接进入 SQLite
```bash
sqlite3 /path/to/your/database.db
# 然后复制粘贴 check_abnormal_orders.sql 中的查询语句
```
### 方法 3: Bash 脚本
```bash
cd /path/to/Stock_Agent/backend
# 需要指定数据库路径
./check_orders.sh /path/to/your/database.db
```
## 检查结果说明
脚本会检查以下问题:
| 问题 | 说明 | 影响 |
|------|------|------|
| OPEN 状态但成交价无效 | 订单已成交但 `filled_price` 为 0 或 NULL | 可能导致 `$0.00` 平仓消息 |
| PENDING 状态但有成交价 | 状态应该是 OPEN 但实际是 PENDING | 状态不一致 |
| 平仓订单价格异常 | 出场价或成交价为 0 | 历史记录错误 |
| 重复订单 | 同一交易对短时间内创建多个订单 | 可能是重复信号 |
## 修复操作
确认有异常订单后,可以:
1. **手动删除异常订单**(最安全):
```sql
-- 删除 OPEN 状态但成交价无效的订单
DELETE FROM paper_orders
WHERE status = 'OPEN'
AND (filled_price IS NULL OR filled_price = 0);
```
2. **使用 Python 自动修复**
```bash
python3 fix_abnormal_orders.py
# 脚本会要求确认,输入 yes 确认删除/修复
```
3. **重启服务**(推荐):
修复后重启服务,让系统重新加载正确的活跃订单:
```bash
# 重启 FastAPI 服务
systemctl restart stock-agent # 或你的服务名称
```
## 防止再次出现
代码中已添加防御性检查(在 `paper_trading_service.py` 中):
1. `_load_active_orders()` 会跳过异常订单
2. `_check_order_trigger()` 会检查成交价有效性
3. `_close_order()` 会防止无效订单平仓
但建议定期运行检查脚本,确保数据库状态正常。
## 紧急处理
如果正在出现大量错误消息,可以:
1. **临时停止服务**
```bash
systemctl stop stock-agent
```
2. **运行检查和修复**
```bash
python3 check_abnormal_orders.py
python3 fix_abnormal_orders.py
```
3. **重启服务**
```bash
systemctl start stock-agent
```