From 5743b3a0b756d22a544db30ac0b0ac1c1074b3c4 Mon Sep 17 00:00:00 2001 From: Wade Dyck Date: Mon, 27 Dec 2021 13:29:25 -0700 Subject: [PATCH 1/3] When getting analyzed dataframes, use candle_type_def in the pair_key as that's how they're cached. --- freqtrade/data/dataprovider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index 12b02f744..3d0ca45d5 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -134,7 +134,7 @@ class DataProvider: combination. Returns empty dataframe and Epoch 0 (1970-01-01) if no dataframe was cached. """ - pair_key = (pair, timeframe, CandleType.SPOT) + pair_key = (pair, timeframe, self._config.get('candle_type_def', CandleType.SPOT)) if pair_key in self.__cached_pairs: if self.runmode in (RunMode.DRY_RUN, RunMode.LIVE): df, date = self.__cached_pairs[pair_key] From a26c82b7cc418a443036b46d2a57e36dd808246c Mon Sep 17 00:00:00 2001 From: Wade Dyck Date: Mon, 27 Dec 2021 16:51:02 -0700 Subject: [PATCH 2/3] Also check candle_type_def when creating the pairlist and getting the ohlcv. --- freqtrade/plugins/pairlistmanager.py | 8 +++++++- freqtrade/strategy/interface.py | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/freqtrade/plugins/pairlistmanager.py b/freqtrade/plugins/pairlistmanager.py index 5ae9a7e35..6a67e7dd5 100644 --- a/freqtrade/plugins/pairlistmanager.py +++ b/freqtrade/plugins/pairlistmanager.py @@ -139,4 +139,10 @@ class PairListManager(): """ Create list of pair tuples with (pair, timeframe) """ - return [(pair, timeframe or self._config['timeframe'], CandleType.SPOT) for pair in pairs] + return [ + ( + pair, + timeframe or self._config['timeframe'], + self._config.get('candle_type_def', CandleType.SPOT) + ) for pair in pairs + ] diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 56d717064..5cd12144a 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -564,7 +564,9 @@ class IStrategy(ABC, HyperStrategyMixin): """ if not self.dp: raise OperationalException("DataProvider not found.") - dataframe = self.dp.ohlcv(pair, self.timeframe) + dataframe = self.dp.ohlcv( + pair, self.timeframe, candle_type=self.config.get('candle_type_def', CandleType.SPOT) + ) if not isinstance(dataframe, DataFrame) or dataframe.empty: logger.warning('Empty candle (OHLCV) data for pair %s', pair) return From 60dfadf44642005c23dc707a543623facfa30719 Mon Sep 17 00:00:00 2001 From: Wade Dyck Date: Mon, 27 Dec 2021 16:51:47 -0700 Subject: [PATCH 3/3] Don't attempt to calculate funding fees when the initial timeframe hasn't been exceeded. --- freqtrade/exchange/exchange.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 0817df0fc..24c2de497 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1865,8 +1865,9 @@ class Exchange: mark_rates = candle_histories[mark_comb] df = funding_rates.merge(mark_rates, on='date', how="inner", suffixes=["_fund", "_mark"]) - df = df[(df['date'] >= open_date) & (df['date'] <= close_date)] - fees = sum(df['open_fund'] * df['open_mark'] * amount) + if not df.empty: + df = df[(df['date'] >= open_date) & (df['date'] <= close_date)] + fees = sum(df['open_fund'] * df['open_mark'] * amount) return fees