20211202 man kiwoom_api
PyQt를 이용해 키움 Open API+를 사용하는 방법의 기초를 공부한다.
아래의 WikiDocs를 공부했다.
먼저 위 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+를 사용하는 방법의 기초를 공부할 것이다.
Author And Source
이 문제에 관하여(20211202 man kiwoom_api), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@abraxas/20211202-man-kiwoomapi저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)