안녕하세요 성민석입니다.
진행하는 튜토리얼의 모든 코드는 대신증권 사이보스플러스 자료실에서 제공하는 걸 기반으로 만들었습니다.
그리고 여기에 사용된 모든 코드는 저의 GitHub에서 확인하실 수 있습니다.
목적
종목정보 구하기
대신증권 사이보스플러스 자료실에서 공부한 첫번째 예제는 3000여개의 코스닥과 코스피의 종목코드를 가져오는 예제입니다. 일단 아래의 코드로 간단하게 사이보스플러스의 연결 여부 체크를 해줍니다.
import win32com.client
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
exit()
여전히 여길 넘어가지 못하신다면, 사이보스플러스가 정상적으로 작동되고 있는지 확인해주세요. 대부분의 경우, 여기에서 많이 막히실 겁니다. 에러 메세지는 보통 아래와 같이 "PLUS가 정상적으로 연결되지 않음"이라고 뜰텐데, 이럴 경우 PyCharm이나 VSCode나 개발하고 계신 IDE를 관리자 권한으로 실행시켜주셔야합니다. 관리자 권한으로 실행시키지 않을 경우, 저걸 절대로 넘어가지 못 하실겁니다.
정상적으로 잘 연결된다면, 그 다음 단계로 넘어가도록 하죠. 우리가 하고자 하는 종목코드 리스트 구하는 함수인 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))
대신증권 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))
참고자료
'금융(Finance) > 시스템 트레이딩(System Trading)' 카테고리의 다른 글
[개발] 대신증권API를 이용한 트레이딩 시스템 - 예수금 가져오기 (0) | 2020.09.22 |
---|---|
[고민] 대신증권API과 키움증권 API 사이에서 (0) | 2020.09.21 |
[개발] 대신증권API를 이용한 트레이딩 시스템 - 주식 현재가 조회 (0) | 2020.09.18 |
[개발] 대신증권API를 이용한 트레이딩 시스템 - 개발 환경 설정 (0) | 2020.09.18 |
[개발] 대신증권API를 이용한 트레이딩 시스템 - 시작하기 앞서 (0) | 2020.09.18 |