더북(TheBook)

다음은 전체 출력 결과입니다.

connected
8*********
[Kiwoom] _on_receive_msg is called / / / 조회가 완료되었습니다.
[Kiwoom] _on_receive_tr_data is called 0002 / opt10075_req / opt10075
{'251270': {'종목코드': '251270', '종목명': '넷마블', '주문번호': '128071', '주문상태': '체결', '주문수량': 1, '주문가격': 133000, '현재가': 133500, '주문구분': '매수', '미체결수량': 0, '체결량': 1, '주문시간': '122429', '당일매매수수료': 460, '당일매매세금': 0}}

이렇게 get_order 함수로 체결 슬롯이 동작하지 않을 때도 주문 정보를 얻어 올 수 있도록 만들었습니다. 하지만 엄밀히 말해 이 방법은 약간 문제가 발생할 수 있는 소지가 있습니다. 주문에 관련한 정보를 종목 코드를 키 값으로 한 order 딕셔너리에 저장하기 때문에 당일에 같은 종목에 대해 두 번 이상의 주문을 내는 분할 매매, 재주문(동일 종목을 매수 후 매도, 매도 후 매수)의 경우 여러 주문 중 마지막 하나의 주문 정보만 order에 저장됩니다. 그 이유는 키가 중복되면 키 안에 저장되는 값을 새로 덮어쓰기 때문입니다.

이 문제를 해결하려면 주문 접수 이후 발생되는 고유한 값인 주문 번호를 데이터베이스에 따로 저장하고, 이를 키 값으로 사용하여 order 딕셔너리에서 사용하는 키 값이 유일하도록 만들어야 합니다. 다만 이 프로젝트에서는 분할 매매, 재주문을 고려하지 않았기 때문에 딕셔너리의 키를 종목 코드로 구현했습니다.

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