fix: 수동 매도 즉시 반영 + 매도/매수 결과 토스트 + 당일 매도대금 가용현금 반영
- 프론트: 토스트 알림 시스템(lib/toast + ToastHost) 추가, 매도/매수 성공·실패를 화면에 표시 (기존엔 console.log만, 실패는 블로킹 alert). 성공 토스트에 손익 표시. - 매도 직후 예수금/평가액 요약 즉시 갱신(apply_sell), 최근 5분 내 수동 매도 종목은 KIS 잔고 반영 지연으로 동기화가 되살리지 않도록 스킵(recent_sells). - 예수금이 D+2 결제 기준(dnca_tot_amt)이라 당일 매도대금이 화면·데이트레이딩 가용현금에 반영되지 않던 문제: 매수가능조회(inquire-psbl-order) ord_psbl_cash 를 우선 사용. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1092,6 +1092,44 @@ class KoreaInvestmentAPI:
|
||||
logger.error(f"Error fetching balance: {e}")
|
||||
raise
|
||||
|
||||
async def get_buyable_cash(self, stock_code: str = "005930") -> float:
|
||||
"""주문가능현금(ord_psbl_cash) 조회 — 매수가능조회 API.
|
||||
|
||||
예수금총액(dnca_tot_amt)은 D+2 결제 기준이라 당일 매도대금이 반영되지 않는다.
|
||||
국내 주식은 당일 매도대금을 즉시 재매수에 쓸 수 있으므로, 화면 '예수금'과
|
||||
데이트레이딩 가용 현금은 이 값을 우선 사용한다. (2026-09-22)
|
||||
실전: TTTC8908R / 모의: VTTC8908R. 실패 시 0.0 반환(호출측에서 폴백).
|
||||
"""
|
||||
try:
|
||||
account_number_prefix = self.account_number[:8]
|
||||
account_number_suffix = self.account_number[8:]
|
||||
is_virtual = "vts" in self.base_url.lower()
|
||||
tr_id = "VTTC8908R" if is_virtual else "TTTC8908R"
|
||||
result, _ = await self._make_request(
|
||||
"GET",
|
||||
"/uapi/domestic-stock/v1/trading/inquire-psbl-order",
|
||||
tr_id,
|
||||
params={
|
||||
"CANO": account_number_prefix,
|
||||
"ACNT_PRDT_CD": account_number_suffix,
|
||||
"PDNO": stock_code,
|
||||
"ORD_UNPR": "0",
|
||||
"ORD_DVSN": "01", # 시장가 기준
|
||||
"CMA_EVLU_AMT_ICLD_YN": "N",
|
||||
"OVRS_ICLD_YN": "N",
|
||||
},
|
||||
)
|
||||
if result.get("rt_cd") != "0":
|
||||
logger.warning(f"[get_buyable_cash] rt_cd={result.get('rt_cd')} msg1={result.get('msg1')}")
|
||||
return 0.0
|
||||
out = result.get("output") or {}
|
||||
if isinstance(out, list):
|
||||
out = out[0] if out else {}
|
||||
return float(out.get("ord_psbl_cash", 0) or 0)
|
||||
except Exception as e:
|
||||
logger.warning(f"[get_buyable_cash] 조회 실패: {e}")
|
||||
return 0.0
|
||||
|
||||
async def get_overseas_balance(self) -> Dict[str, Any]:
|
||||
"""해외주식 잔고 조회 (미국 기준)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user