가격 정보(일봉) 얻어 오기
키움증권 API 서버에 전달하는 요청 단위를 TR이라고 하는데,
TR을 호출하려면 CommRqData() 함수를 사용해야 한다.
키움 KOA 개발가이드CommRqData Method 주식일봉조회(OPT10081) - KOA TR목록에서 TR이름을 찾을 수 있음.
OPT10081 TR의 응답으로 일자, 시가, 고가, 저가, 현재가, 거래량의 데이터를 가져올 수 있음.
TR요청에 대한 응답 슬롯 추가
#kiwoom.py
def _set_signal_slots(self):
# TR의 응답 결과를 _on_receive_tr_data를 통해 받도록 설정
self.OnReceiveTRData.connect(self._on_receive_tr_data)
_on_receive_tr_data는 모든 TR에 대한 응답을 받을 수 있는 함수
#TR별로 데이터 가져오기
def _on_receive_tr_data(self, screen_no, rqname, trcode, record_name, next, unused1, unused2, unused3, unused4):
"TR조회의 응답 결과를 얻어오는 함수"
print("[Kiwoom] _on_receive_tr_data is called {} / {} / {}".format(screen_no, rqname, trcode))
tr_data_cnt = self.dynamicCall("GetRepeatCnt(QString, QString)", trcode, rqname)
if next == '2':
self.has_next_tr_data = True
else:
self.has_next_tr_data = False
if rqname == "opt10081_req":
ohlcv = {'date': [], 'open': [], 'high': [], 'low': [], 'close': [], 'volume': []}
for i in range(tr_data_cnt):
date = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "일자")
open = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "시가")
high = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "고가")
low = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "저가")
close = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "현재가")
volume = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "거래량")
ohlcv['date'].append(date.strip())
ohlcv['open'].append(int(open))
ohlcv['high'].append(int(high))
ohlcv['low'].append(int(low))
ohlcv['close'].append(int(close))
ohlcv['volume'].append(int(volume))
키움API는 1초에 최대 5회의 요청만 허용하기 때문에 time추가
self.tr_event_loop.exit() #TR요청을 보내고 응답을 대기시키는 데 사용하는 self.tr_event_loop를 종료시킴
time.sleep(0.5) #0.5초 대기
앞 코드에서 일봉 데이터는 ohlcv 딕셔너리에 저장되어있다..!
이 데이터를 DataFrame으로 만들면 더 쉽게 활용할 수 있기 때문에 pandas 패키지를 사용
Anaconda 가상환경에 pandas 설치
pip install pandas
get_price_data는 가격 정보를 얻어오는 함수
def get_price_data(self, code):
self.dynamicCall("SetInputValue(QString, QString)", "종목코드", code)
self.dynamicCall("SetInputValue(QString, QString)", "수정주가구분", "1")
self.dynamicCall("CommRqData(QString, QString, int, QString)", "opt10081_req", "opt10081", 0, "0001")
self.tr_event_loop.exec_()
ohlcv = self.tr_data
while self.has_next_tr_data:
self.dynamicCall("SetInputValue(QString, QString)", "종목코드", code)
self.dynamicCall("SetInputValue(QString, QString)", "수정주가구분", "1")
self.dynamicCall("CommRqData(QString, QString, int, QString)", "opt10081_req", "opt10081", 2, "0001")
self.tr_event_loop.exec_()
for key, val in self.tr_data.items():
ohlcv[key] += val
df = pd.DataFrame(ohlcv, columns=['open', 'high', 'low', 'close', 'volume'], index=ohlcv['date'])
return df[::-1]
중간 점검으로 main.py에서 삼성전자(005930)의 일봉 정보를 출력해보기!
#main.py
from api.Kiwoom import *
import sys
app = QApplication(sys.argv)
kiwoom = Kiwoom()
df = kiwoom.get_price_data("005930")
print(df)
app.exec_()
실행을 하면...
행(row)에는 시간기준 과거부터 최근까지 오름차순
열(column)에는 시가(open), 고가(high), 저가(low), 종가(close), 당일 거래량(volume) 순서로 데이터를 받아오는 것을 알 수 있다.
1985년도에 삼성전자주가를 샀더라면...
예수금 얻어 오기
예수금이란 증권사가 예비로 수령한 자금으로, 계좌에 보유 중인 현금을 의미한다.
예수금 정보를 알아야 종목당 얼마를 매수할지 결정할 수 있다.
def get_deposit(self)는 조회 대상 계좌의 예수금을 얻어 오는 함수
def get_deposit(self): ------ 조회 대상 계좌의 예수금을 얻어 오는 함수
self.dynamicCall("SetInputValue(QString, QString)", "계좌번호", self.account_number)
self.dynamicCall("SetInputValue(QString, QString)", "비밀번호입력매체구분", "00")
self.dynamicCall("SetInputValue(QString, QString)", "조회구분", "2")
self.dynamicCall("CommRqData(QString, QString, int, QString)", "opw00001_req", "opw00001", 0, "0002")
self.tr_event_loop.exec_()
return self.tr_data
main.py를 실행하면
#main.py
from api.Kiwoom import *
import sys
app = QApplication(sys.argv)
kiwoom = Kiwoom()
deposit = kiwoom.get_deposit()
app.exec_()
10,000,000 찍히는 것을 볼 수 있다.
'파이썬자동주식매매프로그램' 카테고리의 다른 글
ATS) 키움증권 로그인하기(2) - 자동로그인,계좌정보얻어오기, 종목 정보 얻어오기 (1) | 2023.01.06 |
---|---|
ATS) 키움증권 로그인하기(1) (1) | 2023.01.06 |
ATS)PyQt5 설치, API 동작 방식 이해하기 (0) | 2023.01.05 |
ATS)모의투자 가입,KOA StudioSA 살펴보기 (0) | 2023.01.04 |
ATS)개발 환경 구축 (0) | 2023.01.04 |