We will find a way. We always have.

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

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

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

MinsukSung 2020. 9. 18. 11:50

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

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

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


목적

종목정보 구하기

 

대신증권 사이보스플러스 자료실에서 공부한 첫번째 예제는 3000여개의 코스닥과 코스피의 종목코드를 가져오는 예제입니다. 일단 아래의 코드로 간단하게 사이보스플러스의 연결 여부 체크를 해줍니다.

import win32com.client

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

여전히 여길 넘어가지 못하신다면, 사이보스플러스가 정상적으로 작동되고 있는지 확인해주세요. 대부분의 경우, 여기에서 많이 막히실 겁니다. 에러 메세지는 보통 아래와 같이 "PLUS가 정상적으로 연결되지 않음"이라고 뜰텐데, 이럴 경우 PyCharm이나 VSCode나 개발하고 계신 IDE를 관리자 권한으로 실행시켜주셔야합니다. 관리자 권한으로 실행시키지 않을 경우, 저걸 절대로 넘어가지 못 하실겁니다.

 

PLUS가 정상적으로 연결되지 않는다고 계속 에러가 뜨는 경우

 

PyCharm을 관리자 권한으로 꼭 실행하자

 

정상적으로 잘 연결된다면, 그 다음 단계로 넘어가도록 하죠. 우리가 하고자 하는 종목코드 리스트 구하는 함수인 GetStockListByMarket()을 이용해서 거래소/코스닥 종목코드 리스트를 받아올 수 있습니다. 여기서 GetStockListByMarket()의 입력으로 1을 넣으면 거래소를, 2를 넣으면 코스닥 종목코드를 받아올 수 있습니다. 대략 2,3초 정도면 다 받아올 수 있는 것 같습니다. 

 

# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
codeList = objCpCodeMgr.GetStockListByMarket(1)  # 거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2)  # 코스닥

 

그리고 가져온 결과를 아래의 코드와 같이 10개정도만 출력해봅시다.

 

# 종목코드 리스트 구하기
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))

 

최종적으로 3000여개의 종목코드를 가져올 수 있습니다.

 

대신증권 API로 생각보다 몇줄 안되는 코드로 3000여개나 되는 종목코드를 빠르게 가져올 수 있습니다. 다음 내용은 특정 주식의 현재가를 가져오는 내용을 포스팅할 예정입니다.

 

전체 코드

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

참고자료

 

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

첨부파일을 PDF뷰어로 확인 하실수 있으며, PDF뷰어 미설치 고객께서는 우측 다운로드를 통해 설치 후 이용 가능 합니다. PDF뷰어 다운로드

money2.daishin.com

 

mssung94/daishin-trading-system

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

github.com