1. 들어가며
키움증권에서 제공하는 OpenAPI를 통해 키움서버에 접근하기 위해서는,
파이썬을 통해 OpenAPI에 접속하여 로그인할 수 있어야 한다.
당초 로그인 후 예수금 받기까지 진행하려고 했으나,
그렇게 되면, 로그인을 위한 코드를 제대로 알 수 없기에
순수하게 로그인 코드를 설명한다.
※ 이 글 이후부터는 로그인 관련 내용은 별도 설명을 하지 아니할 예정이다.
2. 코드 설명
![](https://blog.kakaocdn.net/dn/bjUrOn/btrMrw0DkvB/4IubldBEWZoGxuZPyAHKt1/img.png)
- 1줄 : sys는 파이썬의 변수 혹은 함수를 다룬다.
- 2줄 : PyQt5.QAxContainer은 QtWidget를 호출하기 위해 임포트함
- 3줄 : PyQt5.QtWidgets는 동시성 처리을 위해 임포트함
- 4줄 : PyQt5.QtCore는 14줄~15줄의 로그인 이벤트 루프 및 실행할 때 필요하다.
- 6줄 : class btl_system이라는 클래스를 선언
- 7줄 : def __init__는 클래스 내에서 제일 처음 실행된다.
- 8줄 : QAxWidget를 활용해 레지스트리에 등록된 "KHOPENAPI.KHOpenAPICTrl.1"를 통해
OpenAPI를 실행한다.
- 11줄 : 로그인과 관련된 17번줄의 함수와 이벤트함수를 연결해 준다
- 13줄 : PyQt5에서 제공하는 dynamicCall()함수를 통해 로그인을 요청하는 함수인 CommConnect()를 실행
* dynamicCall()는 사용자가 키움 서버에 데이터를 요청할 때 사용
- 14줄~15줄 : 로그인 하는 동안(13줄) 다음 코드 실행 방지
- 17줄 : 로그인을 위해 정의한 OnEventConnect 함수 (11줄과 연결)
- 22줄 : 로그인이 성공(18줄) 되었든 실패(20줄)되었든,
14~15줄에서 실행한 이벤트 루프 종료
- 25줄 : QApplication은 프로그램이 작동하게 만드는데, 이는 프로그램의 이벤트 루프를 시작하고 유지함
* QApplication(sys.argv)을 app에 인스턴스화 시켰음(넣어주었음)
- 26줄 : btl_system() 클래스 호출하였고, btl 변수에 인스턴스함
- 27줄 : app이 종료되지 아니하고 이벤트 루프 실행
→ app.exec_()이 없으면, OpenAPI가 로그인되고 1번만 데이터를 받고 종료됨
import sys
from PyQt5.QAxContainer import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class btl_system():
def __init__(self):
self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
print("연결되었습니다.")
self.kiwoom.OnEventConnect.connect(self.OnEventConnect)
self.kiwoom.dynamicCall("CommConnect()")
self.login_event_loop = QEventLoop()
self.login_event_loop.exec_()
def OnEventConnect(self, err_code):
if err_code == 0:
print("로그인에 성공하였습니다.")
else:
print("로그인에 실패하였습니다.")
self.login_event_loop.exit()
if __name__ == "__main__":
app = QApplication(sys.argv)
btl = btl_system()
app.exec_()
3. 마치며
로그인 함수 코드를 설명하였다.
각각의 줄이 뜻하는 의미를 알고 있으면,
향후 코드를 짤 때 수월함을 느낄 수 있을 것이다.
'1. 국내주식 > 1-2. 키움 OpenAPI (사용)' 카테고리의 다른 글
(주식 자동 매매) 키움증권 OpenAPI - 1분봉 데이터 실시간 받기(opt10080) (2) | 2022.10.05 |
---|---|
(주식 자동 매매) 키움증권 OpenAPI - SendOrder함수를 이용하여 매수/매도하기 (0) | 2022.10.01 |
(주식 자동 매매) 키움증권 OpenAPI 매수한 4종목의 매수가격, 매수량 받아오기(opt10085) (0) | 2022.09.28 |
(주식 자동 매매) 키움증권 OpenAPI 종목의 현재가를 전역변수에 담기(opt10001) (0) | 2022.09.27 |
(주식 자동 매매) 키움증권 OpenAPI 4종목 현재가 조회(opt10001) (0) | 2022.09.26 |
(주식 자동 매매) 키움증권 OpenAPI 현재가 조회(opt10001) (0) | 2022.09.25 |
(주식 자동 매매) 키움증권 OpenAPI 예수금/주문가능금액 조회 (opw00001) (0) | 2022.09.22 |
(주식 자동 매매) 키움증권 OpenAPI/KOAStudio 설명 (1) | 2022.09.18 |