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
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