Beispiel #1
0
class TraderIdTestSuite(unittest.TestCase):
    """Trader ID test cases."""

    def setUp(self):
        # Object creation
        self.trader_id = TraderId(b'0')
        self.trader_id2 = TraderId(b'0')
        self.trader_id3 = TraderId(b'1')

    def test_init(self):
        # Test for init validation
        with self.assertRaises((TypeError, ValueError)):
            TraderId(1.0)
        with self.assertRaises(ValueError):
            TraderId('non hexadecimal')

    def test_conversion(self):
        # Test for conversions
        self.assertEqual(b'0', self.trader_id.to_bytes())

    def test_equality(self):
        # Test for equality
        self.assertTrue(self.trader_id == self.trader_id2)
        self.assertTrue(self.trader_id != self.trader_id3)
        self.assertFalse(self.trader_id == 6)

    def test_hash(self):
        # Test for hashes
        self.assertEqual(self.trader_id.__hash__(), self.trader_id2.__hash__())
        self.assertNotEqual(self.trader_id.__hash__(), self.trader_id3.__hash__())
Beispiel #2
0
 def test_next_identity(self):
     # Test for next identity
     self.assertEquals(MessageId(TraderId('0'), MessageNumber('1')),
                       self.memory_message_repository.next_identity())
Beispiel #3
0
 def test_init(self):
     # Test for init validation
     with self.assertRaises(ValueError):
         TraderId(1.0)
     with self.assertRaises(ValueError):
         TraderId('non hexadecimal')
Beispiel #4
0
 def setUp(self):
     # Object creation
     self.message_id = MessageId(TraderId('0'), MessageNumber(1))
     self.message_id2 = MessageId(TraderId('0'), MessageNumber(1))
     self.message_id3 = MessageId(TraderId('0'), MessageNumber(2))
Beispiel #5
0
 def test_properties(self):
     # Test for properties
     self.assertEqual(TraderId('0'), self.transaction_id.trader_id)
     self.assertEqual(TransactionNumber(1),
                      self.transaction_id.transaction_number)
Beispiel #6
0
 def next_identity(self):
     """
     :rtype OrderId
     """
     return OrderId(TraderId(self._mid),
                    OrderNumber(self.persistence.get_next_order_number()))
Beispiel #7
0
    def setUp(self):
        # Object creation
        self.transaction_id = TransactionId(TraderId("0"),
                                            TransactionNumber(1))
        self.transaction = Transaction(self.transaction_id, Price(100, 'BTC'),
                                       Quantity(30, 'MC'),
                                       OrderId(TraderId('0'), OrderNumber(2)),
                                       OrderId(TraderId('1'), OrderNumber(1)),
                                       Timestamp(0.0))
        self.proposed_trade = Trade.propose(
            MessageId(TraderId('0'), MessageNumber('1')),
            OrderId(TraderId('0'), OrderNumber(2)),
            OrderId(TraderId('1'), OrderNumber(3)), Price(100, 'BTC'),
            Quantity(30, 'MC'), Timestamp(0.0))

        self.tick = Tick(
            MessageId(TraderId('0'), MessageNumber('message_number')),
            OrderId(TraderId('0'), OrderNumber(1)), Price(100, 'BTC'),
            Quantity(5, 'MC'), Timeout(0.0), Timestamp(float("inf")), True)
        self.tick2 = Tick(
            MessageId(TraderId('0'), MessageNumber('message_number')),
            OrderId(TraderId('0'), OrderNumber(2)), Price(100, 'BTC'),
            Quantity(100, 'MC'), Timeout(0.0), Timestamp(float("inf")), True)
        self.order = Order(OrderId(TraderId("0"), OrderNumber(3)),
                           Price(100, 'BTC'), Quantity(30, 'MC'),
                           Timeout(5000), Timestamp(time.time()), False)
        self.order2 = Order(OrderId(TraderId("0"), OrderNumber(4)),
                            Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(5),
                            Timestamp(time.time() - 1000), True)
