ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [키움API]python API 로그인
    금융퀀트/(퀀트)증권사API활용(키움) 2023. 11. 14. 22:30
    반응형

    ActiveX컨트롤 사용하기 

    키움 API를 사용하려면 "khopenapi.ocx"이라는 이름의 ActiveX컨트롤을 불러와야 한다. "khopenapi.ocx"를 파이썬에서 바로 불러올 수는 없기 때문에 OpenAPI 개발 가이드를 참조하여( [키움API]키움 API 작동 구조  참조) API 식별자가 무엇인지 먼저 파악해야 한다. 

    그림1: ActiveX Control 식별자

    위 그림 1에서 확인할 수 있는 것처럼 api 컨트롤 모듈의 이름은 " KHOpenApi.OCX"이지만 컴퓨터가 API Control을 식별하는 식별자는 " A1574A0D-6BFA-4BD7-9020-DED88711818D" 이런 문자열인 것을 알 수 있다. 윈도우 -> 검색 "regedit"에 들어가면 레지스트리 편집기를 열 수 있는데 편집기에서 아래 그림 2처럼 편집 -> 찾기 창에 위의 문자열을 입력하면 "KHOPENAPI.KHOpenAPICtrl.1"이라는 경로가 나온다. 우리는 python에서 이 경로를 통해서 ActiveX컨트롤을 불러낼 것이다.

    그림2: 레지스트리 경로 확인

    PyQt5 QAxWidget 사용

    키움 API 사용을 위한 ActiveX 컨트롤은 PyQt5 라이브러리의 QAxWidget을 통해서 사용할 수 있다. 하지만 QAxWidget을 그냥 갖다 쓸 수 있는 것은 아니다. 이 위젯은 GUI 기반이기 때문에 QAxWidget을 사용하기 전에 QApplication을 먼저 띄워서 GUI 이벤트 루프를 먼저 실행해 줘야 한다. 즉, 아래 그림 3과 같이 QApplication 이라는 GUI 안에서 API를 불러오는 QAxWidget이 실행되는 것이다.

    그림3: QApplication 과 QAxwidget 구조

    API 로그인하기

    지금까지 설명한 기본 구조를 코드로 나타내면 아래와 같다. 

    import sys
    # QApplication 사용할 수 있는 라이브러리 참조
    from PyQt5.QtWidgets import *
    # QAxWidget 사용할 수 있는 라이브러리 참조
    from PyQt5.QAxContainer import *
    # QApplication 객체를 생성하고 app 변수에 저장(이 때 현재 코드가 실행중인 스크립트의 경로를 변수로 입력)
    app = QApplication(sys.argv)
    # QAxWidget 을 사용해서 키움API 컨트롤러를 불러온 뒤 ocx 변수에 저장
    # 레지스트리를 통해 확인한 "KHOPENAPI.KHOpenAPICtrl.1" 경로 입력
    ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
    
    # QAxWidget 을 GUI 창에 표시
    ocx.show()
    # QApplication 을 계속 띄워 놓는 이벤트 루프(QAxWidget 에서 동작이 일어날 때까지 기다림)
    app.exec_()

     

    위 코드에서 키움 API 컨트롤러는 QAxWidget이라는 위젯에 감싸져서 ocx라는 변수에 저장되었다. 이제 ocx라는 객체에서 dynamicCall이라는 메서드를 사용하여 OpenAPI 개발 가이드에 나와있는 함수들을 불러내서 쓰면 된다. 그림으로 나타내면 아래와 같다.

    그림4: ocx 객체를 통해서 API 함수 갖다쓰는 구조

    이제 가장 기본적인 함수인 CommConnect() 함수를 사용해서 키움API에 로그인을 해보자. 위 그림 4처럼 ocx 객체에서 dynamicCall을 이용해서 CommConnect() 함수만 갖다 쓰면 된다. 이를 코드로 정리하면 아래와 같다.

     

    # QApplication 객체를 생성하고 app 변수에 저장
    app = QApplication(sys.argv)
    # QAxWidget 을 사용해서 키움API 컨트롤러를 불러온 뒤 ocx 변수에 저장
    ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
    # ocx 객체에서 dynamicCall이라는 메서드를 이용해서 CommConnect 라는 API함수 호출
    ocx.dynamicCall("CommConnect()")
    # QAxWidget 을 GUI 창에 표시
    ocx.show()
    # QApplication 을 계속 띄워 놓는 이벤트 루프(QAxWidget 에서 동작이 일어날 때까지 기다림)
    app.exec_()

     

    반응형
Designed by Tistory.