async def amend_order(self, i, j):
        res = ApiResult()
        res.success = True

        self.orders_amended += 1
        self.amend_orders_data.append((i, j))
        return res
Beispiel #2
0
    async def cancel_order(self, order_id):
        res = ApiResult()
        try:
            eid = self.shared_storage.uid_to_eid[order_id]
        except KeyError:
            # Order elimination msg was received on the Streaming side
            self.logger.warning(
                f'Order was already removed. Order id = {order_id}')
            res.success = True
            return res

        body = {'order_id': eid}

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

        self.logger.info(
            f'Sending cancellation request. eid = {eid}, data: {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
    async def send_order(self, order_request):
        res = ApiResult()
        res.success = True

        self.orders_sent += 1
        self.new_orders_data.append(order_request)
        return res
    async def send_orders(self, orders_request):
        res = ApiResult()
        res.success = True

        self.orders_sent += len(orders_request)
        for _request in orders_request:
            self.new_orders_data.append(_request)
        return res
Beispiel #5
0
    async def send_orders(self, orders):
        res = ApiResult()

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

            if order.type == OrderType.mkt:
                ord_type = 'market'
            elif order.type == OrderType.limit:
                ord_type = 'limit'
            else:
                raise Exception(f'Unknown order type. Type = {order.type}')

            body = {
                'client_id': order.order_id,
                'contract_code': self.config.symbol,
                'type': ord_type,
                'side': side,
                'size': str(round(order.quantity, self.ROUNDING_QTY))
            }
            if order.type == OrderType.limit:
                body['price'] = str(order.price)
                if self.send_post_only_orders:
                    body['post_only'] = True
            data.append(body)

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

        self.logger.info(f'EMX sending new order request. Data: {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
Beispiel #6
0
    async def cancel_active_orders(self):
        res = ApiResult()

        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
Beispiel #7
0
    async def amend_orders(self, new_orders, old_orders):
        res = ApiResult()

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

            if new_order.type == OrderType.mkt:
                ord_type = 'market'
            elif new_order.type == OrderType.limit:
                ord_type = 'limit'
            else:
                raise Exception(f'Unknown order type. Type = {new_order.type}')

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

            if new_order.side == OrderSide.buy:
                side = 'buy'
            elif new_order.side == OrderSide.sell:
                side = 'sell'
            else:
                raise Exception(f'Unknown order side. Type = {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 == OrderType.limit:
                body['price'] = str(new_order.price)
            data.append(body)

            self.shared_storage.eid_to_uid[eid] = new_order.order_id
            self.shared_storage.uid_to_eid[new_order.order_id] = eid
            self.shared_storage.eids_to_amend[eid] = True
            self.logger.debug(
                f'Ids mapped during amend, eid = {eid}, uid = {new_order.order_id}'
            )

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

        self.logger.info(f'Sending bulk amend request. Data: {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
    async def cancel_orders(self, cancel_requests):
        res = ApiResult()
        res.success = True

        self.orders_cancelled += len(cancel_requests)
        return res
    async def amend_orders(self, new, old):
        res = ApiResult()
        res.success = True

        self.orders_amended += len(new)
        return res