fix: label trend breakeven handoff as 趋势回调 across four exchanges

Set order monitor and trade record source to trend pullback after handoff; unify hub and instance display; add migration script for legacy rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-04 06:30:14 +08:00
parent 97e0355209
commit 1b3f661bad
10 changed files with 167 additions and 51 deletions
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env python3
"""修正趋势保本移交后 monitor_type 仍为「下单监控」的历史数据。"""
from __future__ import annotations
import argparse
import sqlite3
from pathlib import Path
from strategy_trade_labels import MONITOR_TYPE_TREND_PULLBACK
def main() -> int:
parser = argparse.ArgumentParser(description="Fix trend handoff order/trade monitor_type labels.")
parser.add_argument("--db", required=True, help="Path to instance sqlite db")
parser.add_argument("--dry-run", action="store_true", help="Preview only")
parser.add_argument("--apply", action="store_true", help="Apply updates")
args = parser.parse_args()
if not args.dry_run and not args.apply:
args.dry_run = True
db_path = Path(args.db).expanduser().resolve()
if not db_path.is_file():
print(f"[ERR] DB not found: {db_path}")
return 1
conn = sqlite3.connect(str(db_path))
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute(
"""
SELECT COUNT(*) AS c FROM order_monitors
WHERE trend_plan_id IS NOT NULL AND trend_plan_id > 0
AND (monitor_type IS NULL OR TRIM(monitor_type) = '' OR monitor_type = '下单监控')
"""
)
om_n = int(cur.fetchone()["c"])
cur.execute(
"""
SELECT COUNT(*) AS c FROM trade_records
WHERE trend_plan_id IS NOT NULL AND trend_plan_id > 0
AND (monitor_type IS NULL OR TRIM(monitor_type) = '' OR monitor_type = '下单监控')
"""
)
tr_n = int(cur.fetchone()["c"])
print(f"[INFO] order_monitors to fix: {om_n}")
print(f"[INFO] trade_records to fix: {tr_n}")
if args.dry_run:
conn.close()
return 0
cur.execute(
"""
UPDATE order_monitors
SET monitor_type=?
WHERE trend_plan_id IS NOT NULL AND trend_plan_id > 0
AND (monitor_type IS NULL OR TRIM(monitor_type) = '' OR monitor_type = '下单监控')
""",
(MONITOR_TYPE_TREND_PULLBACK,),
)
cur.execute(
"""
UPDATE trade_records
SET monitor_type=?
WHERE trend_plan_id IS NOT NULL AND trend_plan_id > 0
AND (monitor_type IS NULL OR TRIM(monitor_type) = '' OR monitor_type = '下单监控')
""",
(MONITOR_TYPE_TREND_PULLBACK,),
)
conn.commit()
conn.close()
print("[OK] Applied.")
return 0
if __name__ == "__main__":
raise SystemExit(main())