def test_equal_messages_have_equal_hash(self): message = NdaxOrderBookMessage( message_type=OrderBookMessageType.SNAPSHOT, content={"data": []}, timestamp=10000000) equal_message = NdaxOrderBookMessage( message_type=OrderBookMessageType.SNAPSHOT, content={"data": []}, timestamp=10000000) self.assertEqual(hash(message), hash(equal_message))
def trade_message_from_exchange(cls, msg: Dict[str, Any], timestamp: Optional[float] = None, metadata: Optional[Dict] = None): """ Convert a trade data into standard OrderBookMessage format :param msg: json trade data from live web socket stream :param timestamp: timestamp attached to incoming data :return: NdaxOrderBookMessage """ if metadata: msg.update(metadata) # Data fields are obtained from OrderTradeEvents msg.update({ "exchange_order_id": msg.get("TradeId"), "trade_type": msg.get("Side"), "price": msg.get("Price"), "amount": msg.get("Quantity"), }) return NdaxOrderBookMessage(message_type=OrderBookMessageType.TRADE, content=msg, timestamp=timestamp)
def diff_message_from_db(cls, record: RowProxy, metadata: Optional[Dict] = None): """ *used for backtesting Convert a row of diff data into standard OrderBookMessage format :param record: a row of diff data from the database :return: NdaxOrderBookMessage """ return NdaxOrderBookMessage(message_type=OrderBookMessageType.DIFF, content=record.json, timestamp=record.timestamp)
def test_equality_based_on_type_and_timestamp(self): message = NdaxOrderBookMessage( message_type=OrderBookMessageType.SNAPSHOT, content={"data": []}, timestamp=10000000) equal_message = NdaxOrderBookMessage( message_type=OrderBookMessageType.SNAPSHOT, content={"data": []}, timestamp=10000000) message_with_different_type = NdaxOrderBookMessage( message_type=OrderBookMessageType.DIFF, content={"data": []}, timestamp=10000000) message_with_different_timestamp = NdaxOrderBookMessage( message_type=OrderBookMessageType.SNAPSHOT, content={"data": []}, timestamp=90000000) self.assertEqual(message, message) self.assertEqual(message, equal_message) self.assertNotEqual(message, message_with_different_type) self.assertNotEqual(message, message_with_different_timestamp)
def diff_message_from_exchange(cls, msg: Dict[str, any], timestamp: Optional[float] = None, metadata: Optional[Dict] = None): """ Convert json diff data into standard OrderBookMessage format :param msg: json diff data from live web socket stream :param timestamp: timestamp attached to incoming data :return: NdaxOrderBookMessage """ if metadata: msg.update(metadata) return NdaxOrderBookMessage(message_type=OrderBookMessageType.DIFF, content=msg, timestamp=timestamp)
def test_delete_sell_order_book_entry_always_has_zero_amount(self): entries = [ NdaxOrderBookEntry(mdUpdateId=1, accountId=1, actionDateTime=1627935956059, actionType=2, lastTradePrice=42211.51, orderId=1, price=41508.19, productPairCode=5, quantity=1.5, side=1) ] content = {"data": entries} message = NdaxOrderBookMessage(message_type=OrderBookMessageType.DIFF, content=content, timestamp=time.time()) asks = message.asks self.assertEqual(1, len(asks)) self.assertEqual(41508.19, asks[0].price) self.assertEqual(0.0, asks[0].amount) self.assertEqual(1, asks[0].update_id)