알고 있는 방법은 2가지 입니다.
- 하루씩 추출해서 보는 방법
- 분단위로 추출해서 보는 방법 ( 분은 사용자가 지정 가능하게 만들었음.)
import win32com.client
import time
import shutil
import os
import codecs
import pandas as pd
import numpy as np
from datetime import datetime
from tqdm import tqdm
class CREON(object):
"""대신증권 크레온 API"""
def __init__(self):
self.objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = self.objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
else:
print("정상적으로 연결되었음")
def setMethod(self, code, char, minutes=1, from_yyyymmdd=None, to_yyyymmdd=None, count=None):
"""
count는 보통 상식의 데이터 개수가 아니다.
여기서는 한번 요청 시 가져와지는 데이터의 개수이다.
한번 요청 시 최대 2856개 가능하다.
원하는 데이터 개수가 있으면 to_yyyymmdd 로 가져온 다음에 잘라서 사용한다.
하루에 분단위 데이터가 381개이다. (* 마지막 10분은 동시호가)
"""
self.objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
self.objStockChart.SetInputValue(0, code)
if to_yyyymmdd:
self.objStockChart.SetInputValue(1, ord('1'))
self.objStockChart.SetInputValue(2, from_yyyymmdd)
self.objStockChart.SetInputValue(3, to_yyyymmdd)
elif count:
self.objStockChart.SetInputValue(1, ord('2'))
self.objStockChart.SetInputValue(4, count)
else:
raise print("기간을 입력해주세요.")
self.colnames = "날짜, 시간, 시가, 고가, 저가, 종가, 거래량".split(", ")
self.objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8])
self.objStockChart.SetInputValue(6, ord(char))
if char == "m":
self.objStockChart.SetInputValue(7, minutes)
self.objStockChart.SetInputValue(9, ord('1'))
self.data = {i: [] for i in self.colnames}
def checkRequest(self):
self.objStockChart.BlockRequest()
rqStatus = self.objStockChart.GetDibStatus()
if rqStatus != 0:
return False
self.count = self.objStockChart.GetHeaderValue(3)
if self.count <= 1:
return False
return int(self.count)
def checkRemainTime(self):
remainTime = self.objCpCybos.LimitRequestRemainTime / 1000.
remainCount = self.objCpCybos.GetLimitRemainCount(1)
print("남은시간: ",remainTime, " 남은개수: ", remainCount)
if remainCount <= 0:
print("15초당 60건으로 제한합니다.")
time.sleep(remainTime)
def getStockPriceMin(self):
while 1:
self.checkRemainTime()
rows = self.checkRequest()
if rows:
for i in range(rows):
for idx, col in enumerate(self.colnames):
self.data[col].append(self.objStockChart.GetDataValue(idx, i))
else:
break
self.data = pd.DataFrame(self.data).astype('str')
return self.data
1. 하루단위 조회 방법
code = 'A005930'
name='삼성전자'
creon = CREON()
creon.setMethod(code=code, char="D", to_yyyymmdd=20200519,from_yyyymmdd=20200520)
getStockPrice = creon.getStockPriceMin()
print('---------name : {} 요청은 완료됬습니다.'.format(name))

2. 분단위 조회방법 ( 예제는 2분단위 )
code = 'A005930'
name='삼성전자'
creon = CREON()
creon.setMethod(code=code, char="m", minutes=2, to_yyyymmdd=20200519,from_yyyymmdd=20200520)
getStockPrice = creon.getStockPriceMin()
print('---------name : {} 요청은 완료됬습니다.'.format(name))
