diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index f3395c09c..1aead0b4a 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1819,9 +1819,12 @@ class Exchange: return fees - def get_funding_rate_history(self, pair: str, start: int, end: int): + def get_funding_rate_history( + self, + start: int, + end: int + ) -> Dict: ''' - :param pair: quote/base currency pair :param start: timestamp in ms of the beginning time :param end: timestamp in ms of the end time ''' @@ -1832,12 +1835,21 @@ class Exchange: ) try: - fund_history = self._api.fetch_funding_rate_history( - pair, - since=start, - ) - for fund in fund_history: - self.funding_rate_history[pair][fund['timestamp']] = fund['funding_rate'] + funding_history: Dict = {} + for pair, market in self.markets.items(): + if market['swap']: + response = self._api.fetch_funding_rate_history( + pair, + limit=1000, + since=start, + params={ + 'endTime': end + } + ) + funding_history[pair] = {} + for fund in response: + funding_history[pair][fund['timestamp']] = fund['funding_rate'] + return funding_history except ccxt.DDoSProtection as e: raise DDosProtection(e) from e except (ccxt.NetworkError, ccxt.ExchangeError) as e: diff --git a/freqtrade/exchange/gateio.py b/freqtrade/exchange/gateio.py index 33006d4a5..f025ed4dd 100644 --- a/freqtrade/exchange/gateio.py +++ b/freqtrade/exchange/gateio.py @@ -33,3 +33,15 @@ class Gateio(Exchange): if any(v == 'market' for k, v in order_types.items()): raise OperationalException( f'Exchange {self.name} does not support market orders.') + + def get_funding_rate_history( + self, + start: int, + end: int + ) -> Dict: + ''' + :param start: timestamp in ms of the beginning time + :param end: timestamp in ms of the end time + ''' + # TODO-lev: Has a max limit into the past of 333 days + return super().get_funding_rate_history(start, end) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index aaf875a94..a5f63c396 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -3,6 +3,7 @@ """ This module contains the backtesting logic """ +import ccxt import logging from collections import defaultdict from copy import deepcopy @@ -125,6 +126,11 @@ class Backtesting: self.progress = BTProgress() self.abort = False + + self.funding_rate_history = getattr(ccxt, self._exchange_name).load_funding_rate_history( + self.timerange.startts, + self.timerange.stopts + ) self.init_backtest() def __del__(self):