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__())
def test_next_identity(self): # Test for next identity self.assertEquals(MessageId(TraderId('0'), MessageNumber('1')), self.memory_message_repository.next_identity())
def test_init(self): # Test for init validation with self.assertRaises(ValueError): TraderId(1.0) with self.assertRaises(ValueError): TraderId('non hexadecimal')
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))
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)
def next_identity(self): """ :rtype OrderId """ return OrderId(TraderId(self._mid), OrderNumber(self.persistence.get_next_order_number()))
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)
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'))
def setUp(self): # Object creation self.cancel_order_payload = CancelOrderPayload.Implementation( MetaObject(), TraderId('0'), MessageNumber('message_number'), Timestamp.now(), OrderNumber(1), Ttl(2))
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))
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))
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)
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())
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')))
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)
def next_identity(self): """ :rtype: OrderId """ self._next_id += 1 return OrderId(TraderId(self._mid), OrderNumber(self._next_id))
def from_unpack_list(cls, trader_id, timestamp, match_id, quantity): return AcceptMatchPayload(TraderId(trader_id), Timestamp(timestamp), match_id, quantity)
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))
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)
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)
def test_properties(self): # Test for properties self.assertEqual(TraderId('0'), self.message_id.trader_id)
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)
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())
def from_unpack_list(cls, trader_id, timestamp, is_matchmaker): return InfoPayload(TraderId(trader_id), timestamp, is_matchmaker)
def setUp(self): # Object creation self.trader_id = TraderId('0') self.trader_id2 = TraderId('0') self.trader_id3 = TraderId('1')
def from_unpack_list(cls, trader_id, timestamp, identifier): return PingPongPayload(TraderId(trader_id), timestamp, identifier)
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_next_identity(self): # Test for next identity self.assertEquals(OrderId(TraderId("0"), OrderNumber(1)), self.memory_order_repository.next_identity())