Ejemplo n.º 1
0
    def _update_order(self, order_info):
        """ Order update.

        Args:
            order_info: Order information.

        Returns:
            Return order object if or None.
        """
        if order_info["s"] != self._raw_symbol:
            return
        order_no = "{}_{}".format(order_info["i"], order_info["c"])

        if order_info["X"] == "NEW":
            status = ORDER_STATUS_SUBMITTED
        elif order_info["X"] == "PARTIAL_FILLED":
            status = ORDER_STATUS_PARTIAL_FILLED
        elif order_info["X"] == "FILLED":
            status = ORDER_STATUS_FILLED
        elif order_info["X"] == "CANCELED":
            status = ORDER_STATUS_CANCELED
        elif order_info["X"] == "REJECTED":
            status = ORDER_STATUS_FAILED
        elif order_info["X"] == "EXPIRED":
            status = ORDER_STATUS_FAILED
        else:
            return
        order = self._orders.get(order_no)
        if not order:
            info = {
                "platform": self._platform,
                "account": self._account,
                "strategy": self._strategy,
                "order_no": order_no,
                "action": order_info["S"],
                "order_type": order_info["o"],
                "symbol": self._symbol,
                "price": order_info["p"],
                "quantity": order_info["q"],
                "ctime": order_info["T"]
            }
            order = Order(**info)
            self._orders[order_no] = order
        order.remain = float(order_info["q"]) - float(order_info["z"])
        order.avg_price = order_info["L"]
        order.status = status
        order.utime = order_info["T"]
        order.trade_type = int(order_no[-1])
        SingleTask.run(self._order_update_callback, copy.copy(order))
Ejemplo n.º 2
0
    async def get_order_status(self, symbol, order_id, client_order_id):
        order_info, error = self._rest_api.get_order_status(
            symbol, order_id, client_order_id)
        if not error:
            if order_info['symbol'] != symbol:
                return
            order_no = "{}_{}".format(order_info["orderId"],
                                      order_info["clientOrderId"])

            if order_info["status"] == "NEW":
                status = ORDER_STATUS_SUBMITTED
            elif order_info["status"] == "PARTIAL_FILLED":
                status = ORDER_STATUS_PARTIAL_FILLED
            elif order_info["status"] == "FILLED":
                status = ORDER_STATUS_FILLED
            elif order_info["status"] == "CANCELED":
                status = ORDER_STATUS_CANCELED
            elif order_info["status"] == "REJECTED":
                status = ORDER_STATUS_FAILED
            elif order_info["status"] == "EXPIRED":
                status = ORDER_STATUS_FAILED
            else:
                return
            order = self._orders.get(order_no)
            if not order:
                logger.info('手动查询更新订单状态')
                info = {
                    "platform": self._platform,
                    "account": self._account,
                    "strategy": self._strategy,
                    "order_no": order_no,
                    "action": order_info["side"],
                    "order_type": order_info["type"],
                    "symbol": symbol,
                    "price": order_info["price"],
                    "quantity": order_info["origQty"],
                    "ctime": order_info["time"]
                }
                order = Order(**info)
                self._orders[order_no] = order
            order.remain = float(order_info["origQty"]) - float(
                order_info["executedQty"])
            order.avg_price = None
            order.status = status
            order.utime = order_info["updateTime"]
            order.trade_type = int(order_no[-1])
            SingleTask.run(self._order_update_callback, copy.copy(order))