반응형
목 차
1. 들어가며
2. 사전 설명
3. 코드 설명
4. 전체 코드
5. 마치며
1. 들어가며
이전 글에서는 삼성전자(005930)의 전체차익위탁 매도/매수/순매수 데이터를
받아오는 방법을 알아보았다.
이번 글에서는 키움증권에서 제공하는
신주인수권 전체시세요청에 대해 알아볼 것이다.
영웅문에서 제공하는 화면번호는 0298이다.
![](https://blog.kakaocdn.net/dn/xP2te/btrUnd44p7P/r9co0mLmbrPE6m3QjTnzL1/img.png)
2. 사전준비
1) 화면목록에서 찾는 경로
KOA Studio에서 "신주인수권" 관련 내용을 찾아보자
< 그림2-1 >에서 확인하였듯이,
(경로) 화면목록 > [0298] 신주인수권시세 < TR이름=OPT10011 : 신주인시권전체시세요청
![](https://blog.kakaocdn.net/dn/c0Ej8F/btrUlRvdIPW/9sucd8KHnA7Be1SDkfFuWk/img.png)
2) TR목록에서 찾는 경로
- INPUT으로 신주인수권구분을 "00"을 입력하면,
- OUTPUT으로 종목코드, 종목명, 현재가 등을 받을 수 있다.
![](https://blog.kakaocdn.net/dn/MyxsW/btrUlZmfEyG/c87sdgyjw7W1DrPlUk8TH1/img.png)
3. 코드 설명
OpenAPI에 접속하여, opt10011을 통해 신주인수권전체 시세를 요청한다.
![](https://blog.kakaocdn.net/dn/cCjssP/btrUmiTK0VA/8adE4Bq22C5JXHO4lmJDlK/img.png)
1줄~23줄 : 필요 모듈의 임포트 및 로그인을 위한 내용으로,
앞에서 설명을 많이 하였으므로 여기서는 설명을 생략한다.
25줄~30줄 : 56줄에서 입력한 명령어를 실행할 때, 실행되는 함수(25줄)이다.
SetInputValue 및 CommRqData 함수를 이용한다.
![](https://blog.kakaocdn.net/dn/bxCLh6/btrUlRWFkEm/xOKnYyr8qwKCW3dqj9k0J1/img.png)
32줄~45줄 : GetCommData 함수를 통해
종목코드, 종목명, 현재가, 최우선매도/매수 호가 등을 수신받는다.
56줄 : 25줄의 함수(rq_data_opt10011)를 실행한다.
4. 전체 코드
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")
self.kiwoom.OnEventConnect.connect(self.login_Connect)
self.kiwoom.OnReceiveTrData.connect(self.trdata_get)
print("로그인 요청!")
self.kiwoom.dynamicCall("CommConnect()")
self.login_event_loop = QEventLoop()
self.login_event_loop.exec_()
def login_Connect(self, nErrCode):
if nErrCode == 0:
print('로그인 성공하였습니다!')
else:
print('로그인 실패하였습니다!')
self.login_event_loop.exit()
def rq_data_opt10011(self, gubun):
print("55줄에서 입력받은 종목코드를 키움서버에 요청합니다.""\n")
self.kiwoom.dynamicCall("SetInputValue(QString, QString)", "신주인수권구분", gubun)
self.kiwoom.dynamicCall("CommRqData(QString, QString, int, QString)", "opt_10011", "opt10011", 0, "1011")
self.tr_event_loop = QEventLoop()
self.tr_event_loop.exec_()
def trdata_get(self, sScrNo, rqname, strcode, sRecordName, sPreNext, nDataLength, sErrorCode, sMessage, sSplmMsg):
if rqname == "opt_10011":
for i in range(0,2):
stock_code = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", "opt10011", "신주인수권전체시세요청", i, "종목코드").strip()
stock_name = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", "opt10011", "신주인수권전체시세요청", i, "종목명").strip()
current_price = abs(int(self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", "opt10011", "신주인수권전체시세요청", i, "현재가").strip()))
first_sell_hoga = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", "opt10011", "신주인수권전체시세요청", i, "최우선매도호가").strip()
first_buy_hoga = self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", "opt10011", "신주인수권전체시세요청", i, "최우선매수호가").strip()
print(f"종목코드는 {stock_code} 입니다.")
print(f"종목명은 {stock_name} 입니다.")
print(f"현재가는 {current_price} 입니다.")
print(f"최우선매도호가는 {first_sell_hoga} 입니다.")
print(f"최우선매수호가는 {first_buy_hoga} 입니다.""\n")
try:
self.tr_event_loop.exit()
except AttributeError:
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
btl = btl_system()
btl.rq_data_opt10011("00")
app.exec_()
(expected result)
# 종목코드는 J0003021C 입니다.
# 종목명은 대유플러스 12WR 입니다.
# 현재가는 227 입니다.
# 최우선매도호가는 +238 입니다.
# 최우선매수호가는 -227 입니다.
# 종목코드는 J00121218 입니다.
# 종목명은 금호전기 31WR 입니다.
# 현재가는 69 입니다.
# 최우선매도호가는 +72 입니다.
# 최우선매수호가는 69 입니다.
5. 마치며
신주인수권 전체시세요청의 TR을 알아보았다.
실제 투자시 활용할 일은 별로 없을 거 같긴 하지만,
OpenAPI를 통해 키움서버에서 데이터를 받아오는
방법을 익히는 차원에서 설명하였다.
반응형
'1. 국내주식 > 1-3. 키움 OpenAPI (기타)' 카테고리의 다른 글
(주식 자동 매매) 키움증권 OpenAPI - 신용매매동향요청(opt10013) (0) | 2022.12.24 |
---|---|
(주식 자동 매매) 키움증권 OpenAPI - 업종프로그램요청(opt10010) (0) | 2022.12.22 |
(주식 자동 매매) 키움증권 OpenAPI - 주식기관요청(opt10009) (0) | 2022.11.27 |
(주식 자동 매매) 키움증권 OpenAPI - 주식외국인요청(opt10008) (0) | 2022.11.26 |
(주식 자동 매매) 키움증권 OpenAPI - 시세표성정보요청(opt10007) (0) | 2022.11.25 |
(주식 자동 매매) 키움증권 OpenAPI - 주식시분요청(opt10006) (0) | 2022.11.20 |
(주식 자동 매매) 키움증권 OpenAPI - 체결정보요청(opt10003) (0) | 2022.11.16 |
(주식 자동 매매) 키움증권 OpenAPI - 거래명세원 받기(opt10002) (0) | 2022.10.17 |