from kiwoom_rest_api.core.base_api import KiwoomBaseAPI from typing import Union, Dict, Any, Awaitable class ELW(KiwoomBaseAPI): """한국 주식 ELW 관련 API를 제공하는 클래스""" def __init__( self, base_url: str = None, token_manager=None, use_async: bool = False, resource_url: str = "/api/dostk/elw" ): """ ELW 클래스 초기화 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 elw_daily_sensitivity_indicator_request_ka10048( self, stk_cd: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 일별 민감도 지표를 조회합니다. Args: stk_cd (str): 종목코드 (예: "57JBHH") cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 일별 민감도 지표 데이터 { "elwdaly_snst_ix": [ # ELW일별민감도지표 { "dt": str, # 일자 "iv": str, # IV (Implied Volatility) "delta": str, # 델타 "gam": str, # 감마 "theta": str, # 쎄타 "vega": str, # 베가 "law": str, # 로 "lp": str, # LP }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_daily_sensitivity_indicator_request_ka10048( ... stk_cd="57JBHH" # ELW 종목코드 ... ) >>> print(result) """ headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka10048", } data = { "stk_cd": stk_cd, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_sensitivity_indicator_request_ka10050( self, stk_cd: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 민감도 지표를 조회합니다. Args: stk_cd (str): 종목코드 (예: "57JBHH") cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 민감도 지표 데이터 { "elwsnst_ix_array": [ # ELW민감도지표배열 { "cntr_tm": str, # 체결시간 "cur_prc": str, # 현재가 "elwtheory_pric": str, # ELW이론가 "iv": str, # IV (Implied Volatility) "delta": str, # 델타 "gam": str, # 감마 "theta": str, # 쎄타 "vega": str, # 베가 "law": str, # 로 "lp": str, # LP }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_sensitivity_indicator_request_ka10050( ... stk_cd="57JBHH" # ELW 종목코드 ... ) >>> print(result) """ headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka10050", } data = { "stk_cd": stk_cd, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_price_spike_request_ka30001( self, flu_tp: str, tm_tp: str, tm: str, trde_qty_tp: str, isscomp_cd: str, bsis_aset_cd: str, rght_tp: str, lpcd: str, trde_end_elwskip: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 가격 급등락 정보를 조회합니다. Args: flu_tp (str): 등락구분 (1:급등, 2:급락) tm_tp (str): 시간구분 (1:분전, 2:일전) tm (str): 시간 (분 혹은 일입력, 예: 1, 3, 5) trde_qty_tp (str): 거래량구분 - 0: 전체 - 10: 만주이상 - 50: 5만주이상 - 100: 10만주이상 - 300: 30만주이상 - 500: 50만주이상 - 1000: 백만주이상 isscomp_cd (str): 발행사코드 - 000000000000: 전체 - 3: 한국투자증권 - 5: 미래대우 - 6: 신영 - 12: NK투자증권 - 17: KB증권 bsis_aset_cd (str): 기초자산코드 - 000000000000: 전체 - 201: KOSPI200 - 150: KOSDAQ150 - 005930: 삼성전자 - 030200: KT rght_tp (str): 권리구분 - 000: 전체 - 001: 콜 - 002: 풋 - 003: DC - 004: DP - 005: EX - 006: 조기종료콜 - 007: 조기종료풋 lpcd (str): LP코드 - 000000000000: 전체 - 3: 한국투자증권 - 5: 미래대우 - 6: 신영 - 12: NK투자증권 - 17: KB증권 trde_end_elwskip (str): 거래종료ELW제외 (0:포함, 1:제외) cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 가격 급등락 데이터 { "base_pric_tm": str, # 기준가시간 "elwpric_jmpflu": [ # ELW가격급등락 { "stk_cd": str, # 종목코드 "rank": str, # 순위 "stk_nm": str, # 종목명 "pre_sig": str, # 대비기호 "pred_pre": str, # 전일대비 "trde_end_elwbase_pric": str, # 거래종료ELW기준가 "cur_prc": str, # 현재가 "base_pre": str, # 기준대비 "trde_qty": str, # 거래량 "jmp_rt": str, # 급등율 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_price_spike_request_ka30001( ... flu_tp="1", # 급등 ... tm_tp="2", # 일전 ... tm="1", # 1일 ... trde_qty_tp="0", # 전체 ... isscomp_cd="000000000000", # 전체 ... bsis_aset_cd="000000000000", # 전체 ... rght_tp="000", # 전체 ... lpcd="000000000000", # 전체 ... trde_end_elwskip="0" # 포함 ... ) """ # 파라미터 유효성 검증 if flu_tp not in ["1", "2"]: raise ValueError("flu_tp must be '1' (급등) or '2' (급락)") if tm_tp not in ["1", "2"]: raise ValueError("tm_tp must be '1' (분전) or '2' (일전)") if not tm.isdigit() or len(tm) > 2: raise ValueError("tm must be a 1-2 digit number") if trde_qty_tp not in ["0", "10", "50", "100", "300", "500", "1000"]: raise ValueError("Invalid trde_qty_tp value") if not isscomp_cd.isdigit() or len(isscomp_cd) != 12: raise ValueError("isscomp_cd must be a 12-digit number") if not bsis_aset_cd.isdigit() or len(bsis_aset_cd) != 12: raise ValueError("bsis_aset_cd must be a 12-digit number") if rght_tp not in ["000", "001", "002", "003", "004", "005", "006", "007"]: raise ValueError("Invalid rght_tp value") if not lpcd.isdigit() or len(lpcd) != 12: raise ValueError("lpcd must be a 12-digit number") if trde_end_elwskip not in ["0", "1"]: raise ValueError("trde_end_elwskip must be '0' (포함) or '1' (제외)") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30001", } data = { "flu_tp": flu_tp, "tm_tp": tm_tp, "tm": tm, "trde_qty_tp": trde_qty_tp, "isscomp_cd": isscomp_cd, "bsis_aset_cd": bsis_aset_cd, "rght_tp": rght_tp, "lpcd": lpcd, "trde_end_elwskip": trde_end_elwskip, } return self._execute_request( "POST", json=data, headers=headers, ) def top_elw_net_buying_by_broker_request_ka30002( self, isscomp_cd: str, trde_qty_tp: str, trde_tp: str, dt: str, trde_end_elwskip: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """거래원별 ELW 순매매 상위 정보를 조회합니다. Args: isscomp_cd (str): 발행사코드 (3자리) - 001: 교보 - 002: 신한금융투자 - 003: 한국투자증권 - 004: 대신 - 005: 미래대우 - 기타: 영웅문4 0273화면 참조 trde_qty_tp (str): 거래량구분 - 0: 전체 - 5: 5천주 - 10: 만주 - 50: 5만주 - 100: 10만주 - 500: 50만주 - 1000: 백만주 trde_tp (str): 매매구분 - 1: 순매수 - 2: 순매도 dt (str): 기간 - 1: 전일 - 5: 5일 - 10: 10일 - 40: 40일 - 60: 60일 trde_end_elwskip (str): 거래종료ELW제외 - 0: 포함 - 1: 제외 cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: 거래원별 ELW 순매매 상위 데이터 { "trde_ori_elwnettrde_upper": [ # 거래원별ELW순매매상위 { "stk_cd": str, # 종목코드 "stk_nm": str, # 종목명 "stkpc_flu": str, # 주가등락 "flu_rt": str, # 등락율 "trde_qty": str, # 거래량 "netprps": str, # 순매수 "buy_trde_qty": str, # 매수거래량 "sel_trde_qty": str, # 매도거래량 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.top_elw_net_buying_by_broker_request_ka30002( ... isscomp_cd="003", # 한국투자증권 ... trde_qty_tp="0", # 전체 ... trde_tp="2", # 순매도 ... dt="60", # 60일 ... trde_end_elwskip="0" # 포함 ... ) """ # 파라미터 유효성 검증 if not isscomp_cd.isdigit() or len(isscomp_cd) != 3: raise ValueError("isscomp_cd must be a 3-digit number") if trde_qty_tp not in ["0", "5", "10", "50", "100", "500", "1000"]: raise ValueError("Invalid trde_qty_tp value") if trde_tp not in ["1", "2"]: raise ValueError("trde_tp must be '1' (순매수) or '2' (순매도)") if dt not in ["1", "5", "10", "40", "60"]: raise ValueError("dt must be one of: '1', '5', '10', '40', '60'") if trde_end_elwskip not in ["0", "1"]: raise ValueError("trde_end_elwskip must be '0' (포함) or '1' (제외)") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30002", } data = { "isscomp_cd": isscomp_cd, "trde_qty_tp": trde_qty_tp, "trde_tp": trde_tp, "dt": dt, "trde_end_elwskip": trde_end_elwskip, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_lp_daily_holding_trend_request_ka30003( self, bsis_aset_cd: str, base_dt: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW LP 보유 일별 추이 정보를 조회합니다. Args: bsis_aset_cd (str): 기초자산코드 (12자리) base_dt (str): 기준일자 (YYYYMMDD 형식) cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW LP 보유 일별 추이 데이터 { "elwlpposs_daly_trnsn": [ # ELWLP보유일별추이 { "dt": str, # 일자 "cur_prc": str, # 현재가 "pre_tp": str, # 대비구분 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락율 "trde_qty": str, # 거래량 "trde_prica": str, # 거래대금 "chg_qty": str, # 변동수량 "lprmnd_qty": str, # LP보유수량 "wght": str, # 비중 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_lp_daily_holding_trend_request_ka30003( ... bsis_aset_cd="57KJ99", # 기초자산코드 ... base_dt="20241122" # 기준일자 ... ) """ # 파라미터 유효성 검증 if not bsis_aset_cd or len(bsis_aset_cd) != 12: raise ValueError("bsis_aset_cd must be a 12-character string") # base_dt 형식 검증 (YYYYMMDD) if not base_dt.isdigit() or len(base_dt) != 8: raise ValueError("base_dt must be in YYYYMMDD format") try: year = int(base_dt[:4]) month = int(base_dt[4:6]) day = int(base_dt[6:8]) if not (1 <= month <= 12 and 1 <= day <= 31): raise ValueError except ValueError: raise ValueError("base_dt must be a valid date in YYYYMMDD format") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30003", } data = { "bsis_aset_cd": bsis_aset_cd, "base_dt": base_dt, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_premium_rate_request_ka30004( self, isscomp_cd: str, bsis_aset_cd: str, rght_tp: str, lpcd: str, trde_end_elwskip: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 괴리율 정보를 조회합니다. Args: isscomp_cd (str): 발행사코드 (12자리) - 000000000000: 전체 - 3: 한국투자증권 - 5: 미래대우 - 6: 신영 - 12: NK투자증권 - 17: KB증권 bsis_aset_cd (str): 기초자산코드 (12자리) - 000000000000: 전체 - 201: KOSPI200 - 150: KOSDAQ150 - 005930: 삼성전자 - 030200: KT rght_tp (str): 권리구분 (3자리) - 000: 전체 - 001: 콜 - 002: 풋 - 003: DC - 004: DP - 005: EX - 006: 조기종료콜 - 007: 조기종료풋 lpcd (str): LP코드 (12자리) - 000000000000: 전체 - 3: 한국투자증권 - 5: 미래대우 - 6: 신영 - 12: NK투자증권 - 17: KB증권 trde_end_elwskip (str): 거래종료ELW제외 - 0: 거래종료ELW포함 - 1: 거래종료ELW제외 cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 괴리율 데이터 { "elwdispty_rt": [ # ELW괴리율 { "stk_cd": str, # 종목코드 "isscomp_nm": str, # 발행사명 "sqnc": str, # 회차 "base_aset_nm": str, # 기초자산명 "rght_tp": str, # 권리구분 "dispty_rt": str, # 괴리율 "basis": str, # 베이시스 "srvive_dys": str, # 잔존일수 "theory_pric": str, # 이론가 "cur_prc": str, # 현재가 "pre_tp": str, # 대비구분 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락율 "trde_qty": str, # 거래량 "stk_nm": str, # 종목명 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_premium_rate_request_ka30004( ... isscomp_cd="000000000000", # 전체 ... bsis_aset_cd="000000000000", # 전체 ... rght_tp="000", # 전체 ... lpcd="000000000000", # 전체 ... trde_end_elwskip="0" # 거래종료ELW포함 ... ) """ # 파라미터 유효성 검증 if not isscomp_cd.isdigit() or len(isscomp_cd) != 12: raise ValueError("isscomp_cd must be a 12-digit number") if not bsis_aset_cd.isdigit() or len(bsis_aset_cd) != 12: raise ValueError("bsis_aset_cd must be a 12-digit number") if rght_tp not in ["000", "001", "002", "003", "004", "005", "006", "007"]: raise ValueError("Invalid rght_tp value") if not lpcd.isdigit() or len(lpcd) != 12: raise ValueError("lpcd must be a 12-digit number") if trde_end_elwskip not in ["0", "1"]: raise ValueError("trde_end_elwskip must be '0' (포함) or '1' (제외)") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30004", } data = { "isscomp_cd": isscomp_cd, "bsis_aset_cd": bsis_aset_cd, "rght_tp": rght_tp, "lpcd": lpcd, "trde_end_elwskip": trde_end_elwskip, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_condition_search_request_ka30005( self, isscomp_cd: str, bsis_aset_cd: str, rght_tp: str, lpcd: str, sort_tp: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 조건검색 정보를 조회합니다. Args: isscomp_cd (str): 발행사코드 (12자리) - 000000000000: 전체 - 000000000003: 한국투자증권 - 000000000005: 미래대우 - 000000000006: 신영 - 000000000012: NK투자증권 - 000000000017: KB증권 bsis_aset_cd (str): 기초자산코드 - 000000000000: 전체 - 201: KOSPI200 - 150: KOSDAQ150 - 005930: 삼성전자 - 030200: KT rght_tp (str): 권리구분 - 0: 전체 - 1: 콜 - 2: 풋 - 3: DC - 4: DP - 5: EX - 6: 조기종료콜 - 7: 조기종료풋 lpcd (str): LP코드 (12자리) - 000000000000: 전체 - 000000000003: 한국투자증권 - 000000000005: 미래대우 - 000000000006: 신영 - 000000000012: NK투자증권 - 000000000017: KB증권 sort_tp (str): 정렬구분 - 0: 정렬없음 - 1: 상승율순 - 2: 상승폭순 - 3: 하락율순 - 4: 하락폭순 - 5: 거래량순 - 6: 거래대금순 - 7: 잔존일순 cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 조건검색 데이터 { "elwcnd_qry": [ # ELW조건검색 { "stk_cd": str, # 종목코드 "isscomp_nm": str, # 발행사명 "sqnc": str, # 회차 "base_aset_nm": str, # 기초자산명 "rght_tp": str, # 권리구분 "expr_dt": str, # 만기일 "cur_prc": str, # 현재가 "pre_tp": str, # 대비구분 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락율 "trde_qty": str, # 거래량 "trde_qty_pre": str, # 거래량대비 "trde_prica": str, # 거래대금 "pred_trde_qty": str, # 전일거래량 "sel_bid": str, # 매도호가 "buy_bid": str, # 매수호가 "prty": str, # 패리티 "gear_rt": str, # 기어링비율 "pl_qutr_rt": str, # 손익분기율 "cfp": str, # 자본지지점 "theory_pric": str, # 이론가 "innr_vltl": str, # 내재변동성 "delta": str, # 델타 "lvrg": str, # 레버리지 "exec_pric": str, # 행사가격 "cnvt_rt": str, # 전환비율 "lpposs_rt": str, # LP보유비율 "pl_qutr_pt": str, # 손익분기점 "fin_trde_dt": str, # 최종거래일 "flo_dt": str, # 상장일 "lpinitlast_suply_dt": str, # LP초종공급일 "stk_nm": str, # 종목명 "srvive_dys": str, # 잔존일수 "dispty_rt": str, # 괴리율 "lpmmcm_nm": str, # LP회원사명 "lpmmcm_nm_1": str, # LP회원사명1 "lpmmcm_nm_2": str, # LP회원사명2 "xraymont_cntr_qty_arng_trde_tp": str, # Xray순간체결량정리매매구분 "xraymont_cntr_qty_profa_100tp": str, # Xray순간체결량증거금100구분 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_condition_search_request_ka30005( ... isscomp_cd="000000000017", # KB증권 ... bsis_aset_cd="201", # KOSPI200 ... rght_tp="1", # 콜 ... lpcd="000000000000", # 전체 ... sort_tp="0" # 정렬없음 ... ) """ # 파라미터 유효성 검증 if not isscomp_cd.isdigit() or len(isscomp_cd) != 12: raise ValueError("isscomp_cd must be a 12-digit number") if not bsis_aset_cd.isdigit(): raise ValueError("bsis_aset_cd must be a number") if bsis_aset_cd == "000000000000" and len(bsis_aset_cd) != 12: raise ValueError("bsis_aset_cd must be 12 digits when '000000000000'") if rght_tp not in ["0", "1", "2", "3", "4", "5", "6", "7"]: raise ValueError("Invalid rght_tp value") if not lpcd.isdigit() or len(lpcd) != 12: raise ValueError("lpcd must be a 12-digit number") if sort_tp not in ["0", "1", "2", "3", "4", "5", "6", "7"]: raise ValueError("Invalid sort_tp value") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30005", } data = { "isscomp_cd": isscomp_cd, "bsis_aset_cd": bsis_aset_cd, "rght_tp": rght_tp, "lpcd": lpcd, "sort_tp": sort_tp, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_price_change_rate_ranking_request_ka30009( self, sort_tp: str, rght_tp: str, trde_end_skip: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 등락율 순위 정보를 조회합니다. Args: sort_tp (str): 정렬구분 - 1: 상승률 - 2: 상승폭 - 3: 하락률 - 4: 하락폭 rght_tp (str): 권리구분 (3자리) - 000: 전체 - 001: 콜 - 002: 풋 - 003: DC - 004: DP - 006: 조기종료콜 - 007: 조기종료풋 trde_end_skip (str): 거래종료제외 - 0: 거래종료포함 - 1: 거래종료제외 cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 등락율 순위 데이터 { "elwflu_rt_rank": [ # ELW등락율순위 { "rank": str, # 순위 "stk_cd": str, # 종목코드 "stk_nm": str, # 종목명 "cur_prc": str, # 현재가 "pre_sig": str, # 대비기호 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락률 "sel_req": str, # 매도잔량 "buy_req": str, # 매수잔량 "trde_qty": str, # 거래량 "trde_prica": str, # 거래대금 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_price_change_rate_ranking_request_ka30009( ... sort_tp="1", # 상승률 ... rght_tp="000", # 전체 ... trde_end_skip="0" # 거래종료포함 ... ) """ # 파라미터 유효성 검증 if sort_tp not in ["1", "2", "3", "4"]: raise ValueError("sort_tp must be one of: '1' (상승률), '2' (상승폭), '3' (하락률), '4' (하락폭)") if rght_tp not in ["000", "001", "002", "003", "004", "006", "007"]: raise ValueError("Invalid rght_tp value") if trde_end_skip not in ["0", "1"]: raise ValueError("trde_end_skip must be '0' (포함) or '1' (제외)") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30009", } data = { "sort_tp": sort_tp, "rght_tp": rght_tp, "trde_end_skip": trde_end_skip, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_order_volume_ranking_request_ka30010( self, sort_tp: str, rght_tp: str, trde_end_skip: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 잔량 순위 정보를 조회합니다. Args: sort_tp (str): 정렬구분 - 1: 순매수잔량상위 - 2: 순매도잔량상위 rght_tp (str): 권리구분 (3자리) - 000: 전체 - 001: 콜 - 002: 풋 - 003: DC - 004: DP - 006: 조기종료콜 - 007: 조기종료풋 trde_end_skip (str): 거래종료제외 - 0: 거래종료포함 - 1: 거래종료제외 cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 잔량 순위 데이터 { "elwreq_rank": [ # ELW잔량순위 { "stk_cd": str, # 종목코드 "rank": str, # 순위 "stk_nm": str, # 종목명 "cur_prc": str, # 현재가 "pre_sig": str, # 대비기호 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락률 "trde_qty": str, # 거래량 "sel_req": str, # 매도잔량 "buy_req": str, # 매수잔량 "netprps_req": str, # 순매수잔량 "trde_prica": str, # 거래대금 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_order_volume_ranking_request_ka30010( ... sort_tp="1", # 순매수잔량상위 ... rght_tp="000", # 전체 ... trde_end_skip="0" # 거래종료포함 ... ) """ # 파라미터 유효성 검증 if sort_tp not in ["1", "2"]: raise ValueError("sort_tp must be '1' (순매수잔량상위) or '2' (순매도잔량상위)") if rght_tp not in ["000", "001", "002", "003", "004", "006", "007"]: raise ValueError("Invalid rght_tp value") if trde_end_skip not in ["0", "1"]: raise ValueError("trde_end_skip must be '0' (포함) or '1' (제외)") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30010", } data = { "sort_tp": sort_tp, "rght_tp": rght_tp, "trde_end_skip": trde_end_skip, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_proximity_rate_request_ka30011( self, stk_cd: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 근접율 정보를 조회합니다. Args: stk_cd (str): 종목코드 (6자리) cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 근접율 데이터 { "elwalacc_rt": [ # ELW근접율 { "stk_cd": str, # 종목코드 "stk_nm": str, # 종목명 "cur_prc": str, # 현재가 "pre_sig": str, # 대비기호 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락율 "acc_trde_qty": str, # 누적거래량 "alacc_rt": str, # 근접율 }, ... ], "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_proximity_rate_request_ka30011( ... stk_cd="57JBHH" # 종목코드 ... ) """ # 파라미터 유효성 검증 if not stk_cd or len(stk_cd) != 6: raise ValueError("stk_cd must be a 6-character string") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30011", } data = { "stk_cd": stk_cd, } return self._execute_request( "POST", json=data, headers=headers, ) def elw_detailed_stock_info_request_ka30012( self, stk_cd: str, cont_yn: str = "N", next_key: str = "", ) -> dict: """ELW 종목 상세 정보를 조회합니다. Args: stk_cd (str): 종목코드 (6자리) cont_yn (str, optional): 연속조회여부. Defaults to "N". next_key (str, optional): 연속조회키. Defaults to "". Returns: dict: ELW 종목 상세 데이터 { "aset_cd": str, # 자산코드 "cur_prc": str, # 현재가 "pred_pre_sig": str, # 전일대비기호 "pred_pre": str, # 전일대비 "flu_rt": str, # 등락율 "lpmmcm_nm": str, # LP회원사명 "lpmmcm_nm_1": str, # LP회원사명1 "lpmmcm_nm_2": str, # LP회원사명2 "elwrght_cntn": str, # ELW권리내용 "elwexpr_evlt_pric": str, # ELW만기평가가격 "elwtheory_pric": str, # ELW이론가 "dispty_rt": str, # 괴리율 "elwinnr_vltl": str, # ELW내재변동성 "exp_rght_pric": str, # 예상권리가 "elwpl_qutr_rt": str, # ELW손익분기율 "elwexec_pric": str, # ELW행사가 "elwcnvt_rt": str, # ELW전환비율 "elwcmpn_rt": str, # ELW보상율 "elwpric_rising_part_rt": str, # ELW가격상승참여율 "elwrght_type": str, # ELW권리유형 "elwsrvive_dys": str, # ELW잔존일수 "stkcnt": str, # 주식수 "elwlpord_pos": str, # ELWLP주문가능 "lpposs_rt": str, # LP보유비율 "lprmnd_qty": str, # LP보유수량 "elwspread": str, # ELW스프레드 "elwprty": str, # ELW패리티 "elwgear": str, # ELW기어링 "elwflo_dt": str, # ELW상장일 "elwfin_trde_dt": str, # ELW최종거래일 "expr_dt": str, # 만기일 "exec_dt": str, # 행사일 "lpsuply_end_dt": str, # LP공급종료일 "elwpay_dt": str, # ELW지급일 "elwinvt_ix_comput": str, # ELW투자지표산출 "elwpay_agnt": str, # ELW지급대리인 "elwappr_way": str, # ELW결재방법 "elwrght_exec_way": str, # ELW권리행사방식 "elwpblicte_orgn": str, # ELW발행기관 "dcsn_pay_amt": str, # 확정지급액 "kobarr": str, # KO베리어 "iv": str, # IV "clsprd_end_elwocr": str, # 종기종료ELW발생 "bsis_aset_1": str, # 기초자산1 "bsis_aset_comp_rt_1": str, # 기초자산구성비율1 "bsis_aset_2": str, # 기초자산2 "bsis_aset_comp_rt_2": str, # 기초자산구성비율2 "bsis_aset_3": str, # 기초자산3 "bsis_aset_comp_rt_3": str, # 기초자산구성비율3 "bsis_aset_4": str, # 기초자산4 "bsis_aset_comp_rt_4": str, # 기초자산구성비율4 "bsis_aset_5": str, # 기초자산5 "bsis_aset_comp_rt_5": str, # 기초자산구성비율5 "fr_dt": str, # 평가시작일자 "to_dt": str, # 평가종료일자 "fr_tm": str, # 평가시작시간 "evlt_end_tm": str, # 평가종료시간 "evlt_pric": str, # 평가가격 "evlt_fnsh_yn": str, # 평가완료여부 "all_hgst_pric": str, # 전체최고가 "all_lwst_pric": str, # 전체최저가 "imaf_hgst_pric": str, # 직후최고가 "imaf_lwst_pric": str, # 직후최저가 "sndhalf_mrkt_hgst_pric": str, # 후반장최고가 "sndhalf_mrkt_lwst_pric": str, # 후반장최저가 "return_code": int, # 응답코드 "return_msg": str, # 응답메시지 } Raises: ValueError: 필수 파라미터가 누락되었거나 유효하지 않은 경우 Example: >>> from kiwoom_rest_api import KiwoomRestAPI >>> api = KiwoomRestAPI() >>> result = api.elw.elw_detailed_stock_info_request_ka30012( ... stk_cd="57JBHH" # 종목코드 ... ) """ # 파라미터 유효성 검증 if not stk_cd or len(stk_cd) != 6: raise ValueError("stk_cd must be a 6-character string") headers = { "cont-yn": cont_yn, "next-key": next_key, "api-id": "ka30012", } data = { "stk_cd": stk_cd, } return self._execute_request( "POST", json=data, headers=headers, )