From 246891a8f6f7fba22b378fef17fb533132a98c5c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 6 Sep 2025 09:16:03 +0200 Subject: [PATCH] feat: limit downloadable funding rates to funding rate interval Limit using wrong funding-rate timeframes, which can cause wrong information and assumptions in the strategy Part of #12206 --- freqtrade/exchange/exchange.py | 13 +++++++++---- tests/exchange/test_exchange.py | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e3fbde459..ee28f9f9e 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2566,13 +2566,18 @@ class Exchange: input_coroutines: list[Coroutine[Any, Any, OHLCVResponse]] = [] cached_pairs = [] for pair, timeframe, candle_type in set(pair_list): - if timeframe not in self.timeframes and candle_type in ( + invalid_funding = ( + candle_type == CandleType.FUNDING_RATE + and timeframe != self.get_option("funding_fee_timeframe") + ) + invalid_timeframe = timeframe not in self.timeframes and candle_type in ( CandleType.SPOT, CandleType.FUTURES, - ): + ) + if invalid_timeframe or invalid_funding: logger.warning( - f"Cannot download ({pair}, {timeframe}) combination as this timeframe is " - f"not available on {self.name}. Available timeframes are " + f"Cannot download ({pair}, {timeframe}, {candle_type}) combination as this " + f"timeframe is not available on {self.name}. Available timeframes are " f"{', '.join(self.timeframes)}." ) continue diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index bf7f6350a..fe7e77c42 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2335,7 +2335,7 @@ def test_refresh_latest_ohlcv(mocker, default_conf_usdt, caplog, candle_type) -> if candle_type != CandleType.MARK: assert not res assert len(res) == 0 - assert log_has_re(r"Cannot download \(IOTA\/USDT, 3m\).*", caplog) + assert log_has_re(r"Cannot download \(IOTA\/USDT, 3m, \S+\).*", caplog) else: assert len(res) == 1