Creon API를 이용하여 주식 종목 코드를 가져오려고 한다.

 

API는 예전에 블로그에 정리한 것을 참고해주세요.

https://songveloper.tistory.com/15?category=688936

 

[Creon API] 종목 코드를 이용하여 여러 정보 가져오기

Creon API 에서 MarketEye 를 이용해서 종목 코드만 있으면 다음과 같은 정보들을 가져올 수 있다. http://money2.creontrade.com/e5/mboard/ptype_basic/HTS_Plus_Helper/DW_Basic_Read_Page.aspx?boardseq=284&s..

songveloper.tistory.com

https://songveloper.tistory.com/12

 

Creon API로 connect

맨날 공부한다고 생각만하고 있어서 그런지 상당히 더디게 프로젝트가 진행되고 있다. 처음에는 python 공부를 목적으로 하였지만.. 그것보단 내가 어떤 주식을 사야할지, 데이터 접근하여 값을 가져오는 용도로..

songveloper.tistory.com

위의 공부한 것을 바탕으로 내가 쓰기 좋게 Creon AP를 구성하고 구현한 것은 다음과 같다.

연결을 확인하고, 내가 원하는 Stock 리스트를 가져오는 그런 코드입니다.

 

import time

import win32com.client

import pandas as pd

from pandas import DataFrame

import copy

 

class Creon:

def __init__(self):

self.obj_CpCodeMgr = win32com.client.Dispatch('CpUtil.CpCodeMgr')

self.obj_CpCybos = win32com.client.Dispatch('CpUtil.CpCybos')

self.obj_StockChart = win32com.client.Dispatch('CpSysDib.StockChart')

 

def creonConnectCheck(self):

b_connected = self.obj_CpCybos.IsConnect

if b_connected == 0:

print("connect fail")

return False

else :

return True

 

def setAllStockList(self):

# ## 대신 api 세팅

obj = win32com.client.Dispatch("CpUtil.CpStockCode")

numData = obj.GetCount()

data = []

self.numTotalCount = 0

for index in range(numData):

tempData = []

tempData.append(obj.GetData(0, index))

if self.obj_CpCodeMgr.GetStockMarketKind(tempData[0]) == 1 or self.obj_CpCodeMgr.GetStockMarketKind(tempData[0]) == 2:

data.append(tempData)

 

return data;

 

def dataSlice(self,stockList):

refinedStockList = []

stockCount = len(stockList);

listRowCount = int(stockCount/200) + 1 #we just we 200 stock.. , so we need to slice the data.

for i in range(listRowCount):

tempList = [] # 안쪽 리스트로 사용할 빈 리스트 생성

for j in range(200):

numOfList = i*200 + j

if stockCount <= numOfList :

break

tempList.append(stockList[numOfList]) # 안쪽 리스트에 0 추가

refinedStockList.append(tempList)

return refinedStockList

 

def subMarketSingArray(self, codeList, mInfoList):

numCodeRow =len(codeList)

print(numCodeRow)

obj = win32com.client.Dispatch("cpsysdib.MarketEye")

 

obj.SetInputValue(0, mInfoList)

obj.SetInputValue(1, codeList)

obj.BlockRequest()

numField = obj.GetHeaderValue(0)

numData = obj.GetHeaderValue(2)

data=[]

 

for idx_x in range(numData):

tempdata=[]

for idx_y in range(numField):

tempdata.append(obj.GetDataValue(idx_y, idx_x))

data.append(tempdata)

 

return data

 

def subMarketEye(self, codeList, mInfoList):

numCodeRow =len(codeList)

print(numCodeRow)

obj = win32com.client.Dispatch("cpsysdib.MarketEye")

 

data=[]

for index in range(numCodeRow):

obj.SetInputValue(0, mInfoList)

obj.SetInputValue(1, codeList[index])

obj.BlockRequest()

numField = obj.GetHeaderValue(0)

numData = obj.GetHeaderValue(2)

 

for idx_x in range(numData):

tempdata=[]

for idx_y in range(numField):

tempdata.append(obj.GetDataValue(idx_y, idx_x))

data.append(tempdata)

 

return data

 



 

 

그 다음에 오늘은 배당금을 가져오고 싶었으나 관련 API 를 찾지 못해서 해당 API를 이용하여

종목명, 그리고 종목 코드를 가져오는 것을 구현

import time

import pandas as pd

from pandas import DataFrame

import CreonApi

import copy



class DividStock(object) :

 

def __init__(self, stockCode, price, stockName,dividend):

print("divide")

self.stockCode = stockCode

self.price = price

self.stockName = stockName

self.dividend =dividend;

 

def printStock(self):

result = []

result.append(self.stockCode)

result.append(self.price)

result.append(self.stockName)

result.append(self.dividend)

return result

 

class DivideStrategy():

 

creon = CreonApi.Creon()

codeinformList = [0,17]

stockList = []

# 0 종목코드, 4 현재가, 17 종목명, 20 : 총 상장주식수, 74 배당률, 75 부채비율, 77 ROA, 80 순이익증가율

# 89 BPS, 91 영업이익 95 결산연월, 102 분기영업이익,107 분기 ROE, 111 결산연월 123 SPS 124 CFPS

 

def refinedStock(self, inputdata):

data = []

lenofdata = len(inputdata)

for index in range(lenofdata):

tempdata = copy.deepcopy(inputdata[index])

tempStock = DividStock(tempdata[0],tempdata[1],tempdata[2])

self.stockList.append(tempStock)

 

def saveDataStockList(self):

lenofdata = len(self.stockList)

result = []

for index in range(lenofdata):

result.append(self.stockList[index].printStock())

df = DataFrame(result,columns=['종목코드', '종목명'])

df.to_csv('StockList.csv')

 

def dividStrategy(self):

if self.creon.creonConnectCheck() == True:

print("start")

tempdata = self.creon.setAllStockList()

sliceData = self.creon.dataSlice(tempdata)

print("refinde")

self.refinedStock(self.creon.subMarketEye(sliceData, self.codeinformList))

print("saved")

self.saveDataStockList()

print("end")

else:

print("bye!")



def DivideStockList():

divideStcok = DivideStrategy()

divideStcok.dividStrategy()

 

DivideStockList()



 

이것으로 가져온 리스트를 활용해서 내가 가진 주식의 배당금을 직전 년도 배당을 통해 알아보고,

내년에 나는 얼마의 배당을 받을 수 있을지 예측하는 프로그램을 만들어볼까합니다.

 

 

 

+ Recent posts