diff --git a/deploy/profile-scripts/b_td1_v3_scanner.py b/deploy/profile-scripts/b_td1_v3_scanner.py index 772bf5c4..a94586dc 100644 --- a/deploy/profile-scripts/b_td1_v3_scanner.py +++ b/deploy/profile-scripts/b_td1_v3_scanner.py @@ -95,15 +95,28 @@ def main(): f"rsi={sig['rsi']} ret5={sig['ret5']}% mcap_q={sig['mcap_q']} score={sig['score']}") _mid_v = (sig['price'] * 0.98 + sig['price']) / 2 _rr_v = round((sig['target'] - _mid_v) / (_mid_v - sig['stop_loss']), 2) if _mid_v > sig['stop_loss'] > 0 else 0 - conn.execute( - "INSERT INTO candidates (code, name, sector, reason, entry_range, stop_loss, target, rr, source_strategy, created_at) " - "VALUES (?,?,?,?,?,?,?,?,?,datetime('now','localtime')) " - "ON CONFLICT(code) DO UPDATE SET " - "name=excluded.name, sector=excluded.sector, reason=excluded.reason, " - "entry_range=excluded.entry_range, stop_loss=excluded.stop_loss, target=excluded.target, rr=excluded.rr, source_strategy=excluded.source_strategy", - (code, code, "b_td1_v3", reasons, - f"{sig['price']*0.98:.2f}~{sig['price']:.2f}", sig["stop_loss"], sig["target"], _rr_v, "b_td1_v3")) - inserted += 1 + # 2026-08-18 database is locked 重试(整点调度撞锁致崩溃,工单P1) + import random as _rd + _w_ok = False + for _try in range(4): + try: + conn.execute( + "INSERT INTO candidates (code, name, sector, reason, entry_range, stop_loss, target, rr, source_strategy, created_at) " + "VALUES (?,?,?,?,?,?,?,?,?,datetime('now','localtime')) " + "ON CONFLICT(code) DO UPDATE SET " + "name=excluded.name, sector=excluded.sector, reason=excluded.reason, " + "entry_range=excluded.entry_range, stop_loss=excluded.stop_loss, target=excluded.target, rr=excluded.rr, source_strategy=excluded.source_strategy", + (code, code, "b_td1_v3", reasons, + f"{sig['price']*0.98:.2f}~{sig['price']:.2f}", sig["stop_loss"], sig["target"], _rr_v, "b_td1_v3")) + _w_ok = True + break + except Exception as _e: + if "locked" in str(_e).lower(): + time.sleep(0.4 * (2 ** _try) + _rd.uniform(0, 0.2)) + else: + raise + if _w_ok: + inserted += 1 print(f" 🟢 {code} {code} 价{sig['price']} score={sig['score']} {reasons}", flush=True) conn.commit() conn.close()