1) 키움 계좌 연결 코드 생성

ChatGPT 에 다음과 같이 질의하였습니다.

python 으로 키움증권 API 를 연결하고 연결 후 API를 초기화하고 실 서버 연결 시 "실 서버 연결 성공" 이라고 출력하고 모의 투자 서버 연결 시 "모의 투자 서버 연결 성공"이라고 출력하는 코드를 만들어주세요.

생성된 코드는 다음과 같습니다.

kiwoom_api.py 라고 저장합니다.

아래 코드는 다음 위치에서 다운 받는 것이 가능합니다.

git clone https://github.com/jbpark/JbTraderExample.git
cd JbTraderExample/jbtrader/ch5.4
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtCore import QEventLoop

class KiwoomAPI(QAxWidget):
    def __init__(self):
        super().__init__()

        # 키움 OpenAPI Control 설정
        self.setControl("KHOPENAPI.KHOpenAPICtrl.1")

        # 로그인 이벤트 루프
        self.loginLoop = QEventLoop()

        # 로그인 이벤트 핸들러 등록
        self.OnEventConnect.connect(self.event_connect)

    def login(self):
        """ 키움증권 API 로그인 """
        self.dynamicCall("CommConnect()")  # 로그인 실행
        self.loginLoop.exec_()  # 로그인 완료될 때까지 대기

    def event_connect(self, return_code):
        """ 로그인 이벤트 핸들러 """
        if return_code == 0:  # 로그인 성공
            server_type = self.dynamicCall("GetLoginInfo(QString)", "GetServerGubun")
            if server_type == "1":
                print("모의 투자 서버 연결 성공")
            else:
                print("실 서버 연결 성공")
        else:
            print("로그인 실패, 코드:", return_code)

        # 로그인 루프 종료
        self.loginLoop.exit()

if __name__ == "__main__":
    app = QApplication(sys.argv)  # PyQt5 애플리케이션 실행
    kiwoom = KiwoomAPI()
    kiwoom.login()
    sys.exit(app.exec_())  # 이벤트 루프 실행

2) 키움 계좌 연결 정보 출력 코드 실행

kiwoom_api.py 를 실행합니다.
예를 선택합니다.

 

계좌 정보를 입력 후 [로그인]을 클릭합니다.


정상적으로 로그인 되면 아래와 같이 출력됩니다.

 

3) 로그 메시지 출력 Text Edit 추가

계좌 ComboBox 는 objectName 을 accountComboBox 라고 변경하고

로그 출력을 위한 Text Edit 는 objectName 을 logTextEdit 로 변경합니다.

 

ChatGPT 로 다음과 같이 질문하였습니다.

python pyqt5 designer 로 guruma_one.ui 를 만들었습니다.
guruma_one.ui 에는 accountComboBox 라는 이름을 가진 ComboBox 가 존재합니다.
또한 logTextEdit 라는 이름을 가진 QTextEdit 가 존재합니다.
키움증권 API 를 연결하고 연결 후 API를 초기화하고 실 서버 연결 시 "실 서버 연결 성공" 이라고 메시지를 logTextEdit 에 출력하고 
모의 투자 서버 연결 시 "모의 투자 서버 연결 성공"이라고 메시지를 logTextEdit 에 출력하고
또한 Kiwoom 계좌 정보를 accountComboBox 에 출력하는 코드를 만들어주세요.

 

이를 guruma_one.py 라는 파일로 저장합니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
from PyQt5.QtCore import QEventLoop
from PyQt5.QAxContainer import QAxWidget

class Kiwoom(QMainWindow):
    def __init__(self):
        super().__init__()
        loadUi("guruma_one.ui", self)
        
        # 키움 API 연결
        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
        self.kiwoom.OnEventConnect.connect(self.on_event_connect)
        
        self.login()
        
    def login(self):
        self.kiwoom.dynamicCall("CommConnect()")
        self.event_loop = QEventLoop()
        self.event_loop.exec_()
        
    def on_event_connect(self, err_code):
        if err_code == 0:
            server_type = self.kiwoom.dynamicCall("GetLoginInfo(QString)", ["GetServerGubun"])
            if server_type == "1":
                self.logTextEdit.append("모의 투자 서버 연결 성공")
            else:
                self.logTextEdit.append("실 서버 연결 성공")
            
            self.get_account_info()
        else:
            self.logTextEdit.append("API 연결 실패")
        self.event_loop.exit()
        
    def get_account_info(self):
        accounts = self.kiwoom.dynamicCall("GetLoginInfo(QString)", ["ACCNO"])
        account_list = accounts.strip().split(';')
        self.accountComboBox.addItems(account_list)
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Kiwoom()
    window.show()
    sys.exit(app.exec_())

4) Qt UI 연동 코드 실행

guruma_one.py 를 실행합니다.
키움 로그인 후에 UI 에 로그인 정보가 잘 표시됩니다.

Posted by 제이브레인
,