From 2bb111605c9daed19ae61200eb3b9cfb4dd31c35 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 26 Nov 2024 20:06:28 +0100 Subject: [PATCH] feat: update rpc_balance to fetch spot tickers Happens if there is no market for the given pair --- freqtrade/rpc/rpc.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index afa8baea2..d4c05d2d2 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -7,7 +7,7 @@ from abc import abstractmethod from collections.abc import Generator, Sequence from datetime import date, datetime, timedelta, timezone from math import isnan -from typing import Any, cast +from typing import Any import psutil from dateutil.relativedelta import relativedelta @@ -682,12 +682,23 @@ class RPC: est_bot_stake = amount else: pair = self._freqtrade.exchange.get_valid_pair_combination(coin, stake_currency) - rate: float | None = cast(Ticker, tickers.get(pair, {})).get("last", None) - if rate: - if pair.startswith(stake_currency) and not pair.endswith(stake_currency): - rate = 1.0 / rate - est_stake = rate * balance.total - est_bot_stake = rate * amount + 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 pair.startswith(stake_currency) and not pair.endswith(stake_currency): + rate = 1.0 / rate + est_stake = rate * balance.total + est_bot_stake = rate * amount return est_stake, est_bot_stake