コード例 #1
0
    async def cancel_order(self, orderid):
        res = api_result()
        try:
            eid = self.shared_storage.uid_to_eid[orderid]
        except KeyError:
            # Order elimination msg was received on the Streaming side
            self.logger.warning(
                "Order was already removed. Order id = {}".format(orderid))
            res.success = True
            return res

        body = {"order_id": eid}

        final_data = {
            "channel": "trading",
            "type": "request",
            "action": "cancel-order",
            "data": body
        }

        self.logger.info(
            "Sending cancellation request. eid = {}, data: {}".format(
                eid, final_data))
        try:
            await self.ws.ws.send_str(json.dumps(final_data))
        except aiohttp.client_exceptions.ClientConnectorError as err:
            self.logger.warning("ConnectionError will be raised")
            raise ConnectionError(str(err))

        res.success = True
        return res
コード例 #2
0
    async def send_orders(self, orders):
        res = api_result()

        data = []
        for order in orders:
            side = ""
            if order.side == order_side.buy:
                side = "buy"
            elif order.side == order_side.sell:
                side = "sell"
            else:
                raise Exception("Unknown order side. Type = {}".format(
                    order.side))

            ord_type = ""
            if order.type == order_type.mkt:
                ord_type = "market"
            elif order.type == order_type.limit:
                ord_type = "limit"
            else:
                raise Exception("Unknown order type. Type = {}".format(
                    order.type))

            body = {
                "client_id": order.orderid,
                "contract_code": self.config.symbol,
                "type": ord_type,
                "side": side,
                "size": str(round(order.quantity, self.ROUNDING_QTY))
            }
            if order.type == order_type.limit:
                body["price"] = str(order.price)
            data.append(body)
            self.shared_storage.orders[order.orderid] = order

        final_data = {
            "channel": "trading",
            "type": "request",
            "action": "create-order",
            "data": data
        }

        self.logger.info(
            "EMX sending new order request. Data: {}".format(final_data))
        try:
            await self.ws.ws.send_str(json.dumps(final_data))
        except aiohttp.client_exceptions.ClientConnectorError as err:
            raise ConnectionError(str(err))

        res.success = True
        return res
コード例 #3
0
    async def cancel_active_orders(self):
        res = api_result()

        body = {"contract_code": self.config.symbol}

        final_data = {
            "channel": "trading",
            "type": "request",
            "action": "cancel-all-orders",
            "data": body
        }

        self.logger.info("Sending cancel all request")
        try:
            await self.ws.ws.send_str(json.dumps(final_data))
        except aiohttp.client_exceptions.ClientConnectorError as err:
            raise ConnectionError(str(err))

        res.success = True
        return res
コード例 #4
0
    async def amend_orders(self, new_orders, old_orders):
        res = api_result()

        data = []
        for new_order, old_order in zip(new_orders, old_orders):
            try:
                eid = self.shared_storage.uid_to_eid[old_order.orderid]
            except KeyError:
                self.logger.warning(
                    "Order id was not found for amend. Order id = {}".format(
                        old_order.orderid))
                return res

            ord_type = ""
            if new_order.type == order_type.mkt:
                ord_type = "market"
            elif new_order.type == order_type.limit:
                ord_type = "limit"
            else:
                raise Exception("Unknown order type. Type = {}".format(
                    new_order.type))

            if new_order.side != old_order.side:
                raise Exception("Wrong order side. Side = {}".format(
                    new_order.side))

            side = ""
            if new_order.side == order_side.buy:
                side = "buy"
            elif new_order.side == order_side.sell:
                side = "sell"
            else:
                raise Exception("Unknown order side. Type = {}".format(
                    new_order.side))

            body = {
                "type": ord_type,
                "side": side,
                "order_id": eid,
                "size": str(round(new_order.quantity, self.ROUNDING_QTY))
            }
            if new_order.type == order_type.limit:
                body["price"] = str(new_order.price)
            data.append(body)

            self.shared_storage.eid_to_uid[eid] = new_order.orderid
            self.shared_storage.uid_to_eid[new_order.orderid] = eid
            self.shared_storage.eid_to_uid_amend[eid] = old_order.orderid
            self.shared_storage.eids_to_amend[eid] = True
            self.shared_storage.orders[new_order.orderid] = new_order
            self.logger.debug(
                "Ids mapped during amend, eid = {}, uid = {}".format(
                    eid, new_order.orderid))

        final_data = {
            "channel": "trading",
            "type": "request",
            "action": "modify-order",
            "data": data
        }

        self.logger.info(
            "Sending bulk amend request. Data: {}".format(final_data))
        try:
            await self.ws.ws.send_str(json.dumps(final_data))
        except aiohttp.client_exceptions.ClientConnectorError as err:
            raise ConnectionError(str(err))

        res.success = True
        return res