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

CREON API (Python) 주식 현재가 조회

by 빵빵댇 2022. 2. 15.

코드

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, 'A005930')   #종목 코드 - 삼성전자
objStockMst.BlockRequest()
 
# 현재가 통신 및 통신 에러 처리 
rqStatus = objStockMst.GetDibStatus()
rqRet = objStockMst.GetDibMsg1()
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)

 

실행결과

 

분석내용

주식 현재가 조회에는 DsCbo1.StockMst 객체를 사용하며 StockMst 객체를 통해 호출하는 메소드는 아래 5가지이다. 참고로 모두 크레온 객체들의 공통 인터페이스로 명시되어 있는 메소드들이다.

  • SetInputValue(0, 'A005930')
    • 종목코드를 파라미터로 입력받아서 StockMst 객체의 멤버변수로 저장한다. 얼핏 보면 이 메소드가 대상 종목에 대한 정보를 셋팅해주는 기능을 하는 것처럼 보일 수도 있는데 그렇지 않다. 실제로 대신증권 시스템에 종목정보를 요청하는 시점은 아래에서 설명할 BlockRequest() 호출 시점이다.
    • 첫 번째 파라미터는 고정값 0으로 뒤따르는 파라미터가 종목코드임을 의미한다. 다른 크레온 객체에서는 다양한 값을 사용할 수 있겠지만 StockMst 객체의 경우 고정값 0을 사용한다. 두번째 파라미터는 예제에서 사용한 종목코드로 삼성전자에 해당하는 코드값이다.
  • BlockRequest()
    • 대신증권 시스템에 요청을 송신하는 역할을 한다. 아래는 크레온플러스 홈페이지에서 확인한 내용이다
    • SBC, SB는 각각 실시간 구독 해제, 실시간 구독을 의미한다고 하는데 '실시간 구독'이라는 기능을 지원하는 일부 크레온 객체들이 사용하는 기능으로 보인다. 본 예제의 StockMst는 SBC, SB를 고려하지 않아도 된다.
    • 요청방식은 위에서 볼 수 있듯 BlockRequest()와 Request 방식이 있는데 아직까지 Request()메소드를 사용하는 예제는 보지 못했으니 현재 단계에서는 BlockRequest() 메소드를 사용한다 라고 이해하고 넘어가면 될 것 같다.
  • GetDibStatus()
    • dib통신상태를 확인한다. dib통신은 위 BlockReques()에서 설명한 크레온의 조회/실시간 처리절차를 의미한다. object.GetDibStatus() 의 결과값은 -1 (오류), 0(정상), 1(수신대기) 중 하나인데, -1이나 0인 경우 BlockRequest()를 통해 요청을 할 수 있다. 1(수신대기)는 해당 객체를 통해 Request() 메소드 호출 이후 이벤트를 수신하지 못한 상태라고 한다.
  • GetDibMsg1()
    • dib통신결과 메시지를 반환하는 메소드이다. 본 예제의 경우 실행결과의 '0027 조회가 완료되었습니다.(stock.new.mst)' 라는 문자열을 반환했는데 이는 앞선 BlockRequest() 호출에 대한 결과 값으로 보인다.
      위의 BlockRequest()에 대한 통신결과를 조회
    • BlockRequest() 실행 전에 본 메소드를 호출해 결과를 출력해보면 어떤 문자열도 출력되지 않는다.
  • GetHeaderValue ()
    • 파라미터로 입력받은 코드에 따라 해당하는 StockMst의 멤버변수 값을 반환한다. 코드는 0번부터 86번까지 있는데 전체 코드값은 아래 참고란의 링크에서 확인할 수 있다.

참고

위 분석내용은 크레온 홈페이지의 도움말 및 자료실을 참고하여 작성하였다.

 

아래는 StockMst 멤버변수 목록을 확인할 수 있는 StockMst 도움말 게시글이다.

https://money2.creontrade.com/e5/mboard/ptype_basic/HTS_Plus_Helper/DW_Basic_Read_Page.aspx?boardseq=284&seq=3&page=1&searchString=StockMst&p=8841&v=8643&m=9505 

 

크레온플러스 도움말 - 크레온

설명주식종목의 현재가에 관련된 데이터(10차 호가 포함)통신종류Request/Reply연속여부X관련 SB/PB StockCur관련CYBOS [7021현재가] 주식일반모듈위치cpdib.dll [주의] 업종 관련 데이터는 더 이상 지원하지

money2.creontrade.com

 

댓글