89 lines
2.5 KiB
Bash
Executable File
89 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================================
|
|
# 异常订单快速检查脚本
|
|
# 用法: ./check_orders.sh [database_path]
|
|
# ============================================================
|
|
|
|
DB_PATH="${1:-/path/to/your/database.db}"
|
|
|
|
echo "=========================================="
|
|
echo "异常订单检查报告"
|
|
echo "=========================================="
|
|
echo "数据库: $DB_PATH"
|
|
echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
|
|
if [ ! -f "$DB_PATH" ]; then
|
|
echo "错误: 找不到数据库文件 $DB_PATH"
|
|
echo "请指定正确的数据库路径"
|
|
exit 1
|
|
fi
|
|
|
|
# 1. 检查 OPEN 状态但成交价无效的订单
|
|
echo "【1】OPEN 状态但成交价无效的订单:"
|
|
echo "----------------------------------------"
|
|
sqlite3 "$DB_PATH" "
|
|
SELECT
|
|
' ' || substr(order_id, 1, 8) || '...' ||
|
|
' | ' || symbol ||
|
|
' | ' || side ||
|
|
' | 成交价:' || COALESCE(CAST(filled_price AS TEXT), 'NULL')
|
|
FROM paper_orders
|
|
WHERE status = 'OPEN'
|
|
AND (filled_price IS NULL OR filled_price = 0)
|
|
LIMIT 10;
|
|
" || echo " ✅ 无异常订单"
|
|
echo ""
|
|
|
|
# 2. 检查 PENDING 状态但有成交价的订单
|
|
echo "【2】PENDING 状态但有成交价的订单:"
|
|
echo "----------------------------------------"
|
|
sqlite3 "$DB_PATH" "
|
|
SELECT
|
|
' ' || substr(order_id, 1, 8) || '...' ||
|
|
' | ' || symbol ||
|
|
' | 状态应该是OPEN'
|
|
FROM paper_orders
|
|
WHERE status = 'PENDING'
|
|
AND filled_price IS NOT NULL
|
|
AND filled_price > 0
|
|
LIMIT 10;
|
|
" || echo " ✅ 无异常订单"
|
|
echo ""
|
|
|
|
# 3. 活跃订单统计
|
|
echo "【3】活跃订单统计:"
|
|
echo "----------------------------------------"
|
|
sqlite3 "$DB_PATH" "
|
|
SELECT
|
|
' ' || status || ': ' || COUNT(*) || ' 个'
|
|
FROM paper_orders
|
|
WHERE status IN ('PENDING', 'OPEN')
|
|
GROUP BY status;
|
|
"
|
|
echo ""
|
|
|
|
# 4. 最近异常平仓记录
|
|
echo "【4】最近1小时内价格异常的平仓记录:"
|
|
echo "----------------------------------------"
|
|
sqlite3 "$DB_PATH" "
|
|
SELECT
|
|
' ' || substr(order_id, 1, 8) || '...' ||
|
|
' | ' || symbol ||
|
|
' | 成交:' || COALESCE(CAST(filled_price AS TEXT), 'NULL') ||
|
|
' | 出场:' || COALESCE(CAST(exit_price AS TEXT), 'NULL')
|
|
FROM paper_orders
|
|
WHERE status IN ('CLOSED_TP', 'CLOSED_SL', 'CLOSED_BE', 'CLOSED_MANUAL')
|
|
AND closed_at >= datetime('now', '-1 hour')
|
|
AND (
|
|
filled_price IS NULL OR filled_price = 0 OR
|
|
exit_price IS NULL OR exit_price = 0
|
|
)
|
|
LIMIT 10;
|
|
" || echo " ✅ 无异常记录"
|
|
echo ""
|
|
|
|
echo "=========================================="
|
|
echo "检查完成"
|
|
echo "=========================================="
|