Kiwoom.py
(...)
def _on_receive_real_data(self, s_code, real_type, real_data): ------ 실시간 데이터 수신
if real_type == "장시작시간":
pass
elif real_type == "주식체결":
signed_at = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid("체결시간"))
close = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid("현재가"))
close = abs(int(close))
high = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('고가'))
high = abs(int(high))
open = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('시가'))
open = abs(int(open))
low = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('저가'))
low = abs(int(low))
top_priority_ask = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('(최우선)매도호가'))
top_priority_ask = abs(int(top_priority_ask))
top_priority_bid = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('(최우선)매수호가'))
top_priority_bid = abs(int(top_priority_bid))
accum_volume = self.dynamicCall("GetCommRealData(QString, int)", s_code, get_fid('누적거래량'))
accum_volume = abs(int(accum_volume))
print(s_code, signed_at, close, high, open, low, top_priority_ask, top_priority_bid, accum_volume) ------ 5장에서는 삭제할 코드(출력부에 너무 많은 데이터가 나오기 때문에 여기서만 사용)
if s_code not in self.universe_realtime_transaction_info: ------ universe_realtime_transaction_info 딕셔너리에 종목 코드가 키 값으로 존재하지 않으면 생성(해당 종목 실시간 데이터를 최초로 수신할 때)
self.universe_realtime_transaction_info.update({s_code: {}})
self.universe_realtime_transaction_info[s_code].update({ ------ 최초 수신 이후 계속 수신되는 데이터는 update를 이용해서 값 갱신
"체결시간": signed_at,
"시가": open,
"고가": high,
"저가": low,
"현재가": close,
"(최우선)매도호가": top_priority_ask,
"(최우선)매수호가": top_priority_bid,
"누적거래량": accum_volume
})