Files
MoFin/scripts/diagnose_assets.py
T

36 lines
1.3 KiB
Python

"""Diagnose: check HK stock costs, prices, total assets calculation"""
import sys
sys.path.insert(0, '/home/hmo/MoFin')
from mo_models import calc_total_assets, calc_total_mv, is_hk_stock, to_cny, get_hk_rate
from mo_data import read_portfolio
import json
pf = read_portfolio()
holdings = pf.get('holdings', [])
rate = get_hk_rate()
print(f"HK_RATE: {rate}")
print(f"total_assets (from DB): {pf.get('total_assets')}")
print(f"total_mv (from DB): {pf.get('total_mv')}")
print(f"cash: {pf.get('cash')}")
print(f"frozen_cash: {pf.get('frozen_cash')}")
print(f"position_pct: {pf.get('position_pct')}")
total_mv_calc = calc_total_mv(holdings)
total_assets_calc = calc_total_assets(pf)
print(f"\ncalc_total_mv: {total_mv_calc}")
print(f"calc_total_assets: {total_assets_calc}")
print(f"\n=== HK stocks ===")
for h in holdings:
code = h.get('code', '')
if is_hk_stock(str(code)):
cost = h.get('cost', 0) or 0
price = h.get('price', 0) or 0
shares = h.get('shares', 0) or 0
mv = price * shares
cost_calc = cost * shares
pnl = (price - cost) * shares if cost > 0 else 0
pnl_pct = (price - cost) / cost * 100 if cost > 0 else 0
print(f" {code} {h.get('name')}: cost={cost} price={price} shares={shares} mv={mv} pnl={pnl:.1f} ({pnl_pct:+.1f}%)")