From c112b84d0f838d10b2f38e143bc124544908eaae Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 16 Dec 2024 21:32:39 +0100 Subject: [PATCH] feat: support dynamic proxy coin conversion --- freqtrade/exchange/binance.py | 4 ++++ freqtrade/exchange/exchange.py | 4 ++++ freqtrade/exchange/exchange_types.py | 2 ++ 3 files changed, 10 insertions(+) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 74a37b4f6..9ac1b0d97 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -48,6 +48,10 @@ class Binance(Exchange): PriceType.MARK: "MARK_PRICE", }, "ws_enabled": False, + "proxy_coin_mapping": { + "BNFCR": "USDC", + "BFUSD": "USDT", + }, } _supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [ diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index bba6c5aaf..932d74922 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -156,6 +156,7 @@ class Exchange: # Override createMarketBuyOrderRequiresPrice where ccxt has it wrong "marketOrderRequiresPrice": False, "exchange_has_overrides": {}, # Dictionary overriding ccxt's "has". + "proxy_coin_mapping": {}, # Mapping for proxy coins # Expected to be in the format {"fetchOHLCV": True} or {"fetchOHLCV": False} "ws_enabled": False, # Set to true for exchanges with tested websocket support } @@ -1872,6 +1873,9 @@ class Exchange: :returns: Conversion rate from coin to currency :raises: ExchangeErrors """ + + if (proxy_coin := self._ft_has["proxy_coin_mapping"].get(coin, None)) is not None: + coin = proxy_coin if coin == currency: return 1.0 tickers = self.get_tickers(cached=True) diff --git a/freqtrade/exchange/exchange_types.py b/freqtrade/exchange/exchange_types.py index 69741dc65..9687057bd 100644 --- a/freqtrade/exchange/exchange_types.py +++ b/freqtrade/exchange/exchange_types.py @@ -47,6 +47,8 @@ class FtHas(TypedDict, total=False): needs_trading_fees: bool order_props_in_contracts: list[Literal["amount", "cost", "filled", "remaining"]] + proxy_coin_mapping: dict[str, str] + # Websocket control ws_enabled: bool