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))
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))