시스템 트레이딩/JbTrader 1호

5.3편-키움 API 자동 버전 처리

제이브레인 2025. 3. 14. 18:45

1)  자동 버전 처리 필요성

키움 OpenAPI+  는 자동 로그인이 설정되어 있는 경우 버전 처리가 제대로 수행되지 않을 수 있습니다.

버전처리가 수행되지 않으면 프로그램이 오동작할 수  있기 때문에 업그레이드가 반드시 필요합니다.

번개 HTS 로그인 시에 버전 처리가 이루어지므로 번개 HTS 를 자동으로 실행하는 스크립트 추가가 필요합니다.

 

번개 HTS 실행을 윈도우 작업 스케줄러를 이용하여 실행하고 로그인 비밀번호를 입력하는 것은 

2) pywinauto 패키지 설치

pywinauto 패키지를 사용하여 번개 HTS 실행 코드를 추가하도록 하겠습니다.

pywinauto 패키지는 윈도우 대화상자에 자동으로 키입력을 보낼 수 있습니다.

게임등을 할 때 사용하는 Auto Click 같은 것인데 마우스 클릭 뿐만 아니라 키 입력도 지원하는 프로그램이라고 생각하면 됩니다.

pywinauto  패키지를 설치합니다.

 

만약 아래와 같이 오류가 발생하면 컨맨드로 수동 설치가 필요합니다.

Invalid version: '4.0.0-unsupported' 라고 에러 발생 후 설치 실패하였습니다.

Anaconda Prompt 를 관리자 권한으로 실행합니다.

다음 명령들을 실행합니다.

1. 32비트 가상 환경 활성화

conda activate py38_32

2. pyodbc 패키지 제거 후 다시 설치

pip uninstall pyodbc pip install pyodbc
pip uninstall pyodbc
pip install pyodbc

3. pip 최신 버전으로 업데이트

먼저 pip을 최신 버전으로 업그레이드하세요.

python -m pip install --upgrade pip
 

4. pywinauto 다시 설치

 
pip install pywinauto

Successfully installed 라고 뜨면 정상 설치입니다.

3) 번개3 실행 후 자동 로그인 코드 생성

코드는  ChatGPT 에 다음과 같은 프롬프트로 생성하였습니다.

pywinauto 패키지를 사용하여 번개 HTS 를 실행 후 자동으로 버전 업데이트하는 코드를 알려주세요.
아이디, 비밀번호, 인증서 비밀번호는 kiwoom.conf 라는 파일에서 읽어서 실행하는 코드를 만들어주세요.

kiwoom.conf

아래 파일을 본인의 계정 정보로 변경해야 합니다.

그리고 중요한 정보이므로 외부에 노출되지 않도록 주의해야 합니다.

[LOGIN]
id = your_kiwoom_id
password = your_kiwoom_password
cert_password = your_certificate_password

 

kiwoom_auto_update.py

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

git clone https://github.com/jbpark/JbTraderExample.git
cd JbTraderExample/jbtrader/ch5.3
import configparser
import time
import os
from pywinauto import application
from pywinauto import timings

# 설정 파일 읽기
config = configparser.ConfigParser()
config.read("kiwoom.conf", encoding="utf-8")

# 로그인 정보 가져오기
kiwoom_id = config["LOGIN"]["id"]
kiwoom_pw = config["LOGIN"]["password"]
kiwoom_cert_pw = config["LOGIN"]["cert_password"]

hts_path = "C:/KiwoomFlash3/bin/nkministarter.exe"

# 번개 HTS 실행
if not os.path.exists(hts_path):
    raise FileNotFoundError(f"HTS 실행 파일을 찾을 수 없습니다: {hts_path}")

app = application.Application()
app.start(hts_path)

title = "번개3 Login"
dlg = timings.wait_until_passes(20, 0.5, lambda: app.window(title=title))

pass_ctrl = dlg.Edit2
pass_ctrl.SetFocus()
pass_ctrl.TypeKeys(kiwoom_pw)

cert_ctrl = dlg.Edit3
cert_ctrl.SetFocus()
cert_ctrl.TypeKeys(kiwoom_cert_pw)

btn_ctrl = dlg.Button0
btn_ctrl.Click()

time.sleep(30)
os.system("taskkill /im nkmini.exe")

print("HTS 실행 완료")

 

4) 자동 버전 처리 코드 실행

실행 시 관리자 권한으로 실행해야 합니다.

DLL 초기화  에러가 발생할 수 있습니다.

 

우선 Python 인터프리터, Python 콘솔이  32 비트 인지 확인해야 합니다.

설정 > 프로젝트 > Python 인터프리터에서 확인이 가능합니다.

설정 > 빌드, 실행,배포 > Python 콘솔 에서 확인이 가능합니다.

pywinauto는 pywin32에 의존하므로, 먼저 pywin32를 재설치하고 다시 시도해 보세요.

pip install --upgrade --force-reinstall pywin32

그리고 pywin32_postinstall.py 파일을 수동 실행 합니다.

저는 아래와 같은 경로에 설치되어 있어서 다음과 같이 실행했습니다.

python C:\Anaconda3\envs\py38_32\Scripts\pywin32_postinstall.py -install

 

5) hkopenapi.ocx 파일 삭제 실패

아래와 같이 hkopenapi.ocx 파일 삭제 실패라고 계속 뜨는 경우 

 

C:\OpenAPI\opversionup.exe
프로그램을 권리자 권한으로 실행해야 합니다.