본문 바로가기

포트폴리오/api

cybos plus] 전종목 주가 데이터 가져오기 (sqlite3)

이전에 heyman 님이 올려주신 코드가 첫날에 잘 동작하다가 다음날부터 잘 동작하지 않아서 어쩔 수 없이 수정함ㅠㅠㅠ

(계좌 등급에 따라서 요청할 수 있는 데이터의 양이 제한된다던가;; 하는 문제가 있었음 )


	
import win32com.client
import unittest
import sqlite3
import datetime
from pandas import Series, DataFrame
instStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
CpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr") 
class getPriceInfo:
	def __init__(self):
		pass
		self.getCodes()
	def getCodes(self):
		kospi = CpCodeMgr.GetStockListByMarket(1) # 코스피 
		kosdaq = CpCodeMgr.GetStockListByMarket(2) # 코스닥 
		self.code_list = list(kosdaq+kosdaq) #종목 리스트로 합침 

	def getPrcInfo(self,paramCodes):
		fromDate = CpCodeMgr.GetStockListedDate(paramCodes)
		instStockChart.SetInputValue(0, paramCodes)
		instStockChart.SetInputValue(1, ord('2'))
		instStockChart.SetInputValue(4, 2500)  # From 날짜 
		instStockChart.SetInputValue(5, [0, 2, 3, 4, 5, 8]) # 절대 소문자로 적으면 안됨.
		instStockChart.SetInputValue(6, ord('D'))
		instStockChart.SetInputValue(9, ord('1'))
		instStockChart.BlockRequest()
		self.numData = instStockChart.GetHeaderValue(3)
		print("상장일 :%s" % fromDate)
		data={}
		data['Date']=[instStockChart.GetDataValue(0,i) for i in range(self.numData)]
		data['Open']=[instStockChart.GetDataValue(1,i) for i in range(self.numData)]
		data['High']=[instStockChart.GetDataValue(2,i) for i in range(self.numData)]
		data['Low']=[instStockChart.GetDataValue(3,i) for i in range(self.numData)]
		data['Close']=[instStockChart.GetDataValue(4,i) for i in range(self.numData)]
		data['Volume']=[instStockChart.GetDataValue(5,i) for i in range(self.numData)]
		newData=DataFrame(data,columns=["Date","Open","High","Low","Close","Volume"])
		return newData

	def start(self):
		count=1
		con = sqlite3.connect('code.db')
		for eachCode in self.code_list:
			prcInfo=self.getPrcInfo(eachCode)
			# 'fail', 'replace', 'append' 중 하나 사용
			prcInfo.to_sql(eachCode, con, if_exists='replace',index=None)
			print("[%s / %s] %s 수집 완료" %(count, len(self.code_list), eachCode)) 
			count+=1

if __name__=="__main__":
	prcObj=getPriceInfo()
	prcObj.start()
		
	

'포트폴리오 > api' 카테고리의 다른 글

mpl_finance 에서 candlestick_ohlc 사용하기.  (0) 2019.01.02
pandas Series,DataFrame 기본  (0) 2018.12.24