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

2.9 KiB
Raw Blame History

异常订单检查工具

用于检查和修复数据库中导致错误平仓消息的异常订单。

问题原因

根据之前的分析,"莫名其妙出现的平仓消息"通常是由以下异常订单导致的:

  1. OPEN 状态但成交价为 0 的订单:这些订单被系统认为是"已成交"但价格无效,导致平仓计算时显示 $0.00
  2. PENDING 状态但有成交价的订单:状态不一致,可能导致重复处理

使用方法

方法 1: Python 脚本(推荐)

在服务器上执行:

cd /path/to/Stock_Agent/backend

# 检查异常订单(不会修改数据)
python3 check_abnormal_orders.py

# 自动修复异常订单(会删除/修改数据,需要确认)
python3 fix_abnormal_orders.py

方法 2: SQL 查询

如果有 SQLite 命令行工具:

cd /path/to/Stock_Agent/backend

# 需要先确认数据库路径
sqlite3 /path/to/your/database.db < check_abnormal_orders.sql

或者直接进入 SQLite

sqlite3 /path/to/your/database.db

# 然后复制粘贴 check_abnormal_orders.sql 中的查询语句

方法 3: 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. 手动删除异常订单(最安全):
-- 删除 OPEN 状态但成交价无效的订单
DELETE FROM paper_orders
WHERE status = 'OPEN'
  AND (filled_price IS NULL OR filled_price = 0);
  1. 使用 Python 自动修复
python3 fix_abnormal_orders.py
# 脚本会要求确认,输入 yes 确认删除/修复
  1. 重启服务(推荐):

修复后重启服务,让系统重新加载正确的活跃订单:

# 重启 FastAPI 服务
systemctl restart stock-agent  # 或你的服务名称

防止再次出现

代码中已添加防御性检查(在 paper_trading_service.py 中):

  1. _load_active_orders() 会跳过异常订单
  2. _check_order_trigger() 会检查成交价有效性
  3. _close_order() 会防止无效订单平仓

但建议定期运行检查脚本,确保数据库状态正常。

紧急处理

如果正在出现大量错误消息,可以:

  1. 临时停止服务
systemctl stop stock-agent
  1. 运行检查和修复
python3 check_abnormal_orders.py
python3 fix_abnormal_orders.py
  1. 重启服务
systemctl start stock-agent