33 lines
956 B
Python
33 lines
956 B
Python
"""보유종목 인텔리전스 — 순수연산 중심 (advisory). KIS 실주문 미사용."""
|
|
from __future__ import annotations
|
|
import datetime as dt
|
|
from typing import Any, Optional
|
|
|
|
from . import db
|
|
from . import price_fetcher
|
|
|
|
|
|
def _krx_tickers() -> set:
|
|
"""krx_master ticker 집합 (KRX 판별용)."""
|
|
return db.get_krx_tickers()
|
|
|
|
|
|
def get_holdings() -> list[dict]:
|
|
"""portfolio + 현재가 + pnl_rate + is_krx."""
|
|
items = db.get_all_portfolio()
|
|
tickers = [it["ticker"] for it in items]
|
|
prices = price_fetcher.get_current_prices(tickers) if tickers else {}
|
|
krx = _krx_tickers()
|
|
out = []
|
|
for it in items:
|
|
cur = prices.get(it["ticker"])
|
|
avg = it["avg_price"]
|
|
pnl = ((cur - avg) / avg * 100.0) if (cur and avg) else None
|
|
out.append({
|
|
**it,
|
|
"current_price": cur,
|
|
"pnl_rate": pnl,
|
|
"is_krx": it["ticker"] in krx,
|
|
})
|
|
return out
|