본문 바로가기
알고리즘 트레이딩/CREON API 예제 분석

CREON API (Python) 종목정보 구하는 예제

by 빵빵댇 2022. 2. 4.

들어가며

처음에 만들었던 주식 매매 프로그램은 예제 프로그램을 돌려보는 정도였고 내 입맛에 맞게 조금씩 수정하면서 수정하기 위해 알아야할 부분만 알아보고는 했다.

 

이번 프로그램 작성은 의욕만 앞서는것보다 목표를 낮게 잡고 나름의 완성을 하는 것이 목적이기 때문에 아주 느긋하게 대신증권에서 제공하고 있는 CREON API 예제들을 하나씩 분석해볼까 한다.

 

https://www.creontrade.com

 

크레온

대신증권 온라인 주식 거래 서비스. 비대면계좌개설, 수수료 혜택, 주식시세, 종목추천, 투자정보 제공

www.creontrade.com

 

예제는 위 사이트에 접속해서 메뉴의 '고객라운지 - 트레이딩 안내 - CREON Plus(API)' 메뉴에서 확인해볼 수 있다.

 

 

해당 메뉴를 선택하면 아래와 같은 화면을 확인할 수 있는데, 보이는 것처럼 자료실로 들어가서 상품과 언어를 각각 전체 상품, 파이썬으로 선택하면 파이썬으로 작성되어 있는 CREON API 사용예제들을 확인할 수 있다. 게시물이 작성된 순서대로 차례차례 분석해볼 예정이기 때문에 이번에는 가장 처음 작성된 '종목정보 구하는 예제'를 분석해볼 생각이다.

 

 

코드

import win32com.client
 
 
# 연결 여부 체크
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))

 

 

Trouble Shooting

https://bbdad.tistory.com/11?category=536966 (ModuleNotFoundError: No module named 'win32com')

https://bbdad.tistory.com/12?category=536966 (pywintypes.com_error: (-2147221021, '작업을 사용할 수 없습니다.', None, None) )

 

분석내용

  1. CREON PLUS 연결상태 확인
    • 사용하는 COM 객체 : CpUtil.CpCybos  (COM 객체는 나도 정확하게는 모르겠지만 윈도우 어플리케이션을 사용할 수 있게 해주는 방법인 것 같다. win32com.client.Dispatch라는 메소드의 파라미터로 다른 값들을 넣으면 엑셀, 워드 등의 프로그램을 제어할 수 있는 예제들을 몇개 발견했다)
    • IsConnect라는 메소드를 사용하여 연결상태가 정상적인 경우 True(1)를 반환한다.
    • 혹시 여기서 자꾸 문제가 생긴다면 두 가지를 확인해보면 된다. 프로그램을 실행하는 CREON PLUS가 정상적으로 작동중인지, Visual Studio Code(또는 기타 툴)을 관리자 권한으로 실행하였는지.
  2. 종목 리스트 및 내용 구하기
    • 사용하는 COM 객체 : CpUtil.CpCodeMgr
    • 위 객체로부터 불러온 COM 객체만을 사용하여 모든 종목 정보를 읽어오고 있다.
    • CodeMgr은 당연히 코드 매니저의 약어일것 같고, 이 예제에서 사용하는 모든 메소드는 파라미터로 들어오는 코드(Code)에 맵핑되는 값(Value)을 반환하고 있는 것으로 이해하기에 자연스럽다.
    • GetStockListByMarket()으로 주식 종목 리스트를 읽어오고 있으며, 예제 내에서 확인할 수 있는 내용으로 1은 거래소, 2는 코스닥에 해당하는 코드이다.
    • 읽어온 주식 종목 리스트는 코드값을 의미하는 문자열 tuple이다.
    • GetStockSectionKind()는 주식종목의 부가적인 정보를 나타내는 코드값을 읽어오는 것 같은데 그 값이 정확한 의미는 모르겠다.
    • CodeToName()는 파라미터로 받는 코드에 해당하는 종목의 명칭을 가져온다(ex.삼성전자, 한미약품)
    • 예제를 실행해보면 알겠지만 종목 명칭에는 공백이 포함되어 있다. CREON API를 사용할 개발자로서는 알고 있으면 편리한 사실이다.
  3. CREON API 문법
    • CREON API 레퍼런스 문서를 찾다가 아래와 같은 글을 발견했다. 레퍼런스 문서가 없다는 말로 보이는데 도움말 게시판이 사실상 레퍼런스 문서 역할을 하고 있다.

 

실행결과는 아래와 같다. 거래소와 코스닥의 모든 종목에 대해 순번(출력순번)/종목코드/부가코드/가격/종목이름 을 출력해주고 있으며 마지막에는 처음 읽어온 종목tuple의 길이를 확인해서 모든 종목이 몇개인지 출력하고 있다.

 

위 화면은 Visual Studio Code의 터미널 윈도우 캡쳐다 

 

참고

https://bbdad.tistory.com/8?category=536972

 

3. Visual Studio Code 설치

비쥬얼 스튜디오 코드는 마이크로소프트에서 만든 툴이다. 나도 익숙하게 사용하는 편집기는 아니긴 하지만 개인적으로 느끼기에 쉘 접근 기능이 편리해서 파이썬을 이용해서 개발하기 용이한

bbdad.tistory.com

 

댓글