*해당 시리즈는 대신증권 cybos api를 활용하여 주식 프로그램을 제작하는 글입니다.
Cybos 에서는 정보를 가져오는 타입이 세가지가 있는데 첫 번째는 불러온 객체에서 바로 값을 불러오는 방법, 두 번째는 Request()를 통해 값을 불러오는 방법, 세 번째는 Subscribe()을 통해 값이 변동될때마다 그때그때 실시간으로 불러오는 방법이 있다.
이번 글에서는 첫 번째 객체에서 바로 값을 불러오는 방법을 설명해보겠다. (예제 코드는 지난번 샘플 코드를 사용)
import win32com.client #pywin32를 설치했다면 정상적으로 import될 것이다.
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
exit()
# --- 여기까지는 지난 글에서 확인 가능합니다. ---
# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr") # CpCodeMgr는 각종 코드정보 및 코드 리스트를 가져오는 객체이다.
codeList = objCpCodeMgr.GetStockListByMarket(1) #거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2) #코스닥
print("거래소 종목코드", len(codeList))
for i, code in enumerate(codeList): # enumerate 를 이용하여 주식코드와 인덱스를 함께 반복
secondCode = objCpCodeMgr.GetStockSectionKind(code) # code 에 해당하는 부 구분 코드를 반환
name = objCpCodeMgr.CodeToName(code) # 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)) #
주석을 보면 알겠지만 객체에서 곧바로 값을 불러오는 것은 Cybos의 매서드를 활용하여 가져오기만 하면 된다. 이를 더 알기 쉽게 일부만 풀어보자면 다음과 같다.
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
:: 객체를 가져와 objCpCodeMgr 에 할당한다.
codeList = objCpCodeMgr.GetStockListByMarket(1)
:: objCpCodeMgr 객체에 GetStockListByMarket() 매서드와 속성을 활용하여 codeList 를 만든다.
for i, code in enumerate(codeList2):
name = objCpCodeMgr.CodeToName(code)
:: codeList를 for문으로 반복하여 개별 요소인 code를 구하고 code를 다시 CodeToName매서드에 넣어 '종목명'을 name 에 할당한다.
이것이 첫 번째 방법, 불러온 객체를 곧바로 매서드를 활용하여 원하는 값을 얻어내는 방법이다.
방법 자체는 어렵지 않지만 Cybos를 처음 접하는 사람들이라면 저런 매서드는 어떻게 알 수 있는지, 또 어떻게 사용하는지가 추가적인 의문이 들 것이다. 결론부터 말하자면 굳이 매서드를 외울 필요는 없다. Cybos 도움말 를 활용하면 쉽게 그 방법을 찾아낼 수 있다.
처음 도움말을 들어가면 다음 처럼 안내글을 보게 된다. 여기서 직접 하나하나 찾아서 살펴볼 수도 있겠지만 필요한 api를 Search 버튼을 통해 바로 검색해 볼 수 있다.
이렇게 궁금한 api를 검색해보면 해당 api의 모듈 위치는 어디인지, 어떤 Method를 갖고 있는지, 어떤 값을 불러올 수 있는지, 어떤 인자가 필요한지도 알 수 있다. 만약 직접 연습을 해보고 싶다면 Cybos 자료실에 있는 예제 코드를 살펴보고 궁금한 api를 직접 검색해보자.
다음 글에서는 값을 불러오는 두 번째 방법인 Request()에 대해 설명해보겠다.
cybos 도움말 가이드 http://cybosplus.github.io//
파이썬으로 배우는 알고리즘 트레이딩 https://wikidocs.net/book/110
PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램 https://wikidocs.net/book/2165