더북(TheBook)

마지막으로 살펴볼 부분은 다음 코드입니다.

order_result = self.kiwoom.send_order('send_buy_order', '1001', 1, code, quantity, bid, '00')
self.kiwoom.order[code] = {'주문구분': '매수', '미체결수량': quantity}

이 코드는 매수 주문을 접수한 후 주문 정보를 저장하는 Kiwoom 클래스의 order 딕셔너리에 주문 접수한 종목 코드를 키로 하여 {'주문구분': '매수', '미체결수량': quantity}를 저장합니다. 주문 접수한 후에는 _on_chejan_slot으로만 Kiwoom 클래스의 order 딕셔너리에 주문 정보가 저장됩니다. 이 경우 A 종목을 주문하고 _on_chejan_slot이 해당 종목에 대한 주문 정보를 저장하기 전에 B 종목을 바로 주문하면 주문 수량 계산에 문제가 생기기 때문입니다.

B 종목을 매수할 때는 A 종목을 이미 주문했기 때문에 self.get_buy_order_count 함수 호출 결과가 1이어야 하지만, _on_chejan_slot이 동작하기 전에 B 종목을 주문하면 Kiwoom 클래스의 order 딕셔너리를 기준으로 이미 접수한 매수 주문 개수를 계산하는 self.get_buy_order_count 함수 호출 결과가 0이 되기에 B 종목 주문 수량이 잘못 계산될 수 있습니다. 이런 문제를 방지하고자 주문을 접수한 후 ‘주문구분’과 ‘미체결수량’ 같은 간단한 정보를 먼저 self.kiwoom.order에 저장해 두어 다음 종목을 매수할 때 주문 수량 계산에 문제가 없도록 했습니다.

하지만 이런 문제가 발생하는 상황과 다르게 A 종목 매수 후 충분한 시간을 두어 _on_chejan_slot이 동작한 후 B 종목을 매수한다는 보장이 있다면 이 코드가 필요하지 않을 수도 있지만, 혹시 모를 상황에 대비하여 추가했습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.