Example #1
0
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)
Example #2
0
                                 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:
Example #3
0
            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: