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