Files
KisStock/한국투자증권(API)/examples_user/overseas_stock/overseas_stock_functions_ws.py
2026-01-31 22:34:57 +09:00

296 lines
8.0 KiB
Python

import logging
import sys
sys.path.extend(['..', '.'])
import kis_auth as ka
# 로깅 설정
logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
##############################################################################################
# [해외주식] 실시간시세 > 해외주식 실시간호가[실시간-021]
##############################################################################################
def asking_price(
tr_type: str,
tr_key: str,
) -> tuple[dict, list[str]]:
"""
해외주식 실시간호가를 이용하여 미국시세 실시간 1호가(매수/매도) 시세가 무료로 제공됩니다. (미국은 유료시세 제공 X)
아시아 국가의 경우, HTS(efriend Plus) [7781] 시세신청(실시간) 화면에서 유료 서비스 신청 시,
"해외주식 실시간호가 HDFSASP0" 을 이용하여 아시아국가 유료시세(실시간호가)를 받아보실 수 있습니다. (24.11.29 반영)
(아시아 국가 무료시세는 "해외주식 지연호가(아시아) HDFSASP1" 를 이용하시기 바랍니다.)
Args:
tr_type (str): [필수] 등록/해제
tr_key (str): [필수] 종목코드
Returns:
message (dict): 메시지 데이터
columns (list[str]): 컬럼 정보
Example:
>>> msg, columns = asking_price("1", "DNASAAPL")
>>> print(msg, columns)
"""
# 필수 파라미터 검증
if tr_type == "":
raise ValueError("tr_type is required")
if tr_key == "":
raise ValueError("tr_key is required")
tr_id = "HDFSASP0"
params = {
"tr_key": tr_key,
}
msg = ka.data_fetch(tr_id, tr_type, params)
columns = [
"symb",
"zdiv",
"xymd",
"xhms",
"kymd",
"khms",
"bvol",
"avol",
"bdvl",
"advl",
"pbid1",
"pask1",
"vbid1",
"vask1",
"dbid1",
"dask1"
]
return msg, columns
##############################################################################################
# [해외주식] 실시간시세 > 해외주식 실시간체결통보[실시간-009]
##############################################################################################
def ccnl_notice(
tr_type: str,
tr_key: str,
env_dv: str,
) -> tuple[dict, list[str]]:
"""
해외주식 실시간체결통보 API입니다.
Args:
tr_type (str): [필수] 등록/해제
tr_key (str): [필수] 종목코드
env_dv (str): [필수] 실전모의구분 (ex. real:실전, demo:모의)
Returns:
message (dict): 메시지 데이터
columns (list[str]): 컬럼 정보
Example:
>>> msg, columns = ccnl_notice("1", trenv.my_htsid, "real")
>>> print(msg, columns)
"""
# 필수 파라미터 검증
if tr_type == "":
raise ValueError("tr_type is required")
if tr_key == "":
raise ValueError("tr_key is required")
if env_dv == "":
raise ValueError("env_dv is required (e.g. 'real', 'demo')")
# tr_id 구분
if env_dv == "real":
tr_id = "H0GSCNI0"
elif env_dv == "demo":
tr_id = "H0GSCNI9"
else:
raise ValueError("env_dv can only be real or demo")
params = {
"tr_key": tr_key,
}
msg = ka.data_fetch(tr_id, tr_type, params)
columns = [
"CUST_ID",
"ACNT_NO",
"ODER_NO",
"OODER_NO",
"SELN_BYOV_CLS",
"RCTF_CLS",
"ODER_KIND2",
"STCK_SHRN_ISCD",
"CNTG_QTY",
"CNTG_UNPR",
"STCK_CNTG_HOUR",
"RFUS_YN",
"CNTG_YN",
"ACPT_YN",
"BRNC_NO",
"ODER_QTY",
"ACNT_NAME",
"CNTG_ISNM",
"ODER_COND",
"DEBT_GB",
"DEBT_DATE",
"START_TM",
"END_TM",
"TM_DIV_TP",
"CNTG_UNPR12"
]
return msg, columns
##############################################################################################
# [해외주식] 실시간시세 > 해외주식 지연호가(아시아)[실시간-008]
##############################################################################################
def delayed_asking_price_asia(
tr_type: str,
tr_key: str,
) -> tuple[dict, list[str]]:
"""
해외주식 지연호가(아시아)의 경우 아시아 무료시세(지연호가)가 제공됩니다.
HTS(efriend Plus) [7781] 시세신청(실시간) 화면에서 유료 서비스 신청 시,
"해외주식 실시간호가 HDFSASP0" 을 이용하여 아시아국가 유료시세(실시간호가)를 받아보실 수 있습니다. (24.11.29 반영)
※ 지연시세 지연시간 : 홍콩, 베트남, 중국, 일본 - 15분지연
Args:
tr_type (str): [필수] 등록/해제
tr_key (str): [필수] 종목코드
Returns:
message (dict): 메시지 데이터
columns (list[str]): 컬럼 정보
Example:
>>> msg, columns = delayed_asking_price_asia("1", "DHKS00003")
>>> print(msg, columns)
"""
# 필수 파라미터 검증
if tr_type == "":
raise ValueError("tr_type is required")
if tr_key == "":
raise ValueError("tr_key is required")
tr_id = "HDFSASP1"
params = {
"tr_key": tr_key,
}
msg = ka.data_fetch(tr_id, tr_type, params)
columns = [
"symb",
"zdiv",
"xymd",
"xhms",
"kymd",
"khms",
"bvol",
"avol",
"bdvl",
"advl",
"pbid1",
"pask1",
"vbid1",
"vask1",
"dbid1",
"dask1"
]
return msg, columns
##############################################################################################
# [해외주식] 실시간시세 > 해외주식 실시간지연체결가[실시간-007]
##############################################################################################
def delayed_ccnl(
tr_type: str,
tr_key: str,
) -> tuple[dict, list[str]]:
"""
해외주식 실시간지연체결가의 경우 기본적으로 무료시세(지연체결가)가 제공되며,
아시아국가의 경우 HTS(efriend Plus) [7781] 시세신청(실시간) 화면에서 유료 서비스 신청 시 API로도 유료시세(실시간체결가)를 받아보실 수 있습니다. (24.11.29 반영)
※ 지연시세 지연시간 : 미국 - 실시간무료(0분지연) / 홍콩, 베트남, 중국, 일본 - 15분지연 (중국은 실시간시세 신청 시 무료실시간시세 제공)
미국의 경우 0분지연시세로 제공되나, 장중 당일 시가는 상이할 수 있으며, 익일 정정 표시됩니다.
해당 API로 미국주간거래(10:00~16:00) 시세 조회도 가능합니다.
※ 미국주간거래 실시간 조회 시, 맨 앞자리(R), tr_key 중 시장구분 값을 다음과 같이 입력 → 나스닥: BAQ, 뉴욕: BAY, 아멕스: BAA
Args:
tr_type (str): [필수] 등록/해제
tr_key (str): [필수] 종목코드
Returns:
message (dict): 메시지 데이터
columns (list[str]): 컬럼 정보
Example:
>>> msg, columns = delayed_ccnl("1", "DNASAAPL")
>>> print(msg, columns)
"""
# 필수 파라미터 검증
if tr_type == "":
raise ValueError("tr_type is required")
if tr_key == "":
raise ValueError("tr_key is required")
tr_id = "HDFSCNT0"
params = {
"tr_key": tr_key,
}
msg = ka.data_fetch(tr_id, tr_type, params)
columns = [
"SYMB",
"ZDIV",
"TYMD",
"XYMD",
"XHMS",
"KYMD",
"KHMS",
"OPEN",
"HIGH",
"LOW",
"LAST",
"SIGN",
"DIFF",
"RATE",
"PBID",
"PASK",
"VBID",
"VASK",
"EVOL",
"TVOL",
"TAMT",
"BIVL",
"ASVL",
"STRN",
"MTYP"
]
return msg, columns