示例#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_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()
示例#3
0
 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)
示例#4
0
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()
示例#5
0
 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)
示例#6
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)
示例#7
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))])