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

75 lines
3.7 KiB
Python

'''해외주식종목코드 정제 파이썬 파일
미국 : nasmst.cod, nysmst.cod, amsmst.cod,
중국 : shsmst.cod, shimst.cod, szsmst.cod, szimst.cod,
일본 : tsemst.cod,
홍콩 : hksmst.cod,
베트남 : hnxmst.cod, hsxmst.cod'''
'''
※ 유의사항 ※
실행 환경 혹은 원본 파일의 칼럼 수의 변경으로 간혹 정제코드 파일(overseas_stock_code.py)이 실행되지 않을 수 있습니다.
해당 경우, URL에 아래 링크를 복사+붙여넣기 하여 원본 파일을 다운로드하시기 바랍니다.
. https://new.real.download.dws.co.kr/common/master/{val}mst.cod.zip
. {val} 자리에 원하시는 시장코드를 넣어주세요.
. 'nas','nys','ams','shs','shi','szs','szi','tse','hks','hnx','hsx'
. 순서대로 나스닥, 뉴욕, 아멕스, 상해, 상해지수, 심천, 심천지수, 도쿄, 홍콩, 하노이, 호치민
'''
import pandas as pd
import urllib.request
import ssl
import zipfile
import os
base_dir = os.getcwd()
def get_overseas_master_dataframe(base_dir,val):
ssl._create_default_https_context = ssl._create_unverified_context
# urllib.request.urlretrieve(f"https://new.real.download.dws.co.kr/common/master/{val}mst.cod.zip", base_dir + f"\\{val}mst.cod.zip")
urllib.request.urlretrieve(f"https://new.real.download.dws.co.kr/common/master/{val}mst.cod.zip", os.path.join(base_dir, f"{val}mst.cod.zip"))
os.chdir(base_dir)
overseas_zip = zipfile.ZipFile(f'{val}mst.cod.zip')
overseas_zip.extractall()
overseas_zip.close()
# file_name = base_dir + f"\\{val}mst.cod"
file_name = os.path.join(base_dir, f"{val}mst.cod")
columns = ['National code', 'Exchange id', 'Exchange code', 'Exchange name', 'Symbol', 'realtime symbol', 'Korea name', 'English name', 'Security type(1:Index,2:Stock,3:ETP(ETF),4:Warrant)', 'currency', 'float position', 'data type', 'base price', 'Bid order size', 'Ask order size', 'market start time(HHMM)', 'market end time(HHMM)', 'DR 여부(Y/N)', 'DR 국가코드', '업종분류코드', '지수구성종목 존재 여부(0:구성종목없음,1:구성종목있음)', 'Tick size Type', '구분코드(001:ETF,002:ETN,003:ETC,004:Others,005:VIX Underlying ETF,006:VIX Underlying ETN)','Tick size type 상세']
print(f"Downloading...{val}mst.cod")
# df = pd.read_table(base_dir+f"\\{val}mst.cod",sep='\t',encoding='cp949')
df = pd.read_table(os.path.join(base_dir, f"{val}mst.cod"), sep='\t',encoding='cp949')
df.columns = columns
df.to_excel(f'{val}_code.xlsx',index=False) # 현재 위치에 엑셀파일로 저장
return df
cmd = input("1:전부 다운로드, 2:1개의 시장을 다운로드 \n")
if cmd =='1': # 1. 해외종목코드전체 코드를 다운로드
# 순서대로 나스닥, 뉴욕, 아멕스, 상해, 상해지수, 심천, 심천지수, 도쿄, 홍콩, 하노이, 호치민
lst = ['nas','nys','ams','shs','shi','szs','szi','tse','hks','hnx','hsx']
DF=pd.DataFrame()
for i in lst:
temp = get_overseas_master_dataframe(base_dir,i)
DF = pd.concat([DF,temp],axis=0)
print(f"Downloading...overseas_stock_code(all).xlsx")
DF.to_excel('overseas_stock_code(all).xlsx',index=False) # 전체 통합파일
print("Done")
elif cmd =='2': # 2. 해외종목코드 전체 코드를 다운로드
while True:
cmd2 = input("다운로드하시고자 하는 시장의 코드를 입력하여 주세요. \nnas:나스닥, nys:뉴욕, ams:아멕스, shs:상해, shi:상해지수, szs:심천, szi:심천지수, tse:도쿄, hks:홍콩, hnx:하노이, hsx:호치민\n")
try:
df = get_overseas_master_dataframe(base_dir,cmd2)
print("Done")
break;
except:
pass