diff --git a/freqtrade/exchange/check_exchange.py b/freqtrade/exchange/check_exchange.py index 583868744..d6ed44f66 100644 --- a/freqtrade/exchange/check_exchange.py +++ b/freqtrade/exchange/check_exchange.py @@ -1,15 +1,30 @@ import logging +from typing import Any from freqtrade.constants import Config from freqtrade.enums import RunMode from freqtrade.exceptions import OperationalException from freqtrade.exchange import available_exchanges, is_exchange_known_ccxt, validate_exchange from freqtrade.exchange.common import MAP_EXCHANGE_CHILDCLASS, SUPPORTED_EXCHANGES +from freqtrade.resolvers.exchange_resolver import ExchangeResolver 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: """ 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())}" ) - 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 check_for_bad: raise OperationalException( @@ -72,3 +88,4 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool: ) return True +