Files
MoFin/archive/scripts/fix_currency_and_summary.py
知微 ccea9fcf09 cleanup: 去冗余+归档一次性脚本
- 移除重复的系统健康检查-每日(no_agent版,与LLM版重叠)
- 归档42个一次性脚本(移出MoFin/scripts→archive/scripts):
  - fix_*: 历史数据修复(11个)
  - migrate_*/rollback_*: 数据迁移(2个)
  - 一次性数据修复: bulk/close/data_freshness等(16个)
  - check_*/verify_*/diagnose_*: 历史诊断工具(12个)
  - test_*: 测试脚本(3个)
- 84个活跃脚本, 0架构违规, 31张healthy数据表
2026-07-09 00:19:00 +08:00

43 lines
1.8 KiB
Python

"""Fix: HK stock currency=CYN, recalc portfolio_summary"""
import sqlite3, sys
sys.path.insert(0, '/home/hmo/MoFin')
from mo_models import is_hk_stock
from datetime import datetime
db = sqlite3.connect('/home/hmo/web-dashboard/data/mofin.db')
# 1. Fix all HK stock currency to CNY
fixed = 0
for r in db.execute("SELECT code, name, cost, price, shares, currency FROM holdings WHERE is_active=1"):
code, name, cost, price, shares, curr = r
if is_hk_stock(str(code)):
db.execute("UPDATE holdings SET currency='CNY' WHERE code=?", (code,))
print(f" FIXED HK currency: {code} {name}: {curr} -> CNY")
fixed += 1
print(f"Fixed {fixed} HK stock currencies\n")
# 2. Recalc portfolio_summary
rows = db.execute("SELECT code, shares, cost, price FROM holdings WHERE is_active=1").fetchall()
total_mv = sum((r[3] or 0) * (r[1] or 0) for r in rows)
total_cost = sum((r[2] or 0) * (r[1] or 0) for r in rows)
total_pnl = total_mv - total_cost
sr = db.execute("SELECT cash, frozen_cash FROM portfolio_summary WHERE id=1").fetchone()
cash = sr[0] or 0
frozen = sr[1] or 0
total_assets = total_mv + cash + frozen
position_pct = round(total_mv / total_assets * 100, 2) if total_assets > 0 else 0
db.execute("UPDATE portfolio_summary SET total_mv=?, total_assets=?, total_pnl=?, position_pct=?, updated_at=? WHERE id=1",
(round(total_mv,2), round(total_assets,2), round(total_pnl,2), position_pct, datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
print(f"portfolio_summary: mv={total_mv:.2f} ta={total_assets:.2f} pnl={total_pnl:.2f} pos={position_pct}%")
# 3. Check 00700 cost
r = db.execute("SELECT cost FROM holdings WHERE code='00700'").fetchone()
if r and (r[0] is None or r[0] == 0):
print("\n⚠️ 00700 腾讯 cost=0 — 需要从 holding.xls 重新导入")
db.commit()
db.close()
print("\nDone.")