We will find a way. We always have.

고려대학교에서 인공지능과 금융공학을 연구하고 있는 어느 대학원생의 블로그입니다.

금융(Finance)/시스템 트레이딩(System Trading)

[개발] 대신증권API를 이용한 트레이딩 시스템 - 주식 현재가 조회

MinsukSung 2020. 9. 18. 18:00

안녕하세요 성민석입니다.

진행하는 튜토리얼의 모든 코드는 대신증권 사이보스플러스 자료실에서 제공하는 걸 기반으로 만들었습니다.

그리고 여기에 사용된 모든 코드는 저의 GitHub에서 확인하실 수 있습니다.


지난 시간에는 종목정보를 구하는 예제를 살펴보았습니다. 

 

[개발] 대신증권API를 이용한 트레이딩 시스템 - 종목정보 구하는 예제

안녕하세요 성민석입니다. 진행하는 튜토리얼의 모든 코드는 대신증권 사이보스플러스 자료실에서 제공하는 걸 기반으로 만들었습니다. 그리고 여기에 사용된 모든 코드는 저의 GitHub에서 확인

minsuksung-ai.tistory.com

목적

주식 현재가 조회하는 예제

 

이번에는 정말 간단하게 주식 현재가를 조회하는 예제입니다. 저번 시간과 마찬가지로 아래와 같은 코드로 대신증권 PLUS와 연결해줍니다.

 

import win32com.client

# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
    print("PLUS가 정상적으로 연결되지 않음. ")
    exit()

 

그리고 나서 주식 현재가를 조회하기 위해선 저번 시간에 사용했던 CpUtil.CpCodeMgr가 아닙니다. 대신증권에서는 여러가지 클래스와 모듈이 있기 때문에 이를 제대로 확인하셔야 원하는 정보를 가져올 수 있습니다.

 

objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")

 

아래와 같이 DsCbo1.StockMst를 통해서 객체를 생성해줍니다.  그리고 SetInputValue 함수를 통해서 가져오고자 하는 종목코드를 입력해준다. 그리고 나서 BlockRequest 함수를 통해서 정보를 가져올 수 있습니다. 추후에 BlockRequest 함수에 대해서 자세히 다뤄보도록 하겠습니다.

 

# 현재가 객체 구하기
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()

 

이제 GetHeaderValue 함수를 통해서 요청하고 싶은 정보를 입력해줍니다. 이를 통해서 종목코드, 종목명부터 시작해서 시가, 고가, 저가, 종가와 매도호가나 매수호가 그리고 거래량과 거래대금과 같은 정보를 얻을 수 있습니다.

 

# 현재가 정보 조회
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)

 

 

전체 코드

# 대신증권 API
# 주식 현재가 조회

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)

참고자료

 

사이보스플러스자료실 - 대신증권

 

money2.daishin.com

 

mssung94/daishin-trading-system

대신증권API를 활용하여 간단하게 만들어보는 트레이딩 시스템. Contribute to mssung94/daishin-trading-system development by creating an account on GitHub.

github.com