본문 바로가기
코딩log/알고리즘 트레이딩 시스템 구축

PyQt5로 키움증권 Open API 로그인 연동하기 -1

by 벨크 2022. 12. 20.
반응형

PyQt5 에 조금 익숙해졌다면,  PyQt5로 키움증권 API 를 연동해보도록 하겠습니다.

 

키움증권 Open API 는 OCX 방식의 API를 제공하고 있는데요. API 를 설치하게 되면 각 고유의 CLSID 또는 ProgID가 생성이 되고 이는 레지스트리에 자동등록 됩니다. 레지스트리에 자동 등록된 클래스를 읽어와서 구동되는 방식입니다.

이를 위해서 PyQt5에서 제공하는 QAxContainer 라는 모듈을 사용하게 됩니다.

QAxContainer 모듈은 클래스를 로드시켜 해당 클래스의 기능들을 호출하게 합니다.

먼저 PyQt5를 이용해 GUI프로그램을 실행시킵니다.

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

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

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

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

메인 윈도우에 로그인 버튼 하나와 상태체크 버튼을 추가합니다.

로그인 버튼은 login_clicked 라는 이벤트 함수와 연결 시켜주고, 상태체크 버튼은 statusCheck_clicked 이벤트 함수와 연결 시켜줍니다.

 

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

 

여기서 중요한 라인은 위의 라인인데, 이 라인은 레지스트리에 등록되어있는 키움증권 API 를 연결시켜줍니다.

QAxWidget 은 QAxContainer 모듈의 하위 클래스입니다.

 

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

 

로그인 버튼 이벤트 함수입니다.

QAxWidget 클래스의 dynamicCall 이라는 함수를 사용하여, 키움증권 API 에 있는 method를 호출합니다.

CommConnect 라는 method를 호출합니다.

키움증권 API CommConnect method

 

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

두번째 버튼에 연결된 이벤트 함수입니다.

여기서는 키움증권 API에서 제공하는 GetConnectState() 라는 method를 호출합니다.

키움증권 API GetConnectState method

GUI 구성을 마치고

QApplication 인스턴스를 생성하여 화면에 GUI프로그램을 출력해줍니다.

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

 

실행결과 정상적으로 GUI프로그램이 실행되는 것을 확인 할 수 있습니다.

여기서 로그인을 누르면 키움증권 API 로그인 창이 실행됩니다.

반응형

댓글