TR(OPT10081)을 호출할 때 응답을 받아 오는 데 사용했던 if 구문인 if rqname == "opt10081_req" 다음에 elif를 추가하여 rqname이 예수금 요청(opw00001_req)일 때 처리할 코드를 넣었습니다. 이 과정에서 self.tr_event_loop.exit() 및 time.sleep(0.5) 코드가 elif 밑의 코드 블록으로 들어가지 않도록 주의하기 바랍니다.
이처럼 TR 요청을 만들 때마다 TR 이름에 해당하는 elif 구문을 추가하여 해당 TR에 대한 응답 로직을 만들 수 있습니다.
예수금을 얻어 오는 TR(OPW00001)은 self.has_next_tr_data 변수를 사용하여 조회 가능한 데이터가 남아 있는지 확인하고 추가 데이터를 조회하고자 같은 TR을 여러 번 호출했던 일봉 데이터 조회와 다르게 한 번 호출로 얻어 온 싱글 데이터 응답으로 ‘주문가능금액’ 항목을 얻어 와 변수 deposit에 담았습니다.
여기서 주문 가능 금액과 예수금은 서로 다른 값이지만 예수금을 조회하기 위해 GetCommData 함수에 주문 가능 금액을 전달하는 이유를 설명하겠습니다. 먼저 증권 시장의 결제 시스템은 D+2 이후에 된다는 점을 이해해야 합니다. 예를 들어 월요일에 가지고 있는 예수금이 10만 원인데 장 중에 보유 중인 200만 원어치의 주식을 매도한 경우, 결제 대금인 200만 원이 D+2일에 예수금으로 들어오기 때문에 매도 당일 예수금은 그대로 10만 원이지만 수요일에 확인한 예수금은 210만 원이 됩니다. 하지만 그렇다고 해서 매수하고 싶은 주식이 있더라도 수요일까지 기다려야 하는 것은 아닙니다. 정산할 200만 원이 예수금으로 계산되지 않을 뿐이지 이 금액을 사용하여 다른 종목을 매수할 수 있기 때문입니다.