더북(TheBook)

Kiwoom.py 파일의 _on_receive_tr_data 함수에 이어서 다음 코드를 작성합니다.

Kiwoom.py

(...)
def send_order(self, rqname, screen_no, order_type, code, order_quantity, order_price, order_classification, origin_order_number=""):
    order_result = self.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)", [rqname, screen_no, self.account_number, order_type, code, order_quantity, order_price, order_classification, origin_order_number])
    return order_result

함수에서 전달받는 매개변수가 많아서 복잡해 보일 수 있지만 TR을 요청했던 패턴과 유사한 점이 많습니다. 요청에 전달하는 매개변수를 하나씩 살펴보며 함수 호출에 필요한 것이 무엇인지 확인해 보겠습니다.

rqname: TR 호출 때와 마찬가지로 요청의 별명이라고 생각하면 됩니다. 사용자가 정하고 싶은 별칭을 정하면 구분하기 쉽습니다. 예를 들어 매수 주문을 접수하면 ‘send_buy_order’라는 식으로 이름을 지어 사용하겠습니다.

screen_no: TR 호출에서 사용했던 것처럼 화면 번호를 의미하며, 이 또한 크게 중복되지 않는 선에서 원하는 대로 4자리를 정해서 사용합니다.

order_type: 매수/매도/취소 주문 같은 주문 유형을 구분합니다. 예를 들어 신규 매수 주문을 접수하고 싶으면 1을 전달합니다.

code: 매매할 종목 코드입니다. 당연한 말이지만 매도 주문을 접수할 때는 해당 종목을 보유하고 있어야 합니다.

order_quantity: 매매할 종목의 주문 수량입니다. 앞과 마찬가지로 매도 주문을 접수할 때는 보유한 수량보다 많은 양을 매도할 수 없습니다.

order_price: 주문 가격을 의미합니다. 시장가로 주문할 때는 의미가 없는 필드이며 이 프로젝트에서는 시장가 주문으로 발생하는 슬리피지를 없애고자 주문 가격을 지정하여 사용하겠습니다.

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