하지만 앞서 설명한 것처럼 한 번에 호출로 받아 올 수 있는 데이터의 최대 개수는 600개이며 추가로 받아 올 데이터가 있으므로 최초로 받아 온 600일 치가 ohlcv에 저장됩니다. 이후 추가로 받아 올 데이터가 남았는지는 self.has_next_tr_data를 통해 확인합니다. 따라서 더 제공받을 일봉 데이터가 있다면(self.has_next_tr_data 값이 2인 경우) 다음과 같이 while 문에 진입하여 한 번 더 TR 요청을 하고, 똑같이 응답을 기다리는 상태로 진입하기 위해 self.tr_event_loop.exec_()를 실행합니다.
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_()
이후에는 최초로 수신한 응답 값 ohlcv를 기준으로 이후 데이터를 이어 붙인다는 의미의 반복문이 등장합니다. 이 반복문 의미는 self.tr_data(현재 호출로 받아 온 데이터)만큼 반복하여 ohlcv(받아 온 데이터를 모아 둔 딕셔너리)의 마지막 부분 [-1:]에 넣는다는 것입니다.
간단히 말해 이 과정은 한 번에 모든 일봉 데이터를 받아 올 수 없으니 호출할 때마다 받아 온 데이터를 합치는 과정이라고 생각하기 바랍니다.
for key, val in self.tr_data.items():
ohlcv[key][-1:] = val