def setUp(self): # Object creation tick = Tick(OrderId(TraderId('0'), OrderNumber(1)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(float("inf")), Timestamp(float("inf")), True) tick2 = Tick(OrderId(TraderId('0'), OrderNumber(2)), Price(30, 'MC'), Quantity(30, 'BTC'), Timeout(float("inf")), Timestamp(float("inf")), True) self.price_level = PriceLevel('MC') self.tick_entry1 = TickEntry(tick, self.price_level) self.tick_entry2 = TickEntry(tick, self.price_level) self.tick_entry3 = TickEntry(tick, self.price_level) self.tick_entry4 = TickEntry(tick, self.price_level) self.tick_entry5 = TickEntry(tick2, self.price_level)
def setUp(self): # Object creation self.timestamp_now = Timestamp.now() self.tick = Tick(OrderId(TraderId('0'), OrderNumber(1)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(30), self.timestamp_now, True) self.tick2 = Tick(OrderId(TraderId('0'), OrderNumber(2)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(0.0), Timestamp(0.0), False) self.order_ask = Order(OrderId(TraderId('0'), OrderNumber(2)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(0.0), Timestamp(0.0), True) self.order_bid = Order(OrderId(TraderId('0'), OrderNumber(2)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(0.0), Timestamp(0.0), False)
def setUp(self, annotate=True): yield super(TickEntryTestSuite, self).setUp(annotate=annotate) # Object creation tick = Tick(OrderId(TraderId('0'), OrderNumber(1)), AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')), Timeout(0), Timestamp(0.0), True) tick2 = Tick( OrderId(TraderId('0'), OrderNumber(2)), AssetPair(AssetAmount(63400, 'BTC'), AssetAmount(30, 'MB')), Timeout(100), Timestamp.now(), True) self.price_level = PriceLevel(Price(100, 'MB', 'BTC')) self.tick_entry = TickEntry(tick, self.price_level) self.tick_entry2 = TickEntry(tick2, self.price_level)
def test_to_network(self): # Test for to network self.assertEquals( (MessageId(TraderId('0'), MessageNumber(1)), self.tick.timestamp, OrderNumber(1), Price(63400, 'BTC'), Quantity( 30, 'MC'), self.tick.timeout), self.tick.to_network(MessageId(TraderId('0'), MessageNumber(1))))
def setUp(self): # Object creation self.offer_payload = OfferPayload.Implementation( MetaObject(), TraderId('0'), MessageNumber('message_number'), OrderNumber(1), Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(1470004447.117), Timestamp(1462224447.117), 'a', 'b', Ttl(2), "1.1.1.1", 1)
def render_POST(self, request): """ .. http:get:: /market/orders/(string:order_number)/cancel A POST request to this endpoint will cancel a specific order. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/market/orders/3/cancel **Example response**: .. sourcecode:: javascript { "cancelled": True } """ market_community = self.get_market_community() order_id = OrderId(TraderId(market_community.mid), OrderNumber(int(self.order_number))) order = market_community.order_manager.order_repository.find_by_id(order_id) if not order: request.setResponseCode(http.NOT_FOUND) return json.dumps({"error": "order not found"}) if order.status != "open" and order.status != "unverified": request.setResponseCode(http.BAD_REQUEST) return json.dumps({"error": "only open and unverified orders can be cancelled"}) market_community.cancel_order(order_id) return json.dumps({"cancelled": True})
def test_from_network(self): # Test for from network now = Timestamp.now() data = Bid.from_network( type( 'Data', (object, ), { "trader_id": TraderId('0'), "order_number": OrderNumber(2), "message_number": MessageNumber('message_number'), "price": Price(63400, 'BTC'), "quantity": Quantity(40, 'MC'), "timeout": Timeout(30), "timestamp": now, "public_key": 'a', "signature": 'b' })) self.assertEquals( MessageId(TraderId('0'), MessageNumber('message_number')), data.message_id) self.assertEquals(Price(63400, 'BTC'), data.price) self.assertEquals(Quantity(40, 'MC'), data.quantity) self.assertEquals(float(Timeout(30)), float(data.timeout)) self.assertEquals(now, data.timestamp) self.assertEquals('a', data._public_key) self.assertEquals('b', data._signature)
def test_to_network(self): # Test for to network self.assertEquals( (TraderId('0'), MessageNumber('message_number'), OrderNumber(1), Price(63400, 'BTC'), Quantity( 30, 'MC'), self.tick.timeout, self.tick.timestamp, 'a', 'b'), self.tick.to_network())
def test_properties(self): # Test for properties self.assertEquals(MessageNumber('message_number'), self.declined_trade_payload.message_number) self.assertEquals(OrderNumber(1), self.declined_trade_payload.order_number) self.assertEquals(OrderNumber(2), self.declined_trade_payload.recipient_order_number) self.assertEquals(TraderId('1'), self.declined_trade_payload.recipient_trader_id) self.assertEquals(Timestamp(1462224447.117), self.declined_trade_payload.timestamp) self.assertEquals(1234, self.declined_trade_payload.proposal_id) self.assertEquals(TraderId('0'), self.declined_trade_payload.trader_id) self.assertEquals(DeclinedTradeReason.ORDER_COMPLETED, self.declined_trade_payload.decline_reason)
def test_has_acceptable_price(self): """ Test the acceptable price method """ order = Order(OrderId(TraderId("0"), OrderNumber(3)), AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')), Timeout(5000), self.order_timestamp, True) pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')) self.assertTrue(order.has_acceptable_price(pair)) pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(15, 'MB')) self.assertFalse(order.has_acceptable_price(pair)) pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(60, 'MB')) self.assertTrue(order.has_acceptable_price(pair)) order._is_ask = False pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')) self.assertTrue(order.has_acceptable_price(pair)) pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(15, 'MB')) self.assertTrue(order.has_acceptable_price(pair)) pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(60, 'MB')) self.assertFalse(order.has_acceptable_price(pair))
def setUp(self): yield super(TestMarketBlock, self).setUp() self.ask = Ask(OrderId(TraderId(b'0' * 40), OrderNumber(1)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp(0.0), True) self.bid = Ask(OrderId(TraderId(b'1' * 40), OrderNumber(1)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp(0.0), False) self.transaction = Transaction(TransactionId(TraderId(b'0' * 40), TransactionNumber(1)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), OrderId(TraderId(b'0' * 40), OrderNumber(1)), OrderId(TraderId(b'1' * 40), OrderNumber(1)), Timestamp(0.0)) ask_tx = self.ask.to_block_dict() bid_tx = self.bid.to_block_dict() self.tick_block = MarketBlock() self.tick_block.type = 'ask' self.tick_block.transaction = {'tick': ask_tx} self.cancel_block = MarketBlock() self.cancel_block.type = 'cancel_order' self.cancel_block.transaction = {'trader_id': 'a' * 40, 'order_number': 1} self.tx_block = MarketBlock() self.tx_block.type = 'tx_init' self.tx_block.transaction = { 'ask': ask_tx, 'bid': bid_tx, 'tx': self.transaction.to_dictionary() } payment = { 'trader_id': 'a' * 40, 'transaction_number': 3, 'transferred': { 'amount': 3, 'type': 'BTC' }, 'payment_id': 'a', 'address_from': 'a', 'address_to': 'b', 'timestamp': 1234.3, 'success': True } self.payment_block = MarketBlock() self.payment_block.type = 'tx_payment' self.payment_block.transaction = {'payment': payment}
def test_get_specific_order(self): """ Test the retrieval of a specific order """ order_id = OrderId(TraderId(b'3'), OrderNumber(4)) self.assertIsNone(self.database.get_order(order_id)) self.database.add_order(self.order1) self.assertIsNotNone(self.database.get_order(order_id))
def create_ask(self, amount1, amount2): """ Create an ask with a specific price and quantity """ new_ask = Ask(OrderId(TraderId(b'2'), OrderNumber(self.ask_count)), AssetPair(AssetAmount(amount1, 'BTC'), AssetAmount(amount2, 'MB')), Timeout(30), Timestamp.now()) self.ask_count += 1 return new_ask
def create_bid(self, amount1, amount2): """ Create a bid with a specific price and quantity """ new_bid = Bid(OrderId(TraderId(b'3'), OrderNumber(self.bid_count)), AssetPair(AssetAmount(amount1, 'BTC'), AssetAmount(amount2, 'MB')), Timeout(30), Timestamp.now()) self.bid_count += 1 return new_bid
def test_add_trade(self): """ Test the add trade method of an order """ self.order.reserve_quantity_for_tick( OrderId(TraderId('5'), OrderNumber(1)), Quantity(10, 'MC')) self.assertEquals(self.order.traded_quantity, Quantity(0, 'MC')) self.order.add_trade(OrderId(TraderId('5'), OrderNumber(1)), Quantity(10, 'MC')) self.assertEquals(self.order.traded_quantity, Quantity(10, 'MC')) self.order.reserve_quantity_for_tick( OrderId(TraderId('6'), OrderNumber(1)), Quantity(20, 'MC')) self.order.add_trade(OrderId(TraderId('6'), OrderNumber(1)), Quantity(20, 'MC')) self.assertTrue(self.order.is_complete()) self.assertFalse(self.order.cancelled)
def setUp(self): # Object creation self.memory_order_repository = MemoryOrderRepository("0") self.order_id = OrderId(TraderId(b"0"), OrderNumber(1)) self.order = Order(self.order_id, AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MC')), Timeout(0), Timestamp(10.0), False) self.order2 = Order(self.order_id, AssetPair(AssetAmount(1000, 'BTC'), AssetAmount(30, 'MC')), Timeout(0), Timestamp(10.0), False)
def from_database(cls, data): trader_id, order_number, price, price_type, quantity, quantity_type, timeout, timestamp,\ is_ask, block_hash = data tick_cls = Ask if is_ask else Bid order_id = OrderId(TraderId(str(trader_id)), OrderNumber(order_number)) return tick_cls(order_id, Price(price, str(price_type)), Quantity(quantity, str(quantity_type)), Timeout(timeout), Timestamp(timestamp), block_hash=str(block_hash))
def add_transaction_and_payment(self): """ Add a transaction and a payment to the market """ proposed_trade = Trade.propose(MessageId(TraderId('0'), MessageNumber('message_number')), OrderId(TraderId('0'), OrderNumber(1)), OrderId(TraderId('1'), OrderNumber(2)), Price(63400, 'BTC'), Quantity(30, 'MC'), Timestamp(1462224447.117)) transaction = self.session.lm.market_community.transaction_manager.create_from_proposed_trade(proposed_trade) payment = Payment(MessageId(TraderId("0"), MessageNumber("1")), transaction.transaction_id, Quantity(0, 'MC'), Price(20, 'BTC'), WalletAddress('a'), WalletAddress('b'), PaymentId('aaa'), Timestamp(4.0), True) transaction.add_payment(payment) self.session.lm.market_community.transaction_manager.transaction_repository.update(transaction) return transaction
def from_unpack_list(cls, trader_id, timestamp, order_number, asset1_amount, asset1_type, asset2_amount, asset2_type, timeout, traded, identifier): return OrderStatusResponsePayload( TraderId(trader_id), Timestamp(timestamp), OrderNumber(order_number), AssetPair(AssetAmount(asset1_amount, asset1_type), AssetAmount(asset2_amount, asset2_type)), Timeout(timeout), traded, identifier)
def setUp(self): yield super(MatchingEngineTestSuite, self).setUp() # Object creation self.ask = Ask(OrderId(TraderId(b'2'), OrderNumber(1)), AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now()) self.bid = Bid(OrderId(TraderId(b'4'), OrderNumber(2)), AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now()) self.ask_order = Order(OrderId(TraderId(b'5'), OrderNumber(3)), AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now(), True) self.bid_order = Order(OrderId(TraderId(b'6'), OrderNumber(4)), AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now(), False) self.order_book = OrderBook() self.matching_engine = MatchingEngine(PriceTimeStrategy(self.order_book)) self.ask_count = 2 self.bid_count = 2
def get_tick_block(return_ask, pair): tick_cls = Ask if return_ask else Bid ask = tick_cls(OrderId(TraderId('0' * 40), OrderNumber(1)), pair, Timeout(3600), Timestamp.now(), return_ask) ask_tx = ask.to_block_dict() ask_tx["address"], ask_tx["port"] = "127.0.0.1", 1337 tick_block = MarketBlock() tick_block.type = 'ask' if return_ask else 'bid' tick_block.transaction = {'tick': ask_tx, 'version': MarketCommunity.PROTOCOL_VERSION} return tick_block
def test_encode_decode_cancel_order(self): """ Test encoding and decoding of a cancel order """ message = MockObject() meta_msg = self.market_community.get_meta_message(u"cancel-order") cancel_order_payload = CancelOrderPayload.Implementation(meta_msg, TraderId('abc'), MessageNumber('3'), Timestamp.now(), OrderNumber(4), Ttl(2)) message.payload = cancel_order_payload packet, = self.conversion._encode_cancel_order(message) self.assertTrue(packet) _, decoded = self.conversion._decode_cancel_order(self.get_placeholder_msg(u"cancel-order"), 0, packet) self.assertTrue(decoded) self.assertEqual(decoded.order_number, OrderNumber(4)) self.assertEqual(int(decoded.ttl), 2)
def get_reserved_ticks(self, order_id): """ Get all reserved ticks for a specific order. """ db_results = self.execute( u"SELECT * FROM orders_reserved_ticks WHERE trader_id = ? AND order_number = ?", (unicode(order_id.trader_id), unicode(order_id.order_number))) return [(OrderId(TraderId(str(data[2])), OrderNumber(data[3])), Quantity(data[4], str(data[5]))) for data in db_results]
def setUp(self): # Object creation self.transaction_id = TransactionId(TraderId("0"), TransactionNumber(1)) self.transaction = Transaction( self.transaction_id, AssetPair(AssetAmount(100, 'BTC'), AssetAmount(100, 'MB')), OrderId(TraderId('3'), OrderNumber(2)), OrderId(TraderId('2'), OrderNumber(1)), Timestamp(0.0)) self.proposed_trade = Trade.propose( TraderId('0'), OrderId(TraderId('0'), OrderNumber(2)), OrderId(TraderId('1'), OrderNumber(3)), AssetPair(AssetAmount(100, 'BTC'), AssetAmount(100, 'MB')), Timestamp(0.0)) self.payment = Payment( TraderId("0"), TransactionId(TraderId('2'), TransactionNumber(2)), AssetAmount(3, 'MB'), WalletAddress('a'), WalletAddress('b'), PaymentId('aaa'), Timestamp(4.0), True)
def test_create_bid_order(self): # Test for create bid order bid_order = self.order_manager.create_bid_order( AssetPair(AssetAmount(100, 'BTC'), AssetAmount(10, 'MC')), Timeout(0)) self.assertFalse(bid_order.is_ask()) self.assertEquals(OrderId(TraderId("0"), OrderNumber(1)), bid_order.order_id) self.assertEquals(AssetPair(AssetAmount(100, 'BTC'), AssetAmount(10, 'MC')), bid_order.assets) self.assertEquals(100, bid_order.total_quantity) self.assertEquals(0, int(bid_order.timeout))
def create_bid(self, price, quantity): """ Create a bid with a specific price and quantity """ new_bid = Bid(OrderId(TraderId('2'), OrderNumber(self.bid_count)), Price(price, 'BTC'), Quantity(quantity, 'MC'), Timeout(30), Timestamp.now()) self.bid_count += 1 return new_bid
def setUp(self, annotate=True): yield super(MatchingEngineTestSuite, self).setUp(annotate=annotate) # Object creation self.ask = Ask(OrderId(TraderId('2'), OrderNumber(1)), Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30), Timestamp.now()) self.bid = Bid(OrderId(TraderId('4'), OrderNumber(2)), Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30), Timestamp.now()) self.ask_order = Order(OrderId(TraderId('5'), OrderNumber(3)), Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30), Timestamp.now(), True) self.bid_order = Order(OrderId(TraderId('6'), OrderNumber(4)), Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30), Timestamp.now(), False) self.order_book = OrderBook() self.matching_engine = MatchingEngine( PriceTimeStrategy(self.order_book))
def test_properties(self): # Test for properties self.assertEquals(Price(63400, 'BTC'), self.proposed_trade_payload.price) self.assertEquals(Quantity(30, 'MC'), self.proposed_trade_payload.quantity) self.assertEquals(MessageNumber('message_number'), self.proposed_trade_payload.message_number) self.assertEquals(OrderNumber(1), self.proposed_trade_payload.order_number) self.assertEquals(OrderNumber(2), self.proposed_trade_payload.recipient_order_number) self.assertEquals(TraderId('1'), self.proposed_trade_payload.recipient_trader_id) self.assertEquals(1235, self.proposed_trade_payload.proposal_id) self.assertEquals(Timestamp(1462224447.117), self.proposed_trade_payload.timestamp) self.assertEquals(TraderId('0'), self.proposed_trade_payload.trader_id)
def test_send_counter_trade(self): """ Test sending a counter trade """ self.market_community.update_ip(TraderId('b'), ('127.0.0.1', 1234)) counter_trade = CounterTrade( MessageId(TraderId('a'), MessageNumber('2')), self.order.order_id, OrderId(TraderId('b'), OrderNumber(3)), 1235, Price(3, 'MC'), Quantity(4, 'BTC'), Timestamp.now()) self.market_community.send_counter_trade(counter_trade)
def setUp(self): # Object creation self.timestamp_now = Timestamp.now() self.tick = Tick( OrderId(TraderId('0'), OrderNumber(1)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp(0.0), True) self.tick2 = Tick( OrderId(TraderId('0'), OrderNumber(2)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(0), Timestamp(0.0), False) self.order_ask = Order( OrderId(TraderId('0'), OrderNumber(2)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(0), Timestamp(0.0), True) self.order_bid = Order( OrderId(TraderId('0'), OrderNumber(2)), AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(0), Timestamp(0.0), False)
class OrderNumberTestSuite(unittest.TestCase): """Order number test cases.""" def setUp(self): # Object creation self.order_number = OrderNumber(1) self.order_number2 = OrderNumber(1) self.order_number3 = OrderNumber(3) def test_init(self): # Test for init validation with self.assertRaises(ValueError): OrderNumber(1.0) def test_equality(self): # Test for equality self.assertEquals(self.order_number, self.order_number) self.assertEquals(self.order_number, self.order_number2) self.assertFalse(self.order_number == self.order_number3) self.assertEquals(NotImplemented, self.order_number.__eq__("")) def test_non_equality(self): # Test for non equality self.assertNotEquals(self.order_number, self.order_number3) def test_hashes(self): # Test for hashes self.assertEquals(self.order_number.__hash__(), self.order_number2.__hash__()) self.assertNotEqual(self.order_number.__hash__(), self.order_number3.__hash__()) def test_str(self): # Test for string representation self.assertEquals('1', str(self.order_number)) def test_int(self): # Test for integer representation self.assertEquals(1, int(self.order_number))
def setUp(self): # Object creation self.order_number = OrderNumber(1) self.order_number2 = OrderNumber(1) self.order_number3 = OrderNumber(3)