|
23 | 23 | BAD_EXCHANGES, |
24 | 24 | EXCHANGE_HAS_OPTIONAL, |
25 | 25 | EXCHANGE_HAS_REQUIRED, |
| 26 | + MAP_EXCHANGE_CHILDCLASS, |
26 | 27 | SUPPORTED_EXCHANGES, |
27 | 28 | ) |
28 | 29 | from freqtrade.exchange.exchange_utils_timeframe import timeframe_to_minutes, timeframe_to_prev_date |
@@ -91,21 +92,24 @@ def validate_exchange(exchange: str) -> tuple[bool, str, ccxt.Exchange | None]: |
91 | 92 | def _build_exchange_list_entry( |
92 | 93 | exchange_name: str, exchangeClasses: dict[str, Any] |
93 | 94 | ) -> ValidExchangesType: |
| 95 | + exchange_name = exchange_name.lower() |
94 | 96 | valid, comment, ex_mod = validate_exchange(exchange_name) |
| 97 | + mapped_exchange_name = MAP_EXCHANGE_CHILDCLASS.get(exchange_name, exchange_name).lower() |
| 98 | + is_alias = getattr(ex_mod, "alias", False) |
95 | 99 | result: ValidExchangesType = { |
96 | 100 | "name": getattr(ex_mod, "name", exchange_name), |
97 | 101 | "classname": exchange_name, |
98 | 102 | "valid": valid, |
99 | | - "supported": exchange_name.lower() in SUPPORTED_EXCHANGES, |
| 103 | + "supported": mapped_exchange_name in SUPPORTED_EXCHANGES and not is_alias, |
100 | 104 | "comment": comment, |
101 | 105 | "dex": getattr(ex_mod, "dex", False), |
102 | | - "is_alias": getattr(ex_mod, "alias", False), |
| 106 | + "is_alias": is_alias, |
103 | 107 | "alias_for": inspect.getmro(ex_mod.__class__)[1]().id |
104 | 108 | if getattr(ex_mod, "alias", False) |
105 | 109 | else None, |
106 | 110 | "trade_modes": [{"trading_mode": "spot", "margin_mode": ""}], |
107 | 111 | } |
108 | | - if resolved := exchangeClasses.get(exchange_name.lower()): |
| 112 | + if resolved := exchangeClasses.get(mapped_exchange_name): |
109 | 113 | supported_modes = [{"trading_mode": "spot", "margin_mode": ""}] + [ |
110 | 114 | {"trading_mode": tm.value, "margin_mode": mm.value} |
111 | 115 | for tm, mm in resolved["class"]._supported_trading_mode_margin_pairs |
|
0 commit comments