def insert_buy(self, quantity, price): """ Insert buy order in the order book and execute orders if it's possible. :param quantity: int The amount to buy :param price: double The unit price to buy :return: None """ buy_order = Order(quantity, price, type_of_order='buy') if quantity != 0: self._buy_orders.append(buy_order) self._buy_orders.sort() self._buy_orders.reverse() print('--- Insert {order} on {book}'.format( order=buy_order.__str__(), book=self._name)) while len(self._sell_orders) != 0 and self._sell_orders[0].get_price( ) <= buy_order.get_price() and buy_order.get_qty() > 0: # Case quantity sell order > first buy order in our book if buy_order.get_qty() > self._sell_orders[0].get_qty(): deal = Deal(self._sell_orders[0].get_qty(), self._sell_orders[0].get_price(), self._name) self._execute_deals.append(deal) new_qty = buy_order.get_qty() - self._sell_orders[0].get_qty() # Fill the first buy order self._sell_orders.remove(self._sell_orders[0]) buy_order.set_qty(new_qty) print(deal.__str__()) # Case quantity sell order < first buy order in our book else: deal = Deal(buy_order.get_qty(), self._sell_orders[0].get_price(), self._name) self._execute_deals.append(deal) # Update of the new quantity self._sell_orders[0].set_qty(self._sell_orders[0].get_qty() - buy_order.get_qty()) buy_order.set_qty(0) self._buy_orders.remove(self._buy_orders[0]) if self._sell_orders[0].get_qty() == 0: self._sell_orders.remove(self._sell_orders[0]) print(deal.__str__()) print(self.get_status()) return None