Files
2026-02-04 00:16:34 +09:00

309 lines
17 KiB
Python

"""
Created on 20250101
"""
import sys
import logging
from typing import Optional
import pandas as pd
sys.path.extend(['../..', '.'])
import kis_auth as ka
# 로깅 설정
logging.basicConfig(level=logging.INFO)
##############################################################################################
# [국내주식] 시세분석 > 관심종목(멀티종목) 시세조회 [국내주식-205]
##############################################################################################
# 상수 정의
API_URL = "/uapi/domestic-stock/v1/quotations/intstock-multprice"
def intstock_multprice(
fid_cond_mrkt_div_code_1: str, # [필수] 조건 시장 분류 코드1 (ex. J)
fid_input_iscd_1: str, # [필수] 입력 종목코드1 (ex. 123456)
fid_cond_mrkt_div_code_2: Optional[str] = None, # 조건 시장 분류 코드2
fid_input_iscd_2: Optional[str] = None, # 입력 종목코드2
fid_cond_mrkt_div_code_3: Optional[str] = None, # 조건 시장 분류 코드3
fid_input_iscd_3: Optional[str] = None, # 입력 종목코드3
fid_cond_mrkt_div_code_4: Optional[str] = None, # 조건 시장 분류 코드4
fid_input_iscd_4: Optional[str] = None, # 입력 종목코드4
fid_cond_mrkt_div_code_5: Optional[str] = None, # 조건 시장 분류 코드5
fid_input_iscd_5: Optional[str] = None, # 입력 종목코드5
fid_cond_mrkt_div_code_6: Optional[str] = None, # 조건 시장 분류 코드6
fid_input_iscd_6: Optional[str] = None, # 입력 종목코드6
fid_cond_mrkt_div_code_7: Optional[str] = None, # 조건 시장 분류 코드7
fid_input_iscd_7: Optional[str] = None, # 입력 종목코드7
fid_cond_mrkt_div_code_8: Optional[str] = None, # 조건 시장 분류 코드8
fid_input_iscd_8: Optional[str] = None, # 입력 종목코드8
fid_cond_mrkt_div_code_9: Optional[str] = None, # 조건 시장 분류 코드9
fid_input_iscd_9: Optional[str] = None, # 입력 종목코드9
fid_cond_mrkt_div_code_10: Optional[str] = None, # 조건 시장 분류 코드10
fid_input_iscd_10: Optional[str] = None, # 입력 종목코드10
fid_cond_mrkt_div_code_11: Optional[str] = None, # 조건 시장 분류 코드11
fid_input_iscd_11: Optional[str] = None, # 입력 종목코드11
fid_cond_mrkt_div_code_12: Optional[str] = None, # 조건 시장 분류 코드12
fid_input_iscd_12: Optional[str] = None, # 입력 종목코드12
fid_cond_mrkt_div_code_13: Optional[str] = None, # 조건 시장 분류 코드13
fid_input_iscd_13: Optional[str] = None, # 입력 종목코드13
fid_cond_mrkt_div_code_14: Optional[str] = None, # 조건 시장 분류 코드14
fid_input_iscd_14: Optional[str] = None, # 입력 종목코드14
fid_cond_mrkt_div_code_15: Optional[str] = None, # 조건 시장 분류 코드15
fid_input_iscd_15: Optional[str] = None, # 입력 종목코드15
fid_cond_mrkt_div_code_16: Optional[str] = None, # 조건 시장 분류 코드16
fid_input_iscd_16: Optional[str] = None, # 입력 종목코드16
fid_cond_mrkt_div_code_17: Optional[str] = None, # 조건 시장 분류 코드17
fid_input_iscd_17: Optional[str] = None, # 입력 종목코드17
fid_cond_mrkt_div_code_18: Optional[str] = None, # 조건 시장 분류 코드18
fid_input_iscd_18: Optional[str] = None, # 입력 종목코드18
fid_cond_mrkt_div_code_19: Optional[str] = None, # 조건 시장 분류 코드19
fid_input_iscd_19: Optional[str] = None, # 입력 종목코드19
fid_cond_mrkt_div_code_20: Optional[str] = None, # 조건 시장 분류 코드20
fid_input_iscd_20: Optional[str] = None, # 입력 종목코드20
fid_cond_mrkt_div_code_21: Optional[str] = None, # 조건 시장 분류 코드21
fid_input_iscd_21: Optional[str] = None, # 입력 종목코드21
fid_cond_mrkt_div_code_22: Optional[str] = None, # 조건 시장 분류 코드22
fid_input_iscd_22: Optional[str] = None, # 입력 종목코드22
fid_cond_mrkt_div_code_23: Optional[str] = None, # 조건 시장 분류 코드23
fid_input_iscd_23: Optional[str] = None, # 입력 종목코드23
fid_cond_mrkt_div_code_24: Optional[str] = None, # 조건 시장 분류 코드24
fid_input_iscd_24: Optional[str] = None, # 입력 종목코드24
fid_cond_mrkt_div_code_25: Optional[str] = None, # 조건 시장 분류 코드25
fid_input_iscd_25: Optional[str] = None, # 입력 종목코드25
fid_cond_mrkt_div_code_26: Optional[str] = None, # 조건 시장 분류 코드26
fid_input_iscd_26: Optional[str] = None, # 입력 종목코드26
fid_cond_mrkt_div_code_27: Optional[str] = None, # 조건 시장 분류 코드27
fid_input_iscd_27: Optional[str] = None, # 입력 종목코드27
fid_cond_mrkt_div_code_28: Optional[str] = None, # 조건 시장 분류 코드28
fid_input_iscd_28: Optional[str] = None, # 입력 종목코드28
fid_cond_mrkt_div_code_29: Optional[str] = None, # 조건 시장 분류 코드29
fid_input_iscd_29: Optional[str] = None, # 입력 종목코드29
fid_cond_mrkt_div_code_30: Optional[str] = None, # 조건 시장 분류 코드30
fid_input_iscd_30: Optional[str] = None # 입력 종목코드30
) -> pd.DataFrame:
"""
관심종목(멀티종목) 시세조회 API입니다.
① 관심종목 그룹조회 → ② 관심종목 그룹별 종목조회 → ③ 관심종목(멀티종목) 시세조회 순서대로 호출하셔서 관심종목 시세 조회 가능합니다.
※ 한 번의 호출에 최대 30종목의 시세 확인 가능합니다.
그룹별종목조회 결과를 아래와 같이 입력하셔서 총 30종목까지 복수종목 조회 가능합니다.(아래 Example 참고)
. fid_mrkt_cls_code(시장구분) → FID_COND_MRKT_DIV_CODE_1
. jong_code(종목코드) 1 → FID_INPUT_ISCD_1
...
한국투자증권 Github 에서 관심종목 복수시세조회 파이썬 샘플코드를 참고하실 수 있습니다.
https://github.com/koreainvestment/open-trading-api/blob/main/rest/interest_stocks_price.py
Args:
fid_cond_mrkt_div_code_1 (str): [필수] 조건 시장 분류 코드1 (J:KRX, NX:NXT)
fid_input_iscd_1 (str): [필수] 입력 종목코드1 (ex. 123456)
fid_cond_mrkt_div_code_2 (Optional[str]): 조건 시장 분류 코드2
fid_input_iscd_2 (Optional[str]): 입력 종목코드2
fid_cond_mrkt_div_code_3 (Optional[str]): 조건 시장 분류 코드3
fid_input_iscd_3 (Optional[str]): 입력 종목코드3
fid_cond_mrkt_div_code_4 (Optional[str]): 조건 시장 분류 코드4
fid_input_iscd_4 (Optional[str]): 입력 종목코드4
fid_cond_mrkt_div_code_5 (Optional[str]): 조건 시장 분류 코드5
fid_input_iscd_5 (Optional[str]): 입력 종목코드5
fid_cond_mrkt_div_code_6 (Optional[str]): 조건 시장 분류 코드6
fid_input_iscd_6 (Optional[str]): 입력 종목코드6
fid_cond_mrkt_div_code_7 (Optional[str]): 조건 시장 분류 코드7
fid_input_iscd_7 (Optional[str]): 입력 종목코드7
fid_cond_mrkt_div_code_8 (Optional[str]): 조건 시장 분류 코드8
fid_input_iscd_8 (Optional[str]): 입력 종목코드8
fid_cond_mrkt_div_code_9 (Optional[str]): 조건 시장 분류 코드9
fid_input_iscd_9 (Optional[str]): 입력 종목코드9
fid_cond_mrkt_div_code_10 (Optional[str]): 조건 시장 분류 코드10
fid_input_iscd_10 (Optional[str]): 입력 종목코드10
fid_cond_mrkt_div_code_11 (Optional[str]): 조건 시장 분류 코드11
fid_input_iscd_11 (Optional[str]): 입력 종목코드11
fid_cond_mrkt_div_code_12 (Optional[str]): 조건 시장 분류 코드12
fid_input_iscd_12 (Optional[str]): 입력 종목코드12
fid_cond_mrkt_div_code_13 (Optional[str]): 조건 시장 분류 코드13
fid_input_iscd_13 (Optional[str]): 입력 종목코드13
fid_cond_mrkt_div_code_14 (Optional[str]): 조건 시장 분류 코드14
fid_input_iscd_14 (Optional[str]): 입력 종목코드14
fid_cond_mrkt_div_code_15 (Optional[str]): 조건 시장 분류 코드15
fid_input_iscd_15 (Optional[str]): 입력 종목코드15
fid_cond_mrkt_div_code_16 (Optional[str]): 조건 시장 분류 코드16
fid_input_iscd_16 (Optional[str]): 입력 종목코드16
fid_cond_mrkt_div_code_17 (Optional[str]): 조건 시장 분류 코드17
fid_input_iscd_17 (Optional[str]): 입력 종목코드17
fid_cond_mrkt_div_code_18 (Optional[str]): 조건 시장 분류 코드18
fid_input_iscd_18 (Optional[str]): 입력 종목코드18
fid_cond_mrkt_div_code_19 (Optional[str]): 조건 시장 분류 코드19
fid_input_iscd_19 (Optional[str]): 입력 종목코드19
fid_cond_mrkt_div_code_20 (Optional[str]): 조건 시장 분류 코드20
fid_input_iscd_20 (Optional[str]): 입력 종목코드20
fid_cond_mrkt_div_code_21 (Optional[str]): 조건 시장 분류 코드21
fid_input_iscd_21 (Optional[str]): 입력 종목코드21
fid_cond_mrkt_div_code_22 (Optional[str]): 조건 시장 분류 코드22
fid_input_iscd_22 (Optional[str]): 입력 종목코드22
fid_cond_mrkt_div_code_23 (Optional[str]): 조건 시장 분류 코드23
fid_input_iscd_23 (Optional[str]): 입력 종목코드23
fid_cond_mrkt_div_code_24 (Optional[str]): 조건 시장 분류 코드24
fid_input_iscd_24 (Optional[str]): 입력 종목코드24
fid_cond_mrkt_div_code_25 (Optional[str]): 조건 시장 분류 코드25
fid_input_iscd_25 (Optional[str]): 입력 종목코드25
fid_cond_mrkt_div_code_26 (Optional[str]): 조건 시장 분류 코드26
fid_input_iscd_26 (Optional[str]): 입력 종목코드26
fid_cond_mrkt_div_code_27 (Optional[str]): 조건 시장 분류 코드27
fid_input_iscd_27 (Optional[str]): 입력 종목코드27
fid_cond_mrkt_div_code_28 (Optional[str]): 조건 시장 분류 코드28
fid_input_iscd_28 (Optional[str]): 입력 종목코드28
fid_cond_mrkt_div_code_29 (Optional[str]): 조건 시장 분류 코드29
fid_input_iscd_29 (Optional[str]): 입력 종목코드29
fid_cond_mrkt_div_code_30 (Optional[str]): 조건 시장 분류 코드30
fid_input_iscd_30 (Optional[str]): 입력 종목코드30
Returns:
pd.DataFrame: 관심종목(멀티종목) 시세 데이터
Example:
>>> df = intstock_multprice(fid_cond_mrkt_div_code_1="J", fid_input_iscd_1="419530")
>>> print(df)
"""
if fid_cond_mrkt_div_code_1 == "":
raise ValueError("fid_cond_mrkt_div_code_1 is required (e.g. 'J')")
if fid_input_iscd_1 == "":
raise ValueError("fid_input_iscd_1 is required (e.g. '123456')")
tr_id = "FHKST11300006" # 관심종목(멀티종목) 시세조회
params = {
"FID_COND_MRKT_DIV_CODE_1": fid_cond_mrkt_div_code_1,
"FID_INPUT_ISCD_1": fid_input_iscd_1
}
# 옵션 파라미터 처리
if fid_cond_mrkt_div_code_2 is not None:
params["FID_COND_MRKT_DIV_CODE_2"] = fid_cond_mrkt_div_code_2
if fid_input_iscd_2 is not None:
params["FID_INPUT_ISCD_2"] = fid_input_iscd_2
if fid_cond_mrkt_div_code_3 is not None:
params["FID_COND_MRKT_DIV_CODE_3"] = fid_cond_mrkt_div_code_3
if fid_input_iscd_3 is not None:
params["FID_INPUT_ISCD_3"] = fid_input_iscd_3
if fid_cond_mrkt_div_code_4 is not None:
params["FID_COND_MRKT_DIV_CODE_4"] = fid_cond_mrkt_div_code_4
if fid_input_iscd_4 is not None:
params["FID_INPUT_ISCD_4"] = fid_input_iscd_4
if fid_cond_mrkt_div_code_5 is not None:
params["FID_COND_MRKT_DIV_CODE_5"] = fid_cond_mrkt_div_code_5
if fid_input_iscd_5 is not None:
params["FID_INPUT_ISCD_5"] = fid_input_iscd_5
if fid_cond_mrkt_div_code_6 is not None:
params["FID_COND_MRKT_DIV_CODE_6"] = fid_cond_mrkt_div_code_6
if fid_input_iscd_6 is not None:
params["FID_INPUT_ISCD_6"] = fid_input_iscd_6
if fid_cond_mrkt_div_code_7 is not None:
params["FID_COND_MRKT_DIV_CODE_7"] = fid_cond_mrkt_div_code_7
if fid_input_iscd_7 is not None:
params["FID_INPUT_ISCD_7"] = fid_input_iscd_7
if fid_cond_mrkt_div_code_8 is not None:
params["FID_COND_MRKT_DIV_CODE_8"] = fid_cond_mrkt_div_code_8
if fid_input_iscd_8 is not None:
params["FID_INPUT_ISCD_8"] = fid_input_iscd_8
if fid_cond_mrkt_div_code_9 is not None:
params["FID_COND_MRKT_DIV_CODE_9"] = fid_cond_mrkt_div_code_9
if fid_input_iscd_9 is not None:
params["FID_INPUT_ISCD_9"] = fid_input_iscd_9
if fid_cond_mrkt_div_code_10 is not None:
params["FID_COND_MRKT_DIV_CODE_10"] = fid_cond_mrkt_div_code_10
if fid_input_iscd_10 is not None:
params["FID_INPUT_ISCD_10"] = fid_input_iscd_10
if fid_cond_mrkt_div_code_11 is not None:
params["FID_COND_MRKT_DIV_CODE_11"] = fid_cond_mrkt_div_code_11
if fid_input_iscd_11 is not None:
params["FID_INPUT_ISCD_11"] = fid_input_iscd_11
if fid_cond_mrkt_div_code_12 is not None:
params["FID_COND_MRKT_DIV_CODE_12"] = fid_cond_mrkt_div_code_12
if fid_input_iscd_12 is not None:
params["FID_INPUT_ISCD_12"] = fid_input_iscd_12
if fid_cond_mrkt_div_code_13 is not None:
params["FID_COND_MRKT_DIV_CODE_13"] = fid_cond_mrkt_div_code_13
if fid_input_iscd_13 is not None:
params["FID_INPUT_ISCD_13"] = fid_input_iscd_13
if fid_cond_mrkt_div_code_14 is not None:
params["FID_COND_MRKT_DIV_CODE_14"] = fid_cond_mrkt_div_code_14
if fid_input_iscd_14 is not None:
params["FID_INPUT_ISCD_14"] = fid_input_iscd_14
if fid_cond_mrkt_div_code_15 is not None:
params["FID_COND_MRKT_DIV_CODE_15"] = fid_cond_mrkt_div_code_15
if fid_input_iscd_15 is not None:
params["FID_INPUT_ISCD_15"] = fid_input_iscd_15
if fid_cond_mrkt_div_code_16 is not None:
params["FID_COND_MRKT_DIV_CODE_16"] = fid_cond_mrkt_div_code_16
if fid_input_iscd_16 is not None:
params["FID_INPUT_ISCD_16"] = fid_input_iscd_16
if fid_cond_mrkt_div_code_17 is not None:
params["FID_COND_MRKT_DIV_CODE_17"] = fid_cond_mrkt_div_code_17
if fid_input_iscd_17 is not None:
params["FID_INPUT_ISCD_17"] = fid_input_iscd_17
if fid_cond_mrkt_div_code_18 is not None:
params["FID_COND_MRKT_DIV_CODE_18"] = fid_cond_mrkt_div_code_18
if fid_input_iscd_18 is not None:
params["FID_INPUT_ISCD_18"] = fid_input_iscd_18
if fid_cond_mrkt_div_code_19 is not None:
params["FID_COND_MRKT_DIV_CODE_19"] = fid_cond_mrkt_div_code_19
if fid_input_iscd_19 is not None:
params["FID_INPUT_ISCD_19"] = fid_input_iscd_19
if fid_cond_mrkt_div_code_20 is not None:
params["FID_COND_MRKT_DIV_CODE_20"] = fid_cond_mrkt_div_code_20
if fid_input_iscd_20 is not None:
params["FID_INPUT_ISCD_20"] = fid_input_iscd_20
if fid_cond_mrkt_div_code_21 is not None:
params["FID_COND_MRKT_DIV_CODE_21"] = fid_cond_mrkt_div_code_21
if fid_input_iscd_21 is not None:
params["FID_INPUT_ISCD_21"] = fid_input_iscd_21
if fid_cond_mrkt_div_code_22 is not None:
params["FID_COND_MRKT_DIV_CODE_22"] = fid_cond_mrkt_div_code_22
if fid_input_iscd_22 is not None:
params["FID_INPUT_ISCD_22"] = fid_input_iscd_22
if fid_cond_mrkt_div_code_23 is not None:
params["FID_COND_MRKT_DIV_CODE_23"] = fid_cond_mrkt_div_code_23
if fid_input_iscd_23 is not None:
params["FID_INPUT_ISCD_23"] = fid_input_iscd_23
if fid_cond_mrkt_div_code_24 is not None:
params["FID_COND_MRKT_DIV_CODE_24"] = fid_cond_mrkt_div_code_24
if fid_input_iscd_24 is not None:
params["FID_INPUT_ISCD_24"] = fid_input_iscd_24
if fid_cond_mrkt_div_code_25 is not None:
params["FID_COND_MRKT_DIV_CODE_25"] = fid_cond_mrkt_div_code_25
if fid_input_iscd_25 is not None:
params["FID_INPUT_ISCD_25"] = fid_input_iscd_25
if fid_cond_mrkt_div_code_26 is not None:
params["FID_COND_MRKT_DIV_CODE_26"] = fid_cond_mrkt_div_code_26
if fid_input_iscd_26 is not None:
params["FID_INPUT_ISCD_26"] = fid_input_iscd_26
if fid_cond_mrkt_div_code_27 is not None:
params["FID_COND_MRKT_DIV_CODE_27"] = fid_cond_mrkt_div_code_27
if fid_input_iscd_27 is not None:
params["FID_INPUT_ISCD_27"] = fid_input_iscd_27
if fid_cond_mrkt_div_code_28 is not None:
params["FID_COND_MRKT_DIV_CODE_28"] = fid_cond_mrkt_div_code_28
if fid_input_iscd_28 is not None:
params["FID_INPUT_ISCD_28"] = fid_input_iscd_28
if fid_cond_mrkt_div_code_29 is not None:
params["FID_COND_MRKT_DIV_CODE_29"] = fid_cond_mrkt_div_code_29
if fid_input_iscd_29 is not None:
params["FID_INPUT_ISCD_29"] = fid_input_iscd_29
if fid_cond_mrkt_div_code_30 is not None:
params["FID_COND_MRKT_DIV_CODE_30"] = fid_cond_mrkt_div_code_30
if fid_input_iscd_30 is not None:
params["FID_INPUT_ISCD_30"] = fid_input_iscd_30
res = ka._url_fetch(API_URL, tr_id, "", params)
if res.isOK():
current_data = pd.DataFrame(res.getBody().output)
logging.info("Data fetch complete.")
return current_data
else:
res.printError(url=API_URL)
return pd.DataFrame()