종목 코드만을 표시했더니 종목 코드가 정상적으로 입력했는지 구분이 어려웠습니다.
예를 들면 삼성전자 종목 코드를 입력해도 내가 정말 삼성전자 종목코드를 입력했는지는 명확하지 않았습니다.
그래서 종목 코드를 입력하면 종목 명칭을 업데이트 하는 기능을 추가하였습니다.
1) 코드 생성
ChatGPT 에 사용된 프롬프트는 다음과 같습니다.
python pyqt5 designer 로 guruma_one.ui 를 만들었습니다.
guruma_one.ui 에는 다음과 같은 콤포넌트들이 존재합니다.
name : accountComboBox, type : QComboBox
name : logTextEdit, type : QTextEdit
name : stockName , type : QLineEdit
name : stockCode , type : QLineEdit
다음과 같은 기능을 제공합니다.
1. 키움증권 API 를 연결하고 연결 후 API를 초기화하고 실 서버 연결 시 "실 서버 연결 성공" 이라고 메시지를 logTextEdit 에 출력하고
모의 투자 서버 연결 시 "모의 투자 서버 연결 성공"이라고 메시지를 logTextEdit 에 출력
2. Kiwoom 계좌 정보를 accountComboBox 에 출력
3. stockCode 에 종목 코드를 입력하면 stockName 에 종목 이름을 입력
파이썬 코드로 작성해주세요. 주석도 자세히 달아주세요. 코드는 오류 테스트 후에 오류가 있으면 수정해주세요.
생성된 코드는 다음과 같으며 생성된 코드 중 일부 버그는 수정하였습니다.
아래 코드는 다음 위치에서 다운 받는 것이 가능합니다.
git clone https://github.com/jbpark/JbTraderExample.git
cd JbTraderExample/jbtrader/ch5.11
stock_name.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.uic import loadUi
from PyQt5.QtCore import QEventLoop
from pykiwoom.kiwoom import Kiwoom
class KiwoomApp(QMainWindow):
def __init__(self):
super().__init__()
loadUi("guruma_one.ui", self) # UI 파일 로드
self.kiwoom = Kiwoom()
self.kiwoom.CommConnect() # 키움 API 연결
# 이벤트 처리 연결
self.kiwoom.OnEventConnect = self.on_event_connect # 연결 이벤트 핸들러
self.stockCode.editingFinished.connect(self.update_stock_name)
def on_event_connect(self, err_code):
"""
키움 API 연결 이벤트 처리
실서버와 모의서버에 따른 로그 메시지를 출력함
"""
if err_code == 0:
server_type = self.kiwoom.GetLoginInfo("GetServerGubun")
if server_type == "1":
self.logTextEdit.append("모의 투자 서버 연결 성공")
else:
self.logTextEdit.append("실 서버 연결 성공")
# 계좌 정보 가져오기
self.update_account_info()
else:
QMessageBox.critical(self, "오류", "키움 API 연결 실패")
def update_account_info(self):
"""
계좌 정보를 가져와서 accountComboBox에 출력
"""
accounts = self.kiwoom.GetLoginInfo("ACCNO").split(';')
self.accountComboBox.clear()
self.accountComboBox.addItems([acc.strip() for acc in accounts if acc.strip()])
def update_stock_name(self):
"""
stockCode에 입력된 종목 코드에 따라 stockName을 자동으로 설정
"""
code = self.stockCode.text().strip()
if code:
stock_name = self.kiwoom.GetMasterCodeName(code)
self.stockName.setText(stock_name)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = KiwoomApp()
window.show()
sys.exit(app.exec_())
위 코드의 핵심은 다음과 같이 종목 코드로 종목명을 구하는 부분입니다.
stock_name = self.kiwoom.GetMasterCodeName(code)
Qt Designer 로 종목명도 추가해줍니다.
2) 코드 실행
위 코드를 실행 후에 종목 코드에 주식 종목 코드를 입력하면 아래와 같이 종목명이 출력됩니다.
종목명이 표시되므로 내가 어떤 종목 코드를 입력했는지 좀더 확실해져서 좋네요.
3) JbTrader 코드 통합
JbTrader 에 종목명 부분 통합 시에 변경된 부분입니다.
Class init 함수에 stockCode 가 edit 가 종료되면 stockName 을 업데이트하도록 이벤트 추가되어 있습니다.
stockName 은 readOnly 로 설정하고 background color 를 회색으로 변경하였습니다.
class StockTrader(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
...
self.stockName.setReadOnly(True)
self.stockName.setStyleSheet("background: lightgray; color: black;")
self.stockCode.editingFinished.connect(self.update_stock_name)
def update_stock_name(self):
"""
stockCode에 입력된 종목 코드에 따라 stockName을 자동으로 설정
"""
code = self.stockCode.text().strip()
if code:
stock_name = self.kiwoom.GetMasterCodeName(code)
self.stockName.setText(stock_name)
'시스템 트레이딩 > JbTrader 1호' 카테고리의 다른 글
5.12편-Qt Designer xxx.ui 를 .py 코드로 변경 (0) | 2025.03.26 |
---|---|
5.10편-매수/매 가격에 현재 가격 및 상하 호가 선택 기능 추가 (4) | 2025.03.19 |
5.9편-증권 계좌 잔고 표시 (4) | 2025.03.18 |
5.8편-폰트 변경 (2) | 2025.03.18 |
5.7편-서버 연결, 매수, 매도 통합 (1) | 2025.03.17 |