20211202 man kiwoom_api

abraxas·2021년 12월 2일
0

tamagotchi

목록 보기
5/21

PyQt를 이용해 키움 Open API+를 사용하는 방법의 기초를 공부한다.

아래의 WikiDocs를 공부했다.

https://wikidocs.net/4239

먼저 위 WikiDocs의 예제 12.4의 코드이다.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QAxContainer import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyStock")
        self.setGeometry(300, 300, 300, 150)

        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")

        btn1 = QPushButton("Login", self)
        btn1.move(20, 20)
        btn1.clicked.connect(self.btn1_clicked)

        btn2 = QPushButton("Check state", self)
        btn2.move(20, 70)
        btn2.clicked.connect(self.btn2_clicked)

    def btn1_clicked(self):
        ret = self.kiwoom.dynamicCall("CommConnect()")

    def btn2_clicked(self):
        if self.kiwoom.dynamicCall("GetConnectState()") == 0:
            self.statusBar().showMessage("Not connected")
        else:
            self.statusBar().showMessage("Connected")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

이 코드에서 가장 중요한 부분은 바로 아래 코드이다.

self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")

여기에서 QAxWidget class를 사용해서 키움증권 class를 사용할 수 있게 하는 것이다. 키움증권에서 제공하는 class에는 고유의 CLSID와 ProgId가 있어서 해당 값을 QaxWidget class에 전달해주면 키움증권 class instance를 만들 수 있다.

키움증권 class의 CLSID는 {A1574A0D-6BFA-4BD7-9020-DED88711818D}이고 ProgId는 "KHOPENAPI.KHOpenAPICtrl.1"이다.

QAxWidget class는 QWidget과 QAxBase class들을 상속받는다. 따라서 self.kiwoom instance를 통해 QWidget과 QAxBase의 method를 사용할 수 있다.

아래 코드들은 키움증권 class에서 제공되는 method를 사용한 것이다.

ret = self.kiwoom.dynamicCall("CommConnect()")
...
if self.kiwoom.dynamicCall("GetConnectState()") == 0:

키움증권 Open API+는 OCX 방식으로 개발되어 Python에서 method를 호출하는 방식이 COM 방식과는 다르다. QAxBase class의 dynamicCall() method를 활용해서 OCX 방식의 method를 호출할 수 있다. CommConnect() method는 로그인 윈도우를 실행하는 키움증권 class method이다. 로그인 성공이나 실패 시 OnEventConnect 이벤트가 발생한다. 이 method에 입력값은 없고, 성공하면 0을 반환하고 실패하면 음수값을 반환한다. GetConnectState() method는 현재 접속 상태를 반환하는 method이다. 입력값은 없고, 미연결 상태인 경우 0을 반환하고 연결 완료 상태인 경우 1을 반환한다.

위 예제 코드를 실행했을 때 흥미로운 점은 PyQt 프로그램 윈도우를 종료했을 때 키움증권 Open API+ 연결도 함께 종료된다는 점이다.

오늘은 여기까지.

다음에도 계속해서 PyQt를 이용해 키움 Open API+를 사용하는 방법의 기초를 공부할 것이다.

0개의 댓글