Allen's 데이터 맛집
[3] 파이썬으로 종목 정보 구하기 및 현재가 조회 본문
본격적인 프로그래밍을 시작해보겠습니다
계속 언급은 드리겠습니다만, 항상 CREON PLUS 프로그램이 실행되고 있어야 됩니다.
파이썬으로 종목정보를 구하는 코드
크레온API 코드를 사용하여 거래소와 코스닥의 주식들을 긁어와서 출력해보겠습니다.
먼저 필요한 모듈 win32com.clint를 import 해주고 크레온 플러스 api와 연결하여 연결을 시도합니다.
import win32com.client
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
exit()
종목 코드를 구하기 위해 objCpCodeMgr를 통해 거래소(codeList)와 코스탁(codeList2)의 정보를 변수에 담습니다
# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
codeList = objCpCodeMgr.GetStockListByMarket(1) #거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2) #코스닥
거래소 종목과 코스닥 종목을 반복문을 통해 전부 출력합니다.
print("거래소 종목코드", len(codeList))
for i, code in enumerate(codeList):
secondCode = objCpCodeMgr.GetStockSectionKind(code)
name = objCpCodeMgr.CodeToName(code)
stdPrice = objCpCodeMgr.GetStockStdPrice(code)
print(i, code, secondCode, stdPrice, name)
print("코스닥 종목코드", len(codeList2))
for i, code in enumerate(codeList2):
secondCode = objCpCodeMgr.GetStockSectionKind(code)
name = objCpCodeMgr.CodeToName(code)
stdPrice = objCpCodeMgr.GetStockStdPrice(code)
print(i, code, secondCode, stdPrice, name)
print("거래소 + 코스닥 종목코드 ",len(codeList) + len(codeList2))
>>>출력 결과:
출력 순서 :
print(i, code, secondCode, stdPrice, name)
(ID, 종목코드, 세컨드코드, 시가액, 종목이름)
위의 이미지 처럼 거래소, 코스닥에 대한 정보가 출력이 된다면 파이썬을 사용하여 CREON PLUS 프로그램과 API를 통하여 통신 연결이 잘 된 것입니다.
원하는 주식 정보도 잘 받아 온 것이므로 본격적인 시작을 할 준비가 되었다고 할 수 있습니다.
원하는 종목 현재가 조회
원하는 종목의 현재가를 조회해 보겠습니다.
위와 같이 크레온 플러스 연결까지는 같고, 밑의 현재가 객체 구하기에서 원하는 종목코드를 입력합니다.
원하는 주식 종목코드를 넣으셔도 되고, 위에서 저희가 출력한 종목이름을 찾으셔서 종목코드를 대입해서 적으셔도 무방합니다.
저는 저의 로또와 같은 비상장주 비보존 코드를 예시로 입력해 보았습니다 ㅠㅠ
objStockMst.SetInputValue(0, 'A276620') <- ' ' 안에 원하는 종목 코드 입력
import win32com.client
# 크레온 플러스 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
exit()
# 현재가 객체 구하기
objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
objStockMst.SetInputValue(0, 'A276620') #종목 코드 - 비보존
objStockMst.BlockRequest()
# 현재가 통신 및 통신 에러 처리
rqStatus = objStockMst.GetDibStatus()
rqRet = objStockMst.GetDibMs``g1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
exit()
종목코드, 종목명, 시간, 종가, 시가 등등 여러가지 정보를 실시간으로 아래 코드를 사용하여 확인해 볼 수 있습니다.
# 현재가 정보 조회
code = objStockMst.GetHeaderValue(0) #종목코드
name= objStockMst.GetHeaderValue(1) # 종목명
time= objStockMst.GetHeaderValue(4) # 시간
cprice= objStockMst.GetHeaderValue(11) # 종가
diff= objStockMst.GetHeaderValue(12) # 대비
open= objStockMst.GetHeaderValue(13) # 시가
high= objStockMst.GetHeaderValue(14) # 고가
low= objStockMst.GetHeaderValue(15) # 저가
offer = objStockMst.GetHeaderValue(16) #매도호가
bid = objStockMst.GetHeaderValue(17) #매수호가
vol= objStockMst.GetHeaderValue(18) #거래량
vol_value= objStockMst.GetHeaderValue(19) #거래대금
# 예상 체결관련 정보
exFlag = objStockMst.GetHeaderValue(58) #예상체결가 구분 플래그
exPrice = objStockMst.GetHeaderValue(55) #예상체결가
exDiff = objStockMst.GetHeaderValue(56) #예상체결가 전일대비
exVol = objStockMst.GetHeaderValue(57) #예상체결수량
print("코드", code)
print("이름", name)
print("시간", time)
print("종가", cprice)
print("대비", diff)
print("시가", open)
print("고가", high)
print("저가", low)
print("매도호가", offer)
print("매수호가", bid)
print("거래량", vol)
print("거래대금", vol_value)
if (exFlag == ord('0')):
print("장 구분값: 동시호가와 장중 이외의 시간")
elif (exFlag == ord('1')) :
print("장 구분값: 동시호가 시간")
elif (exFlag == ord('2')):
print("장 구분값: 장중 또는 장종료")
print("예상체결가 대비 수량")
print("예상체결가", exPrice)
print("예상체결가 대비", exDiff)
print("예상체결수량", exVol)
>>>출력 결과 :
GITHUB : https://github.com/siilver94/Stock-investment-automation