def __refresh_order(self, order: Order): """ :param order: order to refresh Refreshes the order if its visible quantity is exhausted. If the real quantity is exhausted, removes from the list. """ if order.quantity == 0: orders_list = self.__get_orders_list(order) orders_list.remove(order) if order.hidden_quantity > 0: order.timestamp = self.__get_timestamp() difference = min(order.peak, order.hidden_quantity) order.quantity += difference order.hidden_quantity -= difference orders_list.add(order)
def add(self, order: Order): """ :param order: order being added to the order book Adds an order to the order book. Executes all possible transactions if possible and then returns the order book state. """ order.timestamp = self.__get_timestamp() self.__get_orders_list(order).add(order) self.last_transactions.clear() while order.quantity > 0: matched_order = self.__match_order(order) if matched_order: self.__make_transaction(order, matched_order) self.__refresh_order(order) else: break