def test_market_maker_trade_completed(self): # This test is too complicated! exchange = Exchange() exchange.add_client(MarketMaker()) exchange.do_trading() # Should be two orders at this point self.assertEqual(len(exchange.order_book()), 2) exchange.submit_order(Order('buy',100,exchange.OPEN_DEFAULT_PRICE * (1 + MarketMaker.MARGIN))) self.assertEqual(len(exchange.order_book()), 3) trades = exchange.match_orders() self.assertEqual(len(trades), 1) exchange.do_trading() # price should have gone up price, volume = exchange.last_trade() self.assertEqual(price, exchange.OPEN_DEFAULT_PRICE * (1 + MarketMaker.MARGIN/2)) # old mm orders should have been removed # new mm offers should be based on new price # check order prices and volumes self.assertEqual(len(exchange.order_book()), 2) expected_offer = price * (1 + MarketMaker.MARGIN/2) expected_bid = price * (1 - MarketMaker.MARGIN/2) self.assertEqual(exchange.buy_order_book()[0].price, expected_bid) self.assertEqual(exchange.sell_order_book()[0].price, expected_offer) self.assertEqual(exchange.buy_order_book()[0].quantity, MarketMaker.ORDER_QUANTITY) self.assertEqual(exchange.sell_order_book()[0].quantity, MarketMaker.ORDER_QUANTITY)
def test_run(): exchange = Exchange() exchange.add_client(MarketMaker()) exchange.add_client(SimpleAlgo(order_gen)) for i in range(100): print 'Round: ', i exchange.do_trading() trades = exchange.match_orders() print exchange.last_trade()
def test_trade_placed_each_time_algo_is_called(self): # Given an algo object exchange = Exchange() algo = SimpleAlgo(order_gen) exchange.add_client(algo) # When it is executed exchange.do_trading() # A trade is added to the order book self.assertEqual(len(exchange.order_book()), 1)
def test_no_current_orders(self): exchange = Exchange() exchange.add_client(MarketMaker()) exchange.do_trading() # check order prices and volumes self.assertEqual(len(exchange.order_book()), 2) expected_offer = exchange.OPEN_DEFAULT_PRICE * (1 + MarketMaker.MARGIN/2) expected_bid = exchange.OPEN_DEFAULT_PRICE * (1 - MarketMaker.MARGIN/2) self.assertEqual(exchange.buy_order_book()[0].price, expected_bid) self.assertEqual(exchange.sell_order_book()[0].price, expected_offer) self.assertEqual(exchange.buy_order_book()[0].quantity, MarketMaker.ORDER_QUANTITY) self.assertEqual(exchange.sell_order_book()[0].quantity, MarketMaker.ORDER_QUANTITY)
def test_market_maker_price(self): # scenario: check that marker maker prices are based on order book prices exchange = Exchange() # given an order book with a buy order with price 10.0 exchange.current_client = 99 exchange.submit_order(Order('buy',100,10.0)) # and the market maker is a client of the exchange exchange.add_client(MarketMaker()) # when do_trading is called exchange.do_trading() # the order book contains a buy order with price 10.0 - MARGIN/2 # and the original buy at 10.0 self.assertEqual(exchange.buy_order_book(), [Order('buy',100,10.0), Order('buy',100,10.0 * (1 - MarketMaker.MARGIN/2))]) # and a sell order with price 10 + MARGIN/2 self.assertEqual(exchange.sell_order_book(), [Order('sell',100,10.0 * (1 + MarketMaker.MARGIN/2))])