Beispiel #1
0
    def on_order(self, packet: dict) -> None:
        """"""
        ord_data = packet["o"]
        key = (ord_data["o"], ord_data["f"])
        order_type = ORDERTYPE_BINANCES2VT.get(key, None)
        if not order_type:
            return

        dt = generate_datetime(packet["E"])

        order = OrderData(symbol=ord_data["s"],
                          exchange=Exchange.BINANCE,
                          orderid=str(ord_data["c"]),
                          type=order_type,
                          direction=DIRECTION_BINANCES2VT[ord_data["S"]],
                          price=float(ord_data["p"]),
                          volume=float(ord_data["q"]),
                          traded=float(ord_data["z"]),
                          status=STATUS_BINANCES2VT[ord_data["X"]],
                          datetime=dt,
                          gateway_name=self.gateway_name,
                          offset=OFFSET_BINANCES2VT[ord_data['R']],
                          time=dt.time())

        if "n" in ord_data.keys():
            order.fee = float(ord_data['n'])
            order.netpnl = float(ord_data['rp'])

        self.gateway.on_order(order)

        # Push trade event
        trade_volume = float(ord_data["l"])
        if not trade_volume:
            return

        trade = TradeData(symbol=order.symbol,
                          exchange=order.exchange,
                          orderid=order.orderid,
                          tradeid=ord_data["t"],
                          direction=order.direction,
                          price=float(ord_data["L"]),
                          volume=trade_volume,
                          datetime=generate_datetime(ord_data["T"]),
                          gateway_name=self.gateway_name,
                          offset=order.offset)
        self.gateway.on_trade(trade)