Beispiel #8
0
 def setUp(self):
     # Object creation
     self.trade = Trade(MessageId(TraderId('0'), MessageNumber(1)),
                        OrderId(TraderId('0'), OrderNumber(3)),
                        OrderId(TraderId('0'), OrderNumber(4)), 1234,
                        Timestamp(1462224447.117))
 def setUp(self, annotate=True):
     yield super(AbstractTestOrderBook, self).setUp(annotate=annotate)
     # Object creation
     self.ask = Ask(
         MessageId(TraderId('0'), MessageNumber('message_number')),
         OrderId(TraderId('0'), OrderNumber(1)), Price(100, 'BTC'),
         Quantity(30, 'MC'), Timeout(1462224447.117),
         Timestamp(1462224447.117))
     self.invalid_ask = Ask(
         MessageId(TraderId('0'), MessageNumber('message_number')),
         OrderId(TraderId('0'), OrderNumber(1)), Price(100, 'BTC'),
         Quantity(30, 'MC'), Timeout(0), Timestamp(0.0))
     self.ask2 = Ask(
         MessageId(TraderId('1'), MessageNumber('message_number')),
         OrderId(TraderId('1'), OrderNumber(1)), Price(400, 'BTC'),
         Quantity(30, 'MC'), Timeout(1462224447.117),
         Timestamp(1462224447.117))
     self.bid = Bid(
         MessageId(TraderId('2'), MessageNumber('message_number')),
         OrderId(TraderId('2'), OrderNumber(1)), Price(200, 'BTC'),
         Quantity(30, 'MC'), Timeout(1462224447.117),
         Timestamp(1462224447.117))
     self.invalid_bid = Bid(
         MessageId(TraderId('0'), MessageNumber('message_number')),
         OrderId(TraderId('0'), OrderNumber(1)), Price(100, 'BTC'),
         Quantity(30, 'MC'), Timeout(0), Timestamp(0.0))
     self.bid2 = Bid(
         MessageId(TraderId('3'), MessageNumber('message_number')),
         OrderId(TraderId('3'), OrderNumber(1)), Price(300, 'BTC'),
         Quantity(30, 'MC'), Timeout(1462224447.117),
         Timestamp(1462224447.117))
     self.trade = Trade.propose(
         MessageId(TraderId('0'), MessageNumber('message_number')),
         OrderId(TraderId('0'), OrderNumber(1)),
         OrderId(TraderId('0'), OrderNumber(1)), Price(100, 'BTC'),
         Quantity(30, 'MC'), Timestamp(1462224447.117))
     self.order_book = OrderBook(MemoryMessageRepository('0'))
Beispiel #10
0
 def setUp(self):
     # Object creation
     self.cancel_order_payload = CancelOrderPayload.Implementation(
         MetaObject(), TraderId('0'), MessageNumber('message_number'),
         Timestamp.now(), OrderNumber(1), Ttl(2))
Beispiel #11
0
 def setUp(self):
     # Object creation
     self.declined_trade_payload = DeclinedTradePayload.Implementation(
         MetaObject(), TraderId('0'), MessageNumber('message_number'),
         OrderNumber(1), TraderId('1'), OrderNumber(2), 1234,
         Timestamp(1462224447.117))
Beispiel #12
0
 def setUp(self):
     # Object creation
     self.wallet_info_payload = WalletInfoPayload.Implementation(
         MetaObject(), TraderId('0'), MessageNumber('1'), TraderId('2'),
         TransactionNumber(2), WalletAddress('a'), WalletAddress('b'),
         Timestamp(3600.0))
