Пример #1
0
    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))
Пример #2
0
    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)
Пример #3
0
 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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)