Files
kis_bot/kiwoom_rest_api/koreanstock/foreign_institution.py
2026-03-17 12:33:30 +09:00

234 lines
9.1 KiB
Python

from kiwoom_rest_api.core.base_api import KiwoomBaseAPI
from typing import Union, Dict, Any, Awaitable
class ForeignInstitution(KiwoomBaseAPI):
"""한국 주식 외인 관련 API를 제공하는 클래스"""
def __init__(
self,
base_url: str = None,
token_manager=None,
use_async: bool = False,
resource_url: str = "/api/dostk/frgnistt"
):
"""
ForeignInstitution 클래스 초기화
Args:
base_url (str, optional): API 기본 URL
token_manager: 토큰 관리자 객체
use_async (bool): 비동기 클라이언트 사용 여부 (기본값: False)
"""
super().__init__(
base_url=base_url,
token_manager=token_manager,
use_async=use_async,
resource_url=resource_url
)
def foreign_investor_stockwise_trading_trend_request_ka10008(
self,
stock_code: str,
cont_yn: str = "N",
next_key: str = "",
) -> dict:
"""주식 외국인 종목별 매매 동향을 조회합니다.
Args:
stock_code (str): 종목코드 (거래소별 종목코드)
- KRX: 039490
- NXT: 039490_NX
- SOR: 039490_AL
cont_yn (str, optional): 연속조회여부. Defaults to "N".
next_key (str, optional): 연속조회키. Defaults to "".
Returns:
dict: 주식 외국인 종목별 매매 동향 데이터
{
"stk_frgnr": [
{
"dt": str, # 일자
"close_pric": str, # 종가
"pred_pre": str, # 전일대비
"trde_qty": str, # 거래량
"chg_qty": str, # 변동수량
"poss_stkcnt": str, # 보유주식수
"wght": str, # 비중
"gain_pos_stkcnt": str, # 취득가능주식수
"frgnr_limit": str, # 외국인한도
"frgnr_limit_irds": str, # 외국인한도증감
"limit_exh_rt": str, # 한도소진률
},
...
],
"return_code": int, # 응답코드
"return_msg": str, # 응답메시지
}
Example:
>>> from kiwoom_rest_api import KiwoomRestAPI
>>> api = KiwoomRestAPI()
>>> result = api.foreign_institution.foreign_investor_stockwise_trading_trend_request_ka10008(
... stock_code="005930"
... )
>>> print(result)
"""
headers = {
"cont-yn": cont_yn,
"next-key": next_key,
"api-id": "ka10008",
}
data = {
"stk_cd": stock_code,
}
return self._execute_request(
"POST",
json=data,
headers=headers,
)
def institutional_stock_request_ka10009(
self,
stock_code: str,
cont_yn: str = "N",
next_key: str = "",
) -> dict:
"""주식 기관 요청을 조회합니다.
Args:
stock_code (str): 종목코드 (거래소별 종목코드)
- KRX: 039490
- NXT: 039490_NX
- SOR: 039490_AL
cont_yn (str, optional): 연속조회여부. Defaults to "N".
next_key (str, optional): 연속조회키. Defaults to "".
Returns:
dict: 주식 기관 요청 데이터
{
"date": str, # 날짜
"close_pric": str, # 종가
"pre": str, # 대비
"orgn_dt_acc": str, # 기관기간누적
"orgn_daly_nettrde": str, # 기관일별순매매
"frgnr_daly_nettrde": str, # 외국인일별순매매
"frgnr_qota_rt": str, # 외국인지분율
"return_code": int, # 응답코드
"return_msg": str, # 응답메시지
}
Example:
>>> from kiwoom_rest_api import KiwoomRestAPI
>>> api = KiwoomRestAPI()
>>> result = api.foreign_institution.institutional_stock_request_ka10009(
... stock_code="005930"
... )
>>> print(result)
"""
headers = {
"cont-yn": cont_yn,
"next-key": next_key,
"api-id": "ka10009",
}
data = {
"stk_cd": stock_code,
}
return self._execute_request(
"POST",
json=data,
headers=headers,
)
def institution_foreign_consecutive_trading_status_request_ka10131(
self,
dt: str,
mrkt_tp: str,
netslmt_tp: str = "2",
stk_inds_tp: str = "0",
amt_qty_tp: str = "0",
stex_tp: str = "1",
strt_dt: str = "",
end_dt: str = "",
cont_yn: str = "N",
next_key: str = "",
) -> dict:
"""기관외국인연속매매현황을 조회합니다.
Args:
dt (str): 기간 (1:최근일, 3:3일, 5:5일, 10:10일, 20:20일, 120:120일, 0:시작일자/종료일자로 조회)
mrkt_tp (str): 장구분 (001:코스피, 101:코스닥)
netslmt_tp (str, optional): 순매도수구분 (2:순매수(고정값)). Defaults to "2".
stk_inds_tp (str, optional): 종목업종구분 (0:종목(주식),1:업종). Defaults to "0".
amt_qty_tp (str, optional): 금액수량구분 (0:금액, 1:수량). Defaults to "0".
stex_tp (str, optional): 거래소구분 (1:KRX, 2:NXT, 3:통합). Defaults to "1".
strt_dt (str, optional): 시작일자 (YYYYMMDD). Defaults to "".
end_dt (str, optional): 종료일자 (YYYYMMDD). Defaults to "".
cont_yn (str, optional): 연속조회여부. Defaults to "N".
next_key (str, optional): 연속조회키. Defaults to "".
Returns:
dict: 기관외국인연속매매현황 데이터
{
"orgn_frgnr_cont_trde_prst": [
{
"rank": str, # 순위
"stk_cd": str, # 종목코드
"stk_nm": str, # 종목명
"prid_stkpc_flu_rt": str, # 기간중주가등락률
"orgn_nettrde_amt": str, # 기관순매매금액
"orgn_nettrde_qty": str, # 기관순매매량
"orgn_cont_netprps_dys": str, # 기관계연속순매수일수
"orgn_cont_netprps_qty": str, # 기관계연속순매수량
"orgn_cont_netprps_amt": str, # 기관계연속순매수금액
"frgnr_nettrde_qty": str, # 외국인순매매량
"frgnr_nettrde_amt": str, # 외국인순매매액
"frgnr_cont_netprps_dys": str, # 외국인연속순매수일수
"frgnr_cont_netprps_qty": str, # 외국인연속순매수량
"frgnr_cont_netprps_amt": str, # 외국인연속순매수금액
"nettrde_qty": str, # 순매매량
"nettrde_amt": str, # 순매매액
"tot_cont_netprps_dys": str, # 합계연속순매수일수
"tot_cont_nettrde_qty": str, # 합계연속순매매수량
"tot_cont_netprps_amt": str, # 합계연속순매수금액
},
...
],
"return_code": int, # 응답코드
"return_msg": str, # 응답메시지
}
Example:
>>> from kiwoom_rest_api import KiwoomRestAPI
>>> api = KiwoomRestAPI()
>>> result = api.foreign_institution.institution_foreign_consecutive_trading_status_request_ka10131(
... dt="1",
... mrkt_tp="001"
... )
>>> print(result)
"""
headers = {
"cont-yn": cont_yn,
"next-key": next_key,
"api-id": "ka10131",
}
data = {
"dt": dt,
"strt_dt": strt_dt,
"end_dt": end_dt,
"mrkt_tp": mrkt_tp,
"netslmt_tp": netslmt_tp,
"stk_inds_tp": stk_inds_tp,
"amt_qty_tp": amt_qty_tp,
"stex_tp": stex_tp,
}
return self._execute_request(
"POST",
json=data,
headers=headers,
)