Beispiel #13
0
    def setUp(self):
        yield super(PriceTimeStrategyTestSuite, self).setUp()
        # Object creation
        self.ask = Ask(OrderId(TraderId(b'0'), OrderNumber(1)),
                       AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(100), Timestamp.now())
        self.ask2 = Ask(OrderId(TraderId(b'1'), OrderNumber(2)),
                        AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(100), Timestamp.now())
        self.ask3 = Ask(OrderId(TraderId(b'0'), OrderNumber(3)),
                        AssetPair(AssetAmount(40000, 'BTC'), AssetAmount(200, 'MB')), Timeout(100), Timestamp.now())
        self.ask4 = Ask(OrderId(TraderId(b'1'), OrderNumber(4)),
                        AssetPair(AssetAmount(3000, 'A'), AssetAmount(3000, 'MB')), Timeout(100), Timestamp.now())
        self.ask5 = Ask(OrderId(TraderId(b'1'), OrderNumber(4)),
                        AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'C')), Timeout(100), Timestamp.now())

        self.bid = Bid(OrderId(TraderId(b'0'), OrderNumber(5)),
                       AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(100), Timestamp.now())
        self.bid2 = Bid(OrderId(TraderId(b'0'), OrderNumber(6)),
                        AssetPair(AssetAmount(6000, 'BTC'), AssetAmount(30, 'MB')), Timeout(100), Timestamp.now())

        self.ask_order = Order(OrderId(TraderId(b'9'), OrderNumber(11)),
                               AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
                               Timeout(100), Timestamp.now(), True)
        self.ask_order2 = Order(OrderId(TraderId(b'9'), OrderNumber(12)),
                                AssetPair(AssetAmount(600, 'BTC'), AssetAmount(60, 'MB')),
                                Timeout(100), Timestamp.now(), True)

        self.bid_order = Order(OrderId(TraderId(b'9'), OrderNumber(13)),
                               AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
                               Timeout(100), Timestamp.now(), False)
        self.bid_order2 = Order(OrderId(TraderId(b'9'), OrderNumber(14)),
                                AssetPair(AssetAmount(6000, 'BTC'), AssetAmount(60, 'MB')),
                                Timeout(100), Timestamp.now(), False)
        self.order_book = OrderBook()
        self.price_time_strategy = PriceTimeStrategy(self.order_book)
Beispiel #14
0
 def test_to_network(self):
     # Test for to network
     self.assertEquals((TraderId(b'0'), self.tick.timestamp, OrderNumber(1),
                        AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), self.tick.timeout, 0),
                       self.tick.to_network())
Beispiel #15
0
 def test_lookup_ip(self):
     # Test for lookup ip
     self.market_community.update_ip(TraderId('0'), ("1.1.1.1", 0))
     self.assertEquals(("1.1.1.1", 0),
                       self.market_community.lookup_ip(TraderId('0')))
Beispiel #16
0
    def update_ticks(self,
                     ask_order_dict,
                     bid_order_dict,
                     traded_quantity,
                     unreserve=True):
        """
        Update ticks according to a TradeChain block containing the status of the ask/bid orders.

        :type ask_order_dict: dict
        :type bid_order_dict: dict
        :type traded_quantity: Quantity
        :type unreserve: bool
        """
        assert isinstance(ask_order_dict, dict), type(ask_order_dict)
        assert isinstance(bid_order_dict, dict), type(bid_order_dict)
        assert isinstance(traded_quantity, Quantity), type(traded_quantity)
        assert isinstance(unreserve, bool), type(unreserve)

        ask_order_id = OrderId(TraderId(ask_order_dict["trader_id"]),
                               OrderNumber(ask_order_dict["order_number"]))
        bid_order_id = OrderId(TraderId(bid_order_dict["trader_id"]),
                               OrderNumber(bid_order_dict["order_number"]))

        self._logger.debug(
            "Updating ticks in order book: %s and %s (traded quantity: %s)",
            str(ask_order_id), str(bid_order_id), str(traded_quantity))

        # Update ask tick
        new_ask_quantity = Quantity(
            ask_order_dict["quantity"] - ask_order_dict["traded_quantity"],
            ask_order_dict["quantity_type"])
        if self.tick_exists(
                ask_order_id
        ) and new_ask_quantity <= self.get_tick(ask_order_id).quantity:
            tick = self.get_tick(ask_order_id)
            tick.quantity = new_ask_quantity
            if unreserve:
                tick.release_for_matching(traded_quantity)
            if tick.quantity == Quantity(0, ask_order_dict["quantity_type"]):
                self.remove_tick(tick.order_id)
                self.completed_orders.append(tick.order_id)
        elif not self.tick_exists(
                ask_order_id) and new_ask_quantity > Quantity(
                    0, ask_order_dict["quantity_type"]):
            ask = Ask(
                ask_order_id,
                Price(ask_order_dict["price"], ask_order_dict["price_type"]),
                new_ask_quantity, Timeout(ask_order_dict["timeout"]),
                Timestamp(ask_order_dict["timestamp"]))
            self.insert_ask(ask)

        # Update bid tick
        new_bid_quantity = Quantity(
            bid_order_dict["quantity"] - bid_order_dict["traded_quantity"],
            bid_order_dict["quantity_type"])
        if self.tick_exists(
                bid_order_id
        ) and new_bid_quantity <= self.get_tick(bid_order_id).quantity:
            tick = self.get_tick(bid_order_id)
            tick.quantity = new_bid_quantity
            if unreserve:
                tick.release_for_matching(traded_quantity)
            if tick.quantity == Quantity(0, bid_order_dict["quantity_type"]):
                self.remove_tick(tick.order_id)
                self.completed_orders.append(tick.order_id)
        elif not self.tick_exists(
                bid_order_id) and new_bid_quantity > Quantity(
                    0, bid_order_dict["quantity_type"]):
            bid = Bid(
                bid_order_id,
                Price(bid_order_dict["price"], bid_order_dict["price_type"]),
                new_bid_quantity, Timeout(bid_order_dict["timeout"]),
                Timestamp(bid_order_dict["timestamp"]))
            self.insert_bid(bid)
