Example #1
0
 def rate(self, pair: str) -> Decimal:
     """
     Finds a conversion rate for a given symbol, this can be direct or indirect prices as long as it can find a route
     to achieve this.
     :param pair: A trading pair, e.g. BTC-USDT
     :return A conversion rate
     """
     return find_rate(self._known_rates, pair)
Example #2
0
 async def rate_async(cls, pair: str) -> Decimal:
     """
     Finds a conversion rate in an async operation, it is a class method which can be used directly without having to
     start the RateOracle network.
     :param pair: A trading pair, e.g. BTC-USDT
     :return A conversion rate
     """
     prices = await cls.get_prices()
     return find_rate(prices, pair)
Example #3
0
 async def global_rate(cls, token: str) -> Decimal:
     """
     Finds a conversion rate of a given token to a global token
     :param token: A token symbol, e.g. BTC
     :return A conversion rate
     """
     prices = await cls.get_prices()
     pair = token + "-" + cls.global_token
     return find_rate(prices, pair)
 def test_find_rate(self):
     prices = {"HBOT-USDT": Decimal("100"), "AAVE-USDT": Decimal("50"), "USDT-GBP": Decimal("0.75")}
     rate = find_rate(prices, "HBOT-USDT")
     self.assertEqual(rate, Decimal("100"))
     rate = find_rate(prices, "ZBOT-USDT")
     self.assertEqual(rate, None)
     rate = find_rate(prices, "USDT-HBOT")
     self.assertEqual(rate, Decimal("0.01"))
     rate = find_rate(prices, "HBOT-AAVE")
     self.assertEqual(rate, Decimal("2"))
     rate = find_rate(prices, "AAVE-HBOT")
     self.assertEqual(rate, Decimal("0.5"))
     rate = find_rate(prices, "HBOT-GBP")
     self.assertEqual(rate, Decimal("75"))