728x90
초기에 여러가지 프로그램, 라이브러리를 다운받아야 하지만 기초 개발환경을 만들었다고 가정하고 코드만 올림
개발환경 - Pycharm, 파이썬 활용
메인 API 클래스 - 키움증권 로그인을 구현하는 클래스
from PyQt5.QAxContainer import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
# 아래의 QAxWidget을 생성자로 초기화시킴 = 로그인할 준비를 마친다.
#def __init 이란 함수로 super()을 사용해서 조상의 객체를 초기화시킨다.
class kiwoom(QAxWidget):
def __init__(self):
super().__init__()
# 아래의 API 메서드를 클래스 초기화 시킬 때 실행시켜서 한번만 실행시키자
self._make_kiwoom_instance()
# 아래 접속결과를 실행해야 하기 때문에 객체를 생성할 때 실행해주기 위해 아래에 선언한다
self._set_signal_slots()
# 선언만 하면 의미가 없으므로 생성자에 넣어서 프로그램이 시작되면 자동으로 시작되도록 한다
self._comm_connect()
# 아래의 메서드는 클래스가 실행되면서 API 식별자만 실행시켜주면되므로 사용하지 않는다는 뜻에서 _로 시작한다.
def _make_kiwoom_instance(self):
# OpenAPI를 설치한 컴퓨터라면 동일 파일 이름으로 API를 식별하므로 그대로 적자
self.setControl("KHOPENAPI.KHOpenAPICtrl.1")
def _set_signal_slots(self):
# slot의 역활을 하는 것(요청이 오면 작동)이 OnEventConnect이고
# 요청의 결과값을 받아올 함수가 _login_slot이다
# 요청의 결과값을 받아오면 OnEventConnect가 기다렸다가 응답 작업 시작
self.OnEventConnect.connect(self._login_slot)
# KOA의 개발환경에서 확인한 파라미터값이 error_code가 있으므로 넣어서 함수를 정상 실행시킨다.
def _login_slot(self, error_code):
if error_code == 0:
print("connected")
else:
print("오류(100:사용자 정보 교환실패 | 101: 서버 접속 실패 | 102: 버전처리 실패): " + error_code)
#아래 함수를 끝냄으로써 로그인이벤트가 성공적으로 완료되면 loop를 끝냄
self.login_event_loop.exit()
# 로그인 요청 신호를 보낸 이후 응답대기를 설정하는 메서드
def _comm_connect(self):
# Commconnect는 로그인창을 출력하는 함수 = 따라서 dynamiccall을 사용해서 Commconnect를 호출
self.dynamicCall("CommConnect()")
#호출한 후에 기다리지 않고 그냥 다음코드로 넘어가버리면 에러가 발생하므로 응답을 대기하는 상태가 필요함
#따라서 아래 함수로 이벤트를 대기시킴 = 아래 login_event_loop의 QEventLoop와 exec은 한짝이락 보면 됨
self.login_event_loop = QEventLoop()
self.login_event_loop.exec_()
클래스를 main에 선언하여 실행 시 키움증권 로그인 창을 띄움
import sys
from api.kiwoom import *
# 아래의 QApplication 과 app.exec_()이란 코드는 API를 제어하는 메인루프 = OCX 방식 API를 사용하게 해줌
app = QApplication(sys.argv)
kiwoom = kiwoom()
app.exec_()
728x90
'주식 코인 투자 자동 프로그램 > 주식자동매매' 카테고리의 다른 글
주식 자동매매 프로그램 보완 일기 2022-05-12 (0) | 2022.05.12 |
---|