예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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))])