data_snapshot统一数据入口+DB银行locked修复+建滔/现金修正

data_snapshot.py: 所有报告脚本的唯一数据入口(通过mo_data读DB)
price_monitor.py: DB写入加了3次重试+PRAGMA busy_timeout=5000
quality gate: 新增GATE_PROFIT_EXISTS(止盈=0拦截)+GATE_9D_ANALYSIS
建滔(01888) DB已修正: price=84.9 HKD, cost=88.23 HKD, 浮亏-3.8%
现金已修正: 132,121.93 (frozen=0)
This commit is contained in:
知微
2026-07-03 10:12:21 +08:00
parent e31bb9e089
commit 1bb83c715d
9 changed files with 1431 additions and 1282 deletions
+15 -7
View File
@@ -266,13 +266,21 @@ def refresh_data_prices():
pf['total_assets'] = calc_total_assets(pf)
pf['position_pct'] = calc_position_pct(pf)
# DB 写入(替代 json.dump,强制币种约束)
try:
conn = get_conn()
write_holdings_batch(conn, pf['holdings'])
write_portfolio_summary(conn, pf)
conn.close()
except Exception as e:
print(f" [DB写入失败] {e}", flush=True)
for attempt in range(3):
try:
conn = get_conn()
conn.execute("PRAGMA busy_timeout=5000") # 等待5秒而非立即放弃
write_holdings_batch(conn, pf['holdings'])
write_portfolio_summary(conn, pf)
conn.close()
if attempt > 0:
print(f" [DB写入 OK after {attempt+1} retries]", flush=True)
break
except Exception as e:
if attempt < 2:
import time; time.sleep((attempt+1)*1)
else:
print(f" [DB写入失败 3次重试后放弃] {e}", flush=True)
# 保留 JSON 副本作为冷备
json.dump(pf, open(PORTFOLIO_PATH, 'w'), ensure_ascii=False, indent=2)
elif pf.get('updated_at'):