수수료가 가장 저렴하고 현재 국내 1위 증권사인 키움증권의 Open API 를 활용해 실제 주식 정보등을 Python 코드를 통해 얻어본다.
1. kiwoom.com 접속
우선 키움증권 홈페이지에 접속하여 맨 하단 배너를 보면 Open API 페이지로 가는 링크가 있다.
2. Open API 신청 및 키움 Open API+ 모듈 다운로드
1) Open API 사용신청
첫번째로 Open API "사용 신청하러 가기" 버튼을 클릭하여 키움증권 로그인 후 사용 신청을 한다.
사용신청은 특정 시간대에만 가능하므로 가급적 오후 10:00시 이전에 신청을 해야 한다.
2) 키움 Open API+ 모듈 다운로드 & KOA Studio 다운로드
"키움 Open API+ 모듈 다운로드" 버튼을 클릭하여 우선 설치 프로그램을 다운로드 받아 설치한다.
이후 "KOA Studio 다운로드" 를 통해 Open API 실행할 프로그램 압축파일을 다운로드 한다.
3) 상시 모의투자 신청하러 가기
"상시 모의투자 신청하러 가기" 버튼을 클릭하여 모의투자 계좌도 필요 시 계설할 수 있다. 기본적으로 Open API 를 통해서 자동 매매 거래를 하기 전에 모의투자 계좌로 알고리즘 검증을 할 수 있다.
3. KOA Studio 확인
1) 다운로드 받은 KOA Studio 압축파일을 해제하여 KOAStudioSA.exe 프로그램을 실행한다.
2) 파일 > OpenAPI 접속 을 눌러 모의투자 계좌에 로그인한다.
3) 최초 접속 시 버전처리를 받기 위한 Alert 창이 뜨며 KOAStudio 종료 후 확인 버튼을 클릭한다.
이후 업그레이드 확인 창이 뜨며 "확인" 버튼 클릭 시 종료되며 프로그램을 재시작 한다.
4) 프로그램이 시작되면 다시 Open API 접속 을 통해 인증을 진행한다. 이후 API 를 통해 주식정보를 얻을 수 있다.
왼쪽 네비게이션 탭의 "TR 목록"을 클릭하여 TR 목록 중 "opt10001 : 주식기본정보요청" 을 선택한다.
우측 속성 항목의 종목코드에 005930(삼성전자)를 입력한 후 "조회" 클릭 시 우측 하단의 출력 창에 삼성전자의 종목 정보가 나온다.
자본금, 상장 주식 수, PER, PBR, ROE 등 다양한 정보들이 나오는 것을 볼 수 있다.
4. Python 으로 호출
1) anaconda 에 pip 및 pyqt 설치
(base) C:\Users\Joyce\Stock\test> conda install pip
(base) C:\Users\Joyce\Stock\test> conda create -n stock_test python=3.8
...
(base) C:\Users\Joyce\Stock\test> conda activate stock_test
(stock_test) C:\Users\Joyce\Stock\test> pip install pyqt5
conda 명령어로 pip 설치 후 테스트할 가상환경을 생성하여 pyqt5 패키지를 설치한다.
2) test.py 파일을 생성하여 아래와 같이 코드를 입력한다.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QAxContainer import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
# Kiwoom Login
self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
self.kiwoom.dynamicCall("CommConnect()")
# OpenAPI+ Event
self.kiwoom.OnEventConnect.connect(self.event_connect)
self.kiwoom.OnReceiveTrData.connect(self.receive_trdata)
self.setWindowTitle("PyStock")
self.setGeometry(300, 300, 300, 150)
label = QLabel('종목코드: ', self)
label.move(20, 20)
self.code_edit = QLineEdit(self)
self.code_edit.move(80, 20)
self.code_edit.setText("039490")
btn1 = QPushButton("조회", self)
btn1.move(190, 20)
btn1.clicked.connect(self.btn1_clicked)
self.text_edit = QTextEdit(self)
self.text_edit.setGeometry(10, 60, 280, 80)
self.text_edit.setEnabled(False)
def event_connect(self, err_code):
if err_code == 0:
self.text_edit.append("로그인 성공")
def btn1_clicked(self):
code = self.code_edit.text()
self.text_edit.append("종목코드: " + code)
# SetInputValue
self.kiwoom.dynamicCall("SetInputValue(QString, QString)", "종목코드", code)
# CommRqData
self.kiwoom.dynamicCall("CommRqData(QString, QString, int, QString)", "opt10001_req", "opt10001", 0, "0101")
def receive_trdata(self, screen_no, rqname, trcode, recordname, prev_next, data_len, err_code, msg1, msg2):
if rqname == "opt10001_req":
name = self.kiwoom.dynamicCall("CommGetData(QString, QString, QString, int, QString)", trcode, "", rqname, 0, "종목명")
volume = self.kiwoom.dynamicCall("CommGetData(QString, QString, QString, int, QString)", trcode, "", rqname, 0, "거래량")
self.text_edit.append("종목명: " + name.strip())
self.text_edit.append("거래량: " + volume.strip())
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
참고 링크 : wikidocs.net/4242
(stock_test) C:\Users\Joyce\Stock\test>python ./test.py
[GetPCIdentity] VER 3.2.0.0 build 2015.8.12
위 명령어와 같이 실행 시 Open API 로그인 창이 뜨며, 로그인 후 다음과 같은 응용프로그램이 실행된 것을 확인할 수 있다.
종목 코드 입력 후 "조회" 버튼 클릭 시 종목명, 거래량 등을 확인할 수 있다.
위 코드는 가장 기본적으로 OCX 방식으로 Kiwoom Open API 를 호출하는 예제이다. 이외에 다른 자세한 설명은 위 참고 링크 (Wiki Docs) 를 확인하면 된다.
'주식 공부' 카테고리의 다른 글
[주식거래자동화] 07. 일별거래데이터 DB 저장 (0) | 2020.12.11 |
---|---|
[주식거래자동화] 06. KOSPI 종목코드 및 일별 데이터 조회 (1) | 2020.12.09 |
[주식거래자동화] 04. Django 에 PostgreSQL 연동 (0) | 2020.10.20 |
[주식거래자동화] 03. VSCode 에 Python 개발 환경 설정 (2) | 2020.10.19 |
[주식거래자동화] 02. Django 설치 및 실행 (0) | 2020.10.18 |