예제 #1
0
 def test_match_equal(self):
     insert_many_orders([create_book_order('bid', 240, 0.0, str(round(time.time(), 2)), 0.1, str(uuid.uuid4())),
                         create_book_order('ask', 240, 0.0, str(round(time.time(), 2)), 0.1, str(uuid.uuid4()))])
     trade = match_orders()
     self.assertIsNotNone(trade)
     self.assertIsInstance(trade, Trade)
     bid = get_next_order('bid')
     self.assertIsNone(bid)
     ask = get_next_order('ask')
     self.assertIsNone(ask)
예제 #2
0
 def test_match_different_prices_time(self):
     t1 = str(round(time.time(), 2))
     time.sleep(0.015)
     t2 = str(round(time.time(), 2))
     insert_many_orders([create_book_order('bid', 242, 0.0, t1, 0.1, str(uuid.uuid4())),
                         create_book_order('ask', 240, 0.0, t2, 0.1, str(uuid.uuid4()))])
     trade = match_orders()
     self.assertIsNotNone(trade)
     self.assertIsInstance(trade, Trade)
     self.assertEqual(trade.price, 240)
     bid = get_next_order('bid')
     self.assertIsNone(bid)
     ask = get_next_order('ask')
     self.assertIsNone(ask)
예제 #3
0
    def test_price_sort(self):
        tsize = 1.01
        loworder = create_book_order('ask', 239, str(2.0), str(round(time.time(), 2)), str(tsize), str(uuid.uuid4()))
        mediumorder = create_book_order('ask', 240, str(1.0), str(round(time.time(), 2)), str(tsize), str(uuid.uuid4()))
        highorder = create_book_order('ask', 241, str(0.0), str(round(time.time(), 2)), str(tsize), str(uuid.uuid4()))

        insert_many_orders([loworder, highorder, mediumorder])

        first_got = get_next_order('ask', pop=True)
        second_got = get_next_order('ask', pop=True)
        third_got = get_next_order('ask', pop=True)
        self.assertEqual(first_got, loworder)
        self.assertEqual(second_got, mediumorder)
        self.assertEqual(third_got, highorder)
예제 #4
0
 def test_speed(self):
     book = []
     for i in range(0, 50000):
         book.append(create_book_order('bid', 250, 0.0, round(time.time(), 2), 0.1, uuid.uuid4()))
         book.append(create_book_order('ask', 250, 0.0, round(time.time(), 2), 0.1, uuid.uuid4()))
     t1 = time.time()
     insert_many_orders(book)
     t2 = time.time()
     while match_orders():
         pass
     t3 = time.time()
     self.assertLessEqual(t2 - t1, 3)  # calibrated on Ira's laptop then doubled for margin
     self.assertLessEqual(t3 - t2, 30)  # calibrated on Ira's laptop then doubled for margin
     print "time to insert 100k orders: %s" % (t2 - t1)
     print "time to process 100k orders: %s" % (t3 - t2)
예제 #5
0
def create_order_book(price=500.0, tsize=0.1, size=10, offset=0, priority=0.0, insert=True):
    bids = []
    asks = []
    for i in range(0, size):
        base_price = price * (1 + (float(i) / float(size)) / 2)
        bid = create_book_order('bid', base_price + offset, priority,
                           round(time.time(), 2), tsize, uuid.uuid4())

        ask = BookOrder('ask', base_price - offset, priority,
                    round(time.time(), 2), tsize, uuid.uuid4())

        bids.append(bid)
        asks.append(ask)
        if insert:
            insert_many_orders([bid, ask])
    return {'bids': bids, 'asks': asks}
예제 #6
0
 def test_insert_many_orders(self):
     ask_now = str(round(time.time(), 2))
     bid_now = str(round(time.time(), 2))
     ask_oid = str(uuid.uuid4())
     bid_oid = str(uuid.uuid4())
     amount = str(1.01)
     price = 240
     priority = str(0.0)
     bid = create_book_order('bid', price, priority, bid_now, amount, bid_oid)
     ask = create_book_order('ask', price, priority, ask_now, amount, ask_oid)
     insert_many_orders((bid, ask))
     time.sleep(0.1)
     got_bid = get_next_order('bid', pop=True)
     self.assertEqual(got_bid, bid)
     got_ask = get_next_order('ask', pop=True)
     self.assertEqual(got_ask, ask)
예제 #7
0
    def test_amount_sort(self):
        now = str(round(time.time(), 2))
        loworder = create_book_order('ask', 240, str(0.0), now, str(1), str(uuid.uuid4()))
        time.sleep(0.1)
        mediumorder = create_book_order('ask', 240, str(0.0), now, str(2), str(uuid.uuid4()))
        time.sleep(0.1)
        highorder = create_book_order('ask', 240, str(0.0), now, str(3), str(uuid.uuid4()))

        insert_many_orders([loworder, highorder, mediumorder])

        first_got = get_next_order('ask', pop=True)
        second_got = get_next_order('ask', pop=True)
        third_got = get_next_order('ask', pop=True)
        self.assertEqual(first_got, loworder)
        self.assertEqual(second_got, mediumorder)
        self.assertEqual(third_got, highorder)
예제 #8
0
    def test_speed_queue(self):
        book = []
        for i in range(0, 50000):
            book.append(create_book_order('bid', 250, 0.0, round(time.time(), 2), 0.1, uuid.uuid4()))
            book.append(create_book_order('ask', 250, 0.0, round(time.time(), 2), 0.1, uuid.uuid4()))
        t1 = time.time()
        insert_many_orders(book)
        t2 = time.time()
        while 1:
            bid = get_next_order('bid')
            ask = get_next_order('ask')
            #print "bid: %s\task: %s" % (bid, ask)
            if bid is None or ask is None:
                break
            elif time.time() > t2 + 120:
                self.fail("took too long to process orders")
            else:
                time.sleep(0.1)
        t3 = time.time()
        self.assertLessEqual(t2 - t1, 3)  # calibrated on Ira's laptop then doubled for margin
        self.assertLessEqual(t3 - t2, 120)  # calibrated on Ira's laptop then doubled for margin

        print "time to insert 100k orders: %s" % (t2 - t1)
        print "time to process 100k orders (w/queue): %s" % (t3 - t2)