36 lines
1.3 KiB
Python
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}%)")
|