본문 바로가기

키움증권 OpenAPI with Python

키움증권 OpenAPI - 주식기본정보 가져오기

키움증권 서버에 주식기본정보를 TR을 사용해서 요청함으로써

알고 싶은 종목의 액면가, 자본금, 상장주식, PER, EPS, ROE 등등 기본 정보들을 가져올 수 있습니다.

TR(TRansaction) 목록과 input데이터, output데이터 등은 KOA Studio에서 확인 할 수 있습니다.

 

오늘 포스팅에서 완성하고자 하는 최종 결과물은 다음과 같습니다.

 

먼저 최종 코드를 보시고 하나하나 설명드리겠습니다.

import sys
import time
import pandas as pd

from PyQt5.QtWidgets import *
from PyQt5.QAxContainer import *
from PyQt5.QtGui import *


class Kiwoom(QMainWindow):
def __init__(self):
super().__init__()

# 로그인
self.kiwoom = QAxWidget()
self.kiwoom.setControl("KHOPENAPI.KHOpenAPICtrl.1")
self.kiwoom.dynamicCall("CommConnect()")

# OpenAPI+ Event
self.kiwoom.OnEventConnect.connect(self.event_connect)
self.kiwoom.OnReceiveTrData.connect(self.receive_tr_data)

# GUI 세팅
self.setWindowTitle("opt10001")
self.setGeometry(300, 300, 300, 150)

label = QLabel('종목코드', self)
label.move(20, 20)

self.code_edit = QLineEdit(self)
self.code_edit.move(80, 20)
self.code_edit.setText('종목코드를 입력하세요')

btn1 = QPushButton('조회', self)
btn1.move(190, 20)
btn1.clicked.connect(self.btn1_clicked)

self.text_edit = QTextEdit(self)
self.text_edit.setGeometry(10, 60, 280, 80)
self.text_edit.setEnabled(False)

def event_connect(self, err_code):
if err_code == 0:
self.text_edit.append("로그인 성공")

def btn1_clicked(self):
code = self.code_edit.text()
self.text_edit.append("종목코드:" + code)

# SetInputValue
self.kiwoom.dynamicCall("SetInputValue(QString, QString)", "종목코드", code)
# CommRqData
self.kiwoom.dynamicCall("CommRqData(QString, QString, int, QString)",
"opt10001_req", "opt10001", 0, "0101")

def receive_tr_data(self, screen_no, rqname, trcode, recordname, prev_next, data_len, err_code, msg1, msg2):
print("리시브로 들어옴")
if rqname == "opt10001_req":
name = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString",
trcode, recordname, 0, "종목명")
volume = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString",
trcode, recordname, 0, "거래량")
numStocks = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString",
trcode, recordname, 0, "상장주식")
prices = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString",
trcode, recordname, 0, "시가")

self.text_edit.append("종목명:" + name.strip())
self.text_edit.append("거래량:" + volume.strip())
self.text_edit.append("상장주식:" + numStocks.strip())
self.text_edit.append("시가:" + prices.strip())


if __name__=="__main__":


app = QApplication(sys.argv)
myWindow = Kiwoom()
myWindow.show()
app.exec_()

 

로그인과 GUI 세팅은 저번 포스팅에서 설명드렸었습니다.

 

오늘 새로 나오는 개념은 이벤트와 관련된 내용과 키움증권 OpenAPI+ 메서드 입니다.

먼저 이벤트는 클라이언트가 필요한 정보를 먼저 세팅하고 그 세팅값을 서버에 요청합니다.

요청 후 서버가 반응이 올 때까지 기다렸다가 서버의 반응(이벤트발생)을 수신하여 정보를 캐치합니다.

 

먼저 보실 이벤트는 로그인 관련 이벤트 입니다.

로그인을 실행했을 때 정상적으로 로그인이 되었다면 서버에서 에러코드를 0으로 쏴줍니다.

그때(서버가 에러코드를 쏴줄 때) OnEventConnect.connect 안의 함수가 자동으로 실행됩니다.


self.kiwoom.OnEventConnect.connect(self.event_connect)
def event_connect(self, err_code):
    if err_code == 0:
        self.text_edit.append("로그인 성공")

그러면 event_connect함수가 실행되고 "로그인 성공" 이라는 텍스트가 출력됩니다.

 

또 서버가 반응할 때가 언제일까요?

바로 클라이언트가 정보를 요청했을 때 그 정보를 클라이언트에게 쏴주는 반응(이벤트)이 발생합니다.

기본적으로 tr코드를 이용한 요청을 할 때에 서버가 반응하면 

self.kiwoom.OnReceiveTrData.connect(self.receive_tr_data)

다음과 같이 OnReceiveTrData 가 실행되고 여기에 연결되어 있는 함수 receive_tr_data 가 실행됩니다.

 

자 이렇게 이벤트에 반응하는 방법에 대해서 알아봤습니다.

 

이제 키움증권 OpenAPI+ 메서드에 대해서 알아보겠습니다.

이 메서드들은 KOA Studio의 개발가이드 탭에서 자세히 설명되어있습니다.

즉, tr코드를 이용해서 주식기본정보(opt10001)을 서버에 요청하고 싶다면 먼저

SetInputValue 메서드를 이용해서 tr코드의 input 에 맞는 데이터를 설정해 줍니다.

 

이렇게 설정된 값을 가지고 서버에 데이터 요청을 해야겠죠?

그때 사용하는 메서드가 바로

CommRqData 메서드 입니다.

 

요청 후 서버의 반응을 기다렸다가 반응이 왔을 때 서버에서 보내 준 데이터에서 원하는 데이터를

받아오는 메서드가 바로

GetCommData 메서드 입니다.

 

이렇게 3가지 키움증권 OpenAPI+ 메서드를 알아보았습니다.

 

파이썬 코드 파일도 첨부해 드리니 보시고 안되시거나 이해가 안되시는 부분은 댓글로 문의하셔도 됩니다!

 

다음 포스팅에서는 본인의 계좌정보를 가져오는 것과 나머지 잔잔한 키움증권 OpenAPI+메서드를 알아보겠습니다.

 

opt10001.py
0.00MB

'키움증권 OpenAPI with Python' 카테고리의 다른 글

키움증권 Open API 로그인하기  (0) 2019.07.02
키움증권 openAPI 시작하기  (0) 2019.07.02