Beispiel #17
0
 def next_identity(self):
     """
     :rtype: OrderId
     """
     self._next_id += 1
     return OrderId(TraderId(self._mid), OrderNumber(self._next_id))
Beispiel #18
0
 def from_unpack_list(cls, trader_id, timestamp, match_id, quantity):
     return AcceptMatchPayload(TraderId(trader_id), Timestamp(timestamp),
                               match_id, quantity)
Beispiel #19
0
 def setUp(self):
     # Object creation
     self.order_id = OrderId(TraderId("0"), OrderNumber(1))
     self.order_id2 = OrderId(TraderId("0"), OrderNumber(1))
     self.order_id3 = OrderId(TraderId("0"), OrderNumber(2))
Beispiel #20
0
 def from_unpack_list(cls, trader_id, timestamp, match_id, decline_reason):
     return DeclineMatchPayload(TraderId(trader_id), Timestamp(timestamp),
                                match_id, decline_reason)
    def setUp(self, annotate=True):
        yield super(PriceTimeStrategyTestSuite, self).setUp(annotate=annotate)
        # Object creation
        self.ask = Ask(MessageId(TraderId('0'), MessageNumber('1')),
                       OrderId(TraderId('0'), OrderNumber(1)),
                       Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(100),
                       Timestamp.now())
        self.ask2 = Ask(MessageId(TraderId('1'), MessageNumber('1')),
                        OrderId(TraderId('1'), OrderNumber(2)),
                        Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(100),
                        Timestamp.now())
        self.ask3 = Ask(MessageId(TraderId('3'), MessageNumber('1')),
                        OrderId(TraderId('0'), OrderNumber(3)),
                        Price(200, 'BTC'), Quantity(200, 'MC'), Timeout(100),
                        Timestamp.now())
        self.ask4 = Ask(MessageId(TraderId('4'), MessageNumber('1')),
                        OrderId(TraderId('1'), OrderNumber(4)),
                        Price(50, 'BTC'), Quantity(200, 'MC'), Timeout(100),
                        Timestamp.now())
        self.ask5 = Ask(MessageId(TraderId('4'), MessageNumber('1')),
                        OrderId(TraderId('1'), OrderNumber(4)),
                        Price(100, 'A'), Quantity(30, 'MC'), Timeout(100),
                        Timestamp.now())
        self.ask6 = Ask(MessageId(TraderId('4'), MessageNumber('1')),
                        OrderId(TraderId('1'), OrderNumber(4)),
                        Price(100, 'BTC'), Quantity(30, 'A'), Timeout(100),
                        Timestamp.now())

        self.bid = Bid(MessageId(TraderId('5'), MessageNumber('2')),
                       OrderId(TraderId('0'), OrderNumber(5)),
                       Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(100),
                       Timestamp.now())
        self.bid2 = Bid(MessageId(TraderId('6'), MessageNumber('2')),
                        OrderId(TraderId('0'), OrderNumber(6)),
                        Price(200, 'BTC'), Quantity(30, 'MC'), Timeout(100),
                        Timestamp.now())
        self.bid3 = Bid(MessageId(TraderId('7'), MessageNumber('2')),
                        OrderId(TraderId('0'), OrderNumber(7)),
                        Price(50, 'BTC'), Quantity(200, 'MC'), Timeout(100),
                        Timestamp.now())
        self.bid4 = Bid(MessageId(TraderId('8'), MessageNumber('2')),
                        OrderId(TraderId('0'), OrderNumber(8)),
                        Price(100, 'BTC'), Quantity(200, 'MC'), Timeout(100),
                        Timestamp.now())

        self.ask_order = Order(OrderId(TraderId('9'), OrderNumber(11)),
                               Price(100, 'BTC'), Quantity(30, 'MC'),
                               Timeout(100), Timestamp.now(), True)
        self.ask_order2 = Order(OrderId(TraderId('9'), OrderNumber(12)),
                                Price(10, 'BTC'), Quantity(60, 'MC'),
                                Timeout(100), Timestamp.now(), True)

        self.bid_order = Order(OrderId(TraderId('9'), OrderNumber(13)),
                               Price(100, 'BTC'), Quantity(30, 'MC'),
                               Timeout(100), Timestamp.now(), False)
        self.bid_order2 = Order(OrderId(TraderId('9'), OrderNumber(14)),
                                Price(100, 'BTC'), Quantity(60, 'MC'),
                                Timeout(100), Timestamp.now(), False)
        self.order_book = OrderBook(MemoryMessageRepository('0'))
        self.price_time_strategy = PriceTimeStrategy(self.order_book)
Beispiel #22
0
 def from_unpack_list(cls, trader_id, timestamp, order_trader_id,
                      order_number, identifier):
     return OrderStatusRequestPayload(
         TraderId(trader_id), Timestamp(timestamp),
         OrderId(TraderId(order_trader_id), OrderNumber(order_number)),
         identifier)
Beispiel #23
0
 def test_properties(self):
     # Test for properties
     self.assertEqual(TraderId('0'), self.message_id.trader_id)
Beispiel #24
0
 def from_unpack_list(cls, trader_id, timestamp, bf_functions, bf_prefix,
                      bf_bytes):
     bloomfilter = BloomFilter(bf_bytes, bf_functions, prefix=bf_prefix)
     return OrderbookSyncPayload(TraderId(trader_id), timestamp,
                                 bloomfilter)
Beispiel #25
0
 def test_next_identity(self):
     # Test for next identity
     self.assertEquals(TransactionId(TraderId(b"0"), TransactionNumber(1)),
                       self.memory_transaction_repository.next_identity())
     self.assertEquals(TransactionId(TraderId(b"0"), TransactionNumber(2)),
                       self.memory_transaction_repository.next_identity())
Beispiel #26
0
 def from_unpack_list(cls, trader_id, timestamp, is_matchmaker):
     return InfoPayload(TraderId(trader_id), timestamp, is_matchmaker)
Beispiel #27
0
 def setUp(self):
     # Object creation
     self.trader_id = TraderId('0')
     self.trader_id2 = TraderId('0')
     self.trader_id3 = TraderId('1')
Beispiel #28
0
 def from_unpack_list(cls, trader_id, timestamp, identifier):
     return PingPongPayload(TraderId(trader_id), timestamp, identifier)
Beispiel #29
0
 def setUp(self):
     # Object creation
     self.trader_id = TraderId(b'0')
     self.trader_id2 = TraderId(b'0')
     self.trader_id3 = TraderId(b'1')
Beispiel #30
0
 def test_next_identity(self):
     # Test for next identity
     self.assertEquals(OrderId(TraderId("0"), OrderNumber(1)),
                       self.memory_order_repository.next_identity())