본문 바로가기

주식 공부

[주식거래자동화] 05. Kiwoom API 설치 및 테스트

반응형

수수료가 가장 저렴하고 현재 국내 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

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

(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) 를 확인하면 된다.

반응형