Cybos #1_Cybos와 첫 만남

Daco·2021년 12월 29일
0

주식자동화

목록 보기
1/3

*해당 시리즈는 대신증권 cybos api를 활용하여 주식 프로그램을 제작하는 글입니다.

Cybos가 뭔데?

cybos plus는 대신증권에서 제공하는 투자정보, 주문 플랫폼을 이용하여 나만의 프로그램을 만들어 볼 수 있는 Open API이다.

나의 경우 python을 이용해서 개인 주식 프로그램을 만들어 보려고 한다. 우선 cybos 링크 투척! (다른 참고 링크는 글 하단에)

cybos 홈페이지 : https://money2.daishin.com/E5/WTS/Customer/GuideTrading/DW_DownloadCenter.aspx?p=2669&v=2248&m=1101

cybos 자료실 링크 : https://money2.daishin.com/E5/WTS/Customer/GuideTrading/DW_CybosPlus_Page.aspx?m=9508&p=8812&v=8632

이곳 자료실이나 다른 메뉴들을 둘러보면서 더 구체적인 사용법을 찾을 수 있다. 나는 내가 직접 찾고 경험한 것들 위주로 글을 작성해보겠다.

Cybos를 사용하려면?

우선 cybos는 맥에서는 돌아가지 않으므로 윈도우에서 작업을 해야한다. (맥북에서 돌릴 수 있는 방법이 있다면 꼭 댓글로 남겨주시길..!)

VSCode를 활용하여 코딩을 하면 되고, pywin32pyqt5를 미리 install 해두자. pip로 설치하면 된다. 그리고 파이썬은 32bit 버전을 사용하자. 64bit는 연동이 안되더라.

cybos 도 다운받아 설치해두고 회원가입을 해야한다. 나같은 경우 우선 모의투자 회원으로 가입을 했고 접속은 cybos plus로 접속했다. (아래는 로그인 화면, [설정]에서 모의투자시스템을 선택하고 로그인 하면 된다)

로그인을 했다면 이제 실습을 위해 아까 위에 달아둔 '자료실 링크'에서 '파이썬'을 선택하고 가장 오래된(가장 기초적인) 예제 코드를 하나 불러와보자! 아래는 샘플 코드이다.

종목정보 구하는 예제 - 샘플 코드

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")
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))

솔직히 코드만 봐서는 뭐가 뭔지 모를것이다. 그래서 도움말 가이드가 필요하다.

COM과 파이썬을 설명한 글 : https://wikidocs.net/2885

Component Object Model이란 여러 컴포넌트 객체를 이용해 프로그램을 개발하는 모델을 의미하는데, 프로그래밍 언어와 상관없이 개발된 객체를 사용할 수 있게 해준다.

파이썬에서 다른 프로그래밍 언어로 작성된 COM 객체를 생성하려면 win32com.client라는 모듈의 Dispatch 메서드를 사용한다. 그 예로 아래 코드를 쳐보면 인터넷 익스플로러를 파이썬 코드에서 실행할 수 있다.

import win32com.client

explore = win32com.client.Dispatch("InternetExplorer.Application")
explore.Visible = True

그리고 이름으로 봐도 알겠지만 win32com은 윈도우 기능을 쓰기 위해 만들어진 것이므로 맥에서는 사용할 수 없다. 그래서 맥에서는 작업이 불가하다.ㅜㅜ

win32com의 사용법은 아래처럼 Dispatch() 메서드 안에 호출할 어플리케이션을 문자열로 넣어주면 된다. 해석은 주석에 적어 두었으니 필요하다면 참고하자!

#예시1
win32com.client.Dispatch("InternetExplorer.Application")

#예시2
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
#모듈 위치 CpUtil.dll 에서 CpCybos를 호출.

bConnect = objCpCybos.IsConnect
# 예시) value = object.IsConnect 
# :: CYBOS의 통신 연결상태를 반환
# :: 반환값: 0 연결 끊김, 1 연결 정상
# 즉, 예시의 value가 0 이라면 끊김, value가 1 이라면 연결상태임을 알 수 있다.

if (bConnect == 0):
    print("PLUS가 정상적으로 연결되지 않음. ")
    exit()
# bConnect가 0이라면 끊겼다는 뜻이므로 연결x 메시지를 반환하고 프로세스를 종료한다.

win32com은 이처럼 사용한다. 간단하게 보자면 Dispatch로 객체(인스턴스)를 호출하고 호출한 객체를 이용해 이것저것 값을 불러오거나 하는 방식이다.

다음 글에서는 나머지 샘플 코드에 대해 설명을 해보겠다.

레퍼런스

cybos 도움말 가이드 http://cybosplus.github.io//
파이썬으로 배우는 알고리즘 트레이딩 https://wikidocs.net/book/110
PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램 https://wikidocs.net/book/2165

profile
티스토리 - https://daco2020.tistory.com/

0개의 댓글