feat(exchange): apply ft_has overrides in check_exchange

This commit is contained in:
matstedt
2026-01-11 12:59:19 +01:00
committed by Matthias
parent 271ee6d36e
commit 51588c2ef1
+18 -1
View File
@@ -1,15 +1,30 @@
import logging import logging
from typing import Any
from freqtrade.constants import Config from freqtrade.constants import Config
from freqtrade.enums import RunMode from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException from freqtrade.exceptions import OperationalException
from freqtrade.exchange import available_exchanges, is_exchange_known_ccxt, validate_exchange from freqtrade.exchange import available_exchanges, is_exchange_known_ccxt, validate_exchange
from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS, SUPPORTED_EXCHANGES from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS, SUPPORTED_EXCHANGES
from freqtrade.resolvers.exchange_resolver import ExchangeResolver
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def _get_ft_has_overrides(exchange_name: str) -> dict[str, Any] | None:
subclassed = {e["name"].lower(): e for e in ExchangeResolver.search_all_objects({}, False)}
mapped = MAP_EXCHANGE_CHILDCLASS.get(exchange_name.lower(), exchange_name.lower()).lower()
resolved = subclassed.get(mapped)
if not resolved:
return None
get_ft_has = getattr(resolved["class"], "get_ft_has", None)
if callable(get_ft_has):
return get_ft_has() or None
return None
def check_exchange(config: Config, check_for_bad: bool = True) -> bool: def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
""" """
Check if the exchange name in the config file is supported by Freqtrade Check if the exchange name in the config file is supported by Freqtrade
@@ -47,7 +62,8 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
f"{', '.join(available_exchanges())}" f"{', '.join(available_exchanges())}"
) )
valid, reason, _, _ = validate_exchange(exchange) ft_has_overrides = _get_ft_has_overrides(exchange)
valid, reason, _, _ = validate_exchange(exchange, ft_has_overrides)
if not valid: if not valid:
if check_for_bad: if check_for_bad:
raise OperationalException( raise OperationalException(
@@ -72,3 +88,4 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
) )
return True return True