더북(TheBook)

TR 호출에 필요한 나머지 입력 값인 "체결구분"은 ‘0:전체, 1:미체결, 2:체결’처럼 체결, 미체결 여부를 구분하는 값이며, 전체를 의미하는 "0"을 전달하여 사용하겠습니다. 또 "매매구분"은 ‘0:전체, 1:매도, 2:매수’처럼 매수/매도를 구분하는 값이며, 이 역시 전체를 의미하는 "0"을 전달하여 사용하겠습니다.

입력 값 설정을 마친 후 CommRqData로 TR 호출을 완료하고, 마찬가지로 self.tr_event_loop.exec_()를 사용하여 응답 대기 상태로 만듭니다.

이렇게 함수 구성을 마치고 나서 TR 슬롯 함수 _on_receive_tr_data에 우리가 사용한 TR(opt10075)에 대한 응답 부분을 구성합니다.

Kiwoom.py

(...)
elif rqname == "opt10075_req":
    for i in range(tr_data_cnt):
        code = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "종목코드")
        code_name = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "종목명")
        order_number = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "주문번호")
        order_status = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "주문상태")
        order_quantity = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "주문수량")
        order_price = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "주문가격")
        current_price = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "현재가")
        order_type = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "주문구분")
        left_quantity = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "미체결수량")
        executed_quantity = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "체결량")
        ordered_at = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "시간")
        fee = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "당일매매수수료")
        tax = self.dynamicCall("GetCommData(QString, QString, int, QString", trcode, rqname, i, "당일매매세금")
        code = code.strip()
        code_name = code_name.strip()
        order_number = str(int(order_number.strip()))
        order_status = order_status.strip()
        order_quantity = int(order_quantity.strip())
        order_price = int(order_price.strip())

        current_price = int(current_price.strip().lstrip('+').lstrip('-'))
        order_type = order_type.strip().lstrip('+').lstrip('-') # +매수, -매도처럼 +, - 제거
        left_quantity = int(left_quantity.strip())
        executed_quantity = int(executed_quantity.strip())
        ordered_at = ordered_at.strip()
        fee = int(fee)
        tax = int(tax)

        self.order[code] = {
            '종목코드': code,
            '종목명': code_name,
            '주문번호': order_number,
            '주문상태': order_status,
            '주문수량': order_quantity,
            '주문가격': order_price,
            '현재가': current_price,
            '주문구분': order_type,
            '미체결수량': left_quantity,
            '체결량': executed_quantity,
            '주문시간': ordered_at,
            '당일매매수수료': fee,
            '당일매매세금': tax
        }

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