-
[python][대신증권] cybos 현재 모든 종목 데이터 받기IT/python 2022. 1. 4. 16:54
키움증권의 경우 현재 모든 종목의 가격을 한번에 불러올 수 없다.
한국 거래소 데이터를 이용할 수 있지만 20분 지연데이터,,,,
대신증권에서는 한번에 모든 종목의 가격 및 기타 정보들을 받을 수 있다.
# 필요 라이브러리
########################################################################################
python 3.7 version (32bit)
win32com.client (pip install pywin32==301)
Name: pywin32
Version: 301
Summary: Python for Window Extensions
Home-page: https://github.com/mhammond/pywin32
Author: Mark Hammond (et al)
Author-email: mhammond@skippinet.com.au
License: PSF
Location: c:\programdata\anaconda3\envs\py37_32bit\lib\site-packages
Requires:
Required-by: web3, pywinauto, jupyter-corepywinauto (pip install pywinauto==0.6.8)
Name: pywinauto
Version: 0.6.8
Summary: A set of Python modules to automate the Microsoft Windows GUI
Home-page: http://pywinauto.github.io/
Author: Mark Mc Mahon and Contributors
Author-email: pywinauto-users@lists.sourceforge.net
License: BSD 3-clause
Location: c:\programdata\anaconda3\envs\py37_32bit\lib\site-packages
Requires: comtypes, pywin32, six
Required-by: hwpconv###################################################################################
# 코드
###################################################################################
import os import win32com.client from pywinauto import application import time import pandas as pd def connect(reconnect=True): # 재연결이라면 기존 연결을 강제로 kill if reconnect: try: os.system('taskkill /IM ncStarter* /F /T') os.system('taskkill /IM CpStart* /F /T') os.system('taskkill /IM DibServer* /F /T') os.system('wmic process where "name like \'%ncStarter%\'" call terminate') os.system('wmic process where "name like \'%CpStart%\'" call terminate') os.system('wmic process where "name like \'%DibServer%\'" call terminate') except: pass CpCybos = win32com.client.Dispatch("CpUtil.CpCybos") if CpCybos.IsConnect: print('already connected.') else: app = application.Application() app.start( 'C:\Daishin\Starter\\ncStarter.exe /prj:cp /id:{id} /pwd:{pwd} /pwdcert:{pwdcert} /autostart'.format( id='아이디', pwd='비밀번호', pwdcert='공인인증서비밀번호') ) # 연결 될때까지 무한루프 while True: if CpCybos.IsConnect: break time.sleep(1) print('connected.') return CpCybos def get_curr_price(CpCybos, code_list, field_list=[0, 4, 5, 6, 7, 11, 20]): field_dic = { '0': 'code', '4': 'close', '5': 'open', '6': 'high', '7': 'low', '11': 'value', '20': 'stocks', '23': 'prev_close' } MarketEye = win32com.client.Dispatch("CpSysDib.MarketEye") division = len(code_list) // 200 remain = len(code_list) % 200 df = [] for d_idx in range(division): remain_request_count = CpCybos.GetLimitRemainCount(1) if remain_request_count == 0: time.sleep(2) MarketEye.SetInputValue(0, field_list) # 요청 필드 MarketEye.SetInputValue(1, code_list[d_idx * 200: (d_idx + 1) * 200]) # 종목코드 or 종목코드 리스트 MarketEye.BlockRequest() row_cnt = MarketEye.GetHeaderValue(2) for r_idx in range(row_cnt): curr_data = [] for f_idx in range(len(field_list)): curr_data.append(MarketEye.GetDataValue(f_idx, r_idx)) df.append(curr_data) remain_request_count = CpCybos.GetLimitRemainCount(1) if remain_request_count == 0: time.sleep(2) MarketEye.SetInputValue(0, field_list) # 요청 필드 MarketEye.SetInputValue(1, code_list[-remain:]) # 종목코드 or 종목코드 리스트 MarketEye.BlockRequest() row_cnt = MarketEye.GetHeaderValue(2) for r_idx in range(row_cnt): curr_data = [] for f_idx in range(len(field_list)): curr_data.append(MarketEye.GetDataValue(f_idx, r_idx)) df.append(curr_data) cols = [] for field in field_list: cols.append(field_dic[str(field)]) df = pd.DataFrame(df, columns=cols) return df # 이미 연결되어있다면 재연결 x CpCybos = connect(False) CpCodeMgr = win32com.client.Dispatch('CpUtil.CpCodeMgr') kospi = CpCodeMgr.GetStockListByMarket(1) kosdaq = CpCodeMgr.GetStockListByMarket(2) code_list = list(kospi + kosdaq) print(f'{len(code_list)} stocks') df = get_curr_price(CpCybos, code_list) print(df)
###################################################################################
# 실행화면
###################################################################################
###################################################################################
'IT > python' 카테고리의 다른 글
[python][바이비트] pybit api 기본함수 (USDT Perpetual) (0) 2022.01.31 [python] 한국거래소 주가 데이터 수정 주가 비율 구하기 (0) 2022.01.11 [python][대신증권] cybos 2년 분봉데이터 받기 (0) 2022.01.04 [python][대신증권] cybos 자동로그인 (0) 2022.01.04 [python] try-except 이용 시 에러 메세지 및 에러가 발생된 라인 넘버 알아내기 (0) 2022.01.04