class test_order_book(unittest.TestCase): def setUp(self): self.completed_trades = [] self.completed_orders = [] self.orders = [] self.order_book = OrderBook("KEQ") for i in range(1, 10): quote = test_quotes[str(i)] if "price" in quote: quote["price"] = Decimal(quote["price"]) order = json.loads(self.order_book.process_order(quote)) self.orders.append(order) for trades in self.order_book.completed_trades: self.completed_trades.append(trades) for orders in self.order_book.completed_orders: self.completed_orders.append(orders) def test_get_min_ask(self): self.assertEqual(self.order_book.get_min_ask(), 99.5) def test_get_max_bid(self): self.assertEqual(self.order_book.get_max_bid(), 99) def test_process_order(self): self.assertEqual(len(self.order_book.bids.keys()), 1) self.assertEqual(len(self.order_book.asks.keys()), 2) self.assertEqual(len(self.completed_trades), 6) self.assertEqual(len(self.order_book.ongoing_orders), 3) self.assertEqual(len(self.completed_orders), 6) def test_modify_order(self): quote = test_quotes[str(10)] if "price" in quote: quote["price"] = Decimal(quote["price"]) new_order = json.loads( self.order_book.modify_order(self.orders[8]["order_id"], quote)) self.assertEqual(new_order["price"], '75') def test_cancel_order(self): quote = test_quotes[str(10)] if "price" in quote: quote["price"] = Decimal(quote["price"]) new_order = json.loads(self.order_book.process_order(quote)) self.order_book.cancel_order(new_order["order_id"]) self.assertEqual(len(self.order_book.bids.keys()), 1)
line['order_id']) elif line['type'] == 'cancel_all': if line['side'] == "bid": q = order_book.bids elif line['size'] == 'ask': q = order_book.asks else: sys.exit('not given bid or ask') for order in q.price_tree.get(Decimal(line['price']), []): if order.trade_id == line['trade_id']: order_book.cancel_order(line['side'], order.order_id) elif line['type'] == 'modify': order_book.modify_order(line['order_id'], { 'side': line['side'], 'price': line['price'], 'quantity': line['quantity']}) else: (trade, order) = order_book.process_order(line, False, False) myalgo.process_trade(trade, mode) if len(algo_orders) > 0: printme("\n") printme("After algo") print_orderbook(order_book, old_orderbook) stats=myalgo.stats() printme ("total volume=", stats[0]) printme ("my volume=", stats[1]) printme ("participation=", stats[3]) else:
printme ("participation=", stats[3]) if myalgo != None: (algo_orders, mode) = myalgo.process_order(line, trade, order) printme('') printme("RUNNING ALGO WITH MODE=", mode) old_orderbook = copy.deepcopy(order_book) for line in algo_orders: printme(pprint.pformat(line)) if line['type'] == 'cancel': order_book.cancel_order(line['side'], line['order_id']) elif line['type'] == 'modify': order_book.modify_order(line['order_id'], { 'side': line['side'], 'price': line['price'], 'quantity': line['quantity']}) else: (trade, order) = order_book.process_order(line, False, False) myalgo.process_trade(trade, mode) if len(algo_orders) > 0: printme("\n") printme("After algo") print_orderbook(order_book, old_orderbook) stats=myalgo.stats() printme ("total volume=", stats[0]) printme ("my volume=", stats[1]) printme ("participation=", stats[3]) else: