mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-12-16 04:41:15 +00:00
refactor: conversation rate retrieval to exchange class
for better reusability across the bot.
This commit is contained in:
@@ -1855,7 +1855,36 @@ class Exchange:
|
|||||||
except ccxt.BaseError as e:
|
except ccxt.BaseError as e:
|
||||||
raise OperationalException(e) from e
|
raise OperationalException(e) from e
|
||||||
|
|
||||||
# Pricing info
|
def get_conversion_rate(self, coin: str, currency: str) -> float:
|
||||||
|
"""
|
||||||
|
Quick and cached way to get conversion rate one currency to the other.
|
||||||
|
Can then be used as "rate * amount" to convert between currencies.
|
||||||
|
:param coin: Coin to convert
|
||||||
|
:param currency: Currency to convert to
|
||||||
|
:returns: Conversion rate from coin to currency
|
||||||
|
:raises: ExchangeErrors
|
||||||
|
"""
|
||||||
|
if coin == currency:
|
||||||
|
return 1.0
|
||||||
|
tickers = self.get_tickers(cached=True)
|
||||||
|
pair = self.get_valid_pair_combination(coin, currency)
|
||||||
|
ticker: Ticker | None = tickers.get(pair, None)
|
||||||
|
if not ticker:
|
||||||
|
tickers_other: Tickers = self.get_tickers(
|
||||||
|
cached=True,
|
||||||
|
market_type=(
|
||||||
|
TradingMode.SPOT
|
||||||
|
if self.trading_mode != TradingMode.SPOT
|
||||||
|
else TradingMode.FUTURES
|
||||||
|
),
|
||||||
|
)
|
||||||
|
ticker = tickers_other.get(pair, None)
|
||||||
|
if ticker:
|
||||||
|
rate: float | None = ticker.get("last", None)
|
||||||
|
if rate and pair.startswith(currency) and not pair.endswith(currency):
|
||||||
|
rate = 1.0 / rate
|
||||||
|
return rate
|
||||||
|
return None
|
||||||
|
|
||||||
@retrier
|
@retrier
|
||||||
def fetch_ticker(self, pair: str) -> Ticker:
|
def fetch_ticker(self, pair: str) -> Ticker:
|
||||||
|
|||||||
@@ -687,23 +687,10 @@ class RPC:
|
|||||||
est_bot_stake = amount
|
est_bot_stake = amount
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
tickers: Tickers = self._freqtrade.exchange.get_tickers(cached=True)
|
rate: float | None = self._freqtrade.exchange.get_conversion_rate(
|
||||||
pair = self._freqtrade.exchange.get_valid_pair_combination(coin, stake_currency)
|
coin, stake_currency
|
||||||
ticker: Ticker | None = tickers.get(pair, None)
|
|
||||||
if not ticker:
|
|
||||||
tickers_spot: Tickers = self._freqtrade.exchange.get_tickers(
|
|
||||||
cached=True,
|
|
||||||
market_type=TradingMode.SPOT
|
|
||||||
if self._config.get("trading_mode", TradingMode.SPOT) != TradingMode.SPOT
|
|
||||||
else TradingMode.FUTURES,
|
|
||||||
)
|
)
|
||||||
ticker = tickers_spot.get(pair, None)
|
|
||||||
|
|
||||||
if ticker:
|
|
||||||
rate: float | None = ticker.get("last", None)
|
|
||||||
if rate:
|
if rate:
|
||||||
if pair.startswith(stake_currency) and not pair.endswith(stake_currency):
|
|
||||||
rate = 1.0 / rate
|
|
||||||
est_stake = rate * balance.total
|
est_stake = rate * balance.total
|
||||||
est_bot_stake = rate * amount
|
est_bot_stake = rate * amount
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user