Open API 연동 오류 해결 방법(AttributeError: 'QAxWidget' object has no attribute 'OnEventConnect')

 『파이썬으로 배우는 알고리즘 트레이딩 (개정판-2쇄)』을 참고해서 자동 매매 프로그램을 만들던 중 아래 코드를 실행시키다가 예상치 못한 오류를 만났습니다. 오류 메시지를 검색해보니, 저와 비슷한 에러를 겪은 사람들은 많았지만, 이렇다할 해결책이 제시되어 있지는 않았습니다.

 

 혹시 동일한 오류로 고생하고 계신 분들은 제가 시도했던 방법을 통해 해결할 수 있기를 바랍니다.

 

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()")
        self.kiwoom.OnEventConnect.connect(self.event_connect)

        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)

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

 

 이 코드를 실행시켰을 때 발생하는 오류 메시지는 아래와 같습니다.

 

Traceback (most recent call last):
  File "D:/01.Programming/PycharmProjects/QUANT/sample.py", line 43, in <module>
    myWindow = MyWindow()
  File "D:/01.Programming/PycharmProjects/QUANT/sample.py", line 13, in __init__
    self.kiwoom.OnEventConnect.connect(self.event_connect)
AttributeError: 'QAxWidget' object has no attribute 'OnEventConnect'

 

 구글링을 해보니 OPEN API와 연동이 잘 안 됐을 때 발생하는 문제라고는 하는데, 정확한 해결 방법은 제시되어 있지 않습니다. 저는 아래 두 가지 방법을 시도해서 문제를 해결할 수 있었습니다.

시도1. OPEN API 자체에 문제가 있는지 확인

 KOA Studio 재시작 - 파일(F) - Open API 접속 - 로그인 

KOA Studio에서 OPEN API에 접속한 모습

 저는 KOA Studio에서 Open API를 접속했을 때 정상적으로 접속이 되는 것을 확인할 수 있었습니다. 만약 여기서 정상적으로 접속되지 않는다면, OPEN API 자체에 문제가 있을 가능성이 크기 때문에 삭제 후 재설치하는 방법을 권해드립니다.

 

 그 외의 원인으로는 키움증권의 OPEN API가 파이썬 32bit와 호환되기 때문에, 파이썬 32bit을 사용하지 않아서 발생하는 오류일 수도 있습니다.

시도2. 아나콘다에서 32bit 가상환경 만들기

 저의 경우에는 아나콘다를 사용해서 프로젝트 환경을 관리하고 있었기 때문에 32bit 가상환경을 만들어 설치하였습니다.

 

아나콘다에서 32bit로 가상환경을 만드는 명령어는 아래와 같습니다.

set CONDA_FORCE_32BIT=1 
conda create -n quant python=3.6.5

 설치 후 conda info 명령어로 확인해보면 32bit용으로 실행된 것을 확인할 수 있습니다.

 

참고) 다시 64bit 용으로 세팅

set CONDA_FORCE_32BIT=

 

 Anaconda Prompt에서 위와 같이 실행하여 32Bit용 가상환경을 생성한 후, 필요한 PyQt5를 설치해주고, 해당 가상환경을 Interpreter로 지정해주고 코드를 실행해보았습니다. 아래와 같이 오류가 나지 않고, Open Api에 로그인하라는 창이 뜨는 것을 볼 수 있습니다. 

 

 

 Anaconda 자체를 32bit 용으로 설치하라는 글들도 있었지만, 다행히 가상환경만 32bit 용으로 생성하는 방법으로도 이 문제를 해결할 수 있어서 시간을 많이 절약했습니다. 또한 Anaconda 자체를 32bit용으로 설치한다면 기존에 사용하던 프로젝트들이 영향을 받을 수 있어서 좋은 해결 방법은 아닌 것 같습니다.

 

 약간의 삽질을 했지만, 가상환경만 따로 32bit용으로 생성할 수 있다는 사실을 배울 수 있는 경험이었습니다 : )

 

 


공감댓글, 공유는 큰 힘이 됩니다!

도움이 되셨다면 널리널리 알려주세요😉

 

 

 

 

댓글()