PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 키움증권 Open API 로그인

  • -

키움증권 Open API 모듈을 이용해서 로그인하는 방법은 개발 가이드 내에서도 자세하게 다루고 있는 내용인데, 사실 이제부터 코드를 구축하기 위해서는 Open API를 사용하기 위한 방법에 대해 알고 있어야 한다.

Open API를 통해 데이터를 획득하는 방법에는 크게 두 가지가 있는데, 아래의 사진을 참고하면 된다.

둘 간의 차이점을 알아보자면, 방법 ①은 KOA Studio 상에서 하단의 두 번째 메뉴인 TR 목록에 해당하는 데이터를 의미하고, 방법 ②는 네 번째 메뉴인 개발가이드 내에서 언급하고 있는 함수를 의미한다는 것이다. 보다 자세히 이야기해보자면, 방법 ①은 CommRqData 함수를 사용하는 과정에 있어서 반드시 "opt" 또는 "opw"라는 영단어가 포함된다는 것이고, 방법 ②는 "opt" 또는 "opw"와는 전혀 무관하게 별도의 함수 이름(예를 들면 CommConnect() 등) 그 자체가 들어간다는 것이다. 

여기서 방법 ①에 사용해야 할 함수를 방법 ②로 요청한다던가 하는 등의 방법은 허용되지 않으며 설령 데이터를 요청했다 하더라도 정상적인 요청 프로세스가 아니기 때문에 해당 요청에 따른 결과 데이터는 당연히 조회할 수 없을 것이다.
※ 코드 상 수정 및 추가된 부분은 초록색 """"""으로 따로 표기

 

 

키움증권 Open API 모듈 객체 생성하기

키움증권 Open API는 QAxWidget("") 내에 데이터를 전달해줌으로써 관련 함수들을 사용할 수 있게 되는데, 안에 입력될 데이터는 다행히도 개인별로 다르지 않고 모두 동일하다. 14번 라인에서   self.kiwoom  이라는 변수 안에 Open API 모듈을 넣어주었으니, 이제 앞으로 사용할 모든 함수들은   self.kiwoom.~~~  과 같은 형태로 작성하면 된다.

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *

"""Open API를 사용하기 위해 필요한 QAxWidget을 import"""
from PyQt5.QAxContainer import *

form_class = uic.loadUiType("main.ui")[0]


class tradesystem(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  ## GUI 켜기
        self.setWindowTitle("주식 프로그램")  ## 프로그램 화면 이름 설정

        """키움증권 Open API 객체 생성"""
        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")  ## OpenAPI 시작
        


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

 

 

로그인 함수 : CommConnect()

함수 이름에서만 봐도 어렵지 않게 확인할 수 있듯이, 로그인 화면을 열도록 하는 CommConnect()는 방법 ②에 해당한다.(이름에 opt, opw가 없다.) 따라서 우리는 앞서 생성했던 객체인   self.kiwoom  을 이용해서 해당 함수를 전달해주면 되는데, 이 글의 도입부에서 봤던 사진에서 알 수 있듯이 하나의 함수처럼 되어 있는 명령어는   dynamicCall("")  을 함께 사용한다. 다시 말해, CommConnect()를 사용하고 싶다면   self.kiwoom.dynamicCall("CommConnect()")  라고 작성하면 된다는 것이다.

이제 이 상태로 코드를 실행해보면 아이디와 비밀번호를 입력하는 창이 뜨고, 로그인 버튼을 누르면 버전 처리를 실행한 이후에 로그인에 성공하게 된다.

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *

form_class = uic.loadUiType("main.ui")[0]


class tradesystem(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  ## GUI 켜기
        self.setWindowTitle("주식 프로그램")  ## 프로그램 화면 이름 설정

        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")  ## OpenAPI 시작
        
        """로그인 요청 함수"""
        self.kiwoom.dynamicCall("CommConnect()")  ## 로그인 요청


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

 

※ 로그인 화면에서 모의투자 접속 부분을 체크한 후 로그인하면 모의투자 로그인, 체크 해제된 상태로 로그인하면 실 거래로 로그인됩니다. 아직 여러 테스트가 이루어지지 않은 상태이니, 반드시 모의투자 접속에 체크하여 모의투자로 접속하시기 바랍니다.

로그인이 진행되는 모습.

 

 


728x90

 

 

잠깐, 자동 매매 시스템이라며?

그렇다. 자동 매매 시스템이기 위해서는 로그인부터 자동적으로 처리되어야 하지 않을까? 그렇다면 코드 실행 시 자동적으로 로그인을 시도하도록 해야 하는데, 이건 코드로 어떻게 구축할 수 있을까? 다행히도 코드로 제작해주지 않아도 된다. 키움증권 Open API 시스템 내에서는 자체적으로 자동 로그인 기능을 구현해두었기 때문이다. 그럼 이제 비밀번호를 입력하는 화면 없이 알아서 로그인되어 프로그램이 동작하게 된다.

시작 메뉴의 오른쪽 하단에서, 큐브같이 생긴 아이콘을 찾아 오른쪽 클릭을 하면 "계좌비밀번호 저장"과 "통신종료"라는 두 개의 메뉴가 나타나는데, 여기서 "계좌비밀번호 저장"에 들어가도록 하자.

계좌비밀번호 저장 화면 접속

 

그 후 비밀번호를 입력하는 칸에 ①비밀번호를 입력한 후, ②우측의 [등록] 또는 [전체계좌에 등록] 버튼을 누르면 비밀번호라고 적혀있는 칸이 "등록"이라는 이름으로 바뀌게 된다. 그 후에 AUTO라고 적혀있는 부분에 체크를 누르게 되면, 이후부터는 프로그램 실행 시 자동적으로 로그인을 진행하게 된다.

비밀번호 입력 및 등록 절차

 

자동 로그인 설정 및 실행 화면

 

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.