보유 종목의 현재 평가금액, 손익, 수익률을 조회해서 출력하는 예제입니다.
from kiwoompy import KiwoomClient, KiwoomApiError
client = KiwoomClient(
env="demo",
appkey="YOUR_APP_KEY",
secretkey="YOUR_APP_SECRET",
)
def print_portfolio():
# 예수금
deposit = client.query.get_deposit()
print("=" * 50)
print(f"예수금: {int(deposit.entr):>15,}원")
print(f"출금가능: {int(deposit.pymn_alow_amt):>15,}원")
print(f"주문가능: {int(deposit.ord_alow_amt):>15,}원")
print("=" * 50)
# 잔고
balance = client.query.get_account_balance()
print(f"총매입금액: {int(balance.tot_pur_amt):>15,}원")
print(f"총평가금액: {int(balance.tot_evlt_amt):>15,}원")
print(f"총평가손익: {int(balance.tot_evlt_pl):>15,}원")
print(f"총수익률: {float(balance.tot_prft_rt):>14.2f}%")
print(f"추정예탁자산: {int(balance.prsm_dpst_aset_amt):>15,}원")
print()
if not balance.holdings:
print("보유 종목 없음")
return
# 종목별 상세
print(f"{'종목명':<12} {'보유':>6} {'매입단가':>10} {'현재가':>10} {'평가손익':>12} {'수익률':>8}")
print("-" * 65)
for item in balance.holdings:
print(
f"{item.stk_nm:<12} "
f"{item.rmnd_qty:>6}주 "
f"{int(item.pur_pric):>10,}원 "
f"{int(item.cur_prc):>10,}원 "
f"{int(item.evltv_prft):>12,}원 "
f"{float(item.prft_rt):>7.2f}%"
)
print_portfolio()
==================================================
예수금: 5,000,000원
출금가능: 4,800,000원
주문가능: 4,800,000원
==================================================
총매입금액: 2,000,000원
총평가금액: 2,150,000원
총평가손익: 150,000원
총수익률: 7.50%
추정예탁자산: 7,150,000원
종목명 보유 매입단가 현재가 평가손익 수익률
-----------------------------------------------------------------
삼성전자 10주 70,000원 72,000원 20,000원 2.86%
SK하이닉스 5주 200,000원 226,000원 130,000원 13.00%
balance = client.query.get_account_balance()
# 수익률 기준 내림차순 정렬
sorted_holdings = sorted(
balance.holdings,
key=lambda x: float(x.prft_rt),
reverse=True,
)
print("수익률 순위")
for i, item in enumerate(sorted_holdings, 1):
print(f"{i}. {item.stk_nm}: {float(item.prft_rt):.2f}%")
수익률이 특정 기준 이하인 종목을 필터링합니다.
STOP_LOSS_THRESHOLD = -5.0 # -5% 이하면 손절 검토
balance = client.query.get_account_balance()
candidates = [
item for item in balance.holdings
if float(item.prft_rt) <= STOP_LOSS_THRESHOLD
]
if candidates:
print(f"손절 검토 종목 ({STOP_LOSS_THRESHOLD}% 이하):")
for item in candidates:
print(f" {item.stk_nm}: {float(item.prft_rt):.2f}% ({item.evltv_prft}원)")
else:
print("손절 검토 종목 없음")
# 잔고 + 미체결 한번에 확인
balance = client.query.get_account_balance()
unfilled = client.query.get_unfilled_orders(all_stock_type="0", trade_type="all")
print(f"보유 종목: {len(balance.holdings)}개")
print(f"미체결 주문: {len(unfilled)}건")
for order in unfilled:
print(f" [{order.io_tp_nm}] {order.stk_nm} {order.oso_qty}주 @ {order.ord_pric}원")