From 452e1ab0160c8b681e62c6046b8062d35f374e7e Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 15 Aug 2023 19:43:04 +0200 Subject: [PATCH] get_analyzed_dataframe should provide dataframe with startup candles closes #7389 --- freqtrade/optimize/backtesting.py | 10 ++++++---- tests/optimize/test_backtesting.py | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 4c941ea3a..21390489e 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -369,13 +369,14 @@ class Backtesting: # Cleanup from prior runs pair_data.drop(HEADERS[5:] + ['buy', 'sell'], axis=1, errors='ignore') df_analyzed = self.strategy.ft_advise_signals(pair_data, {'pair': pair}) - # Trim startup period from analyzed dataframe - df_analyzed = processed[pair] = pair_data = trim_dataframe( - df_analyzed, self.timerange, startup_candles=self.required_startup) # Update dataprovider cache self.dataprovider._set_cached_df( pair, self.timeframe, df_analyzed, self.config['candle_type_def']) + # Trim startup period from analyzed dataframe + df_analyzed = processed[pair] = pair_data = trim_dataframe( + df_analyzed, self.timerange, startup_candles=self.required_startup) + # Create a copy of the dataframe before shifting, that way the entry signal/tag # remains on the correct candle for callbacks. df_analyzed = df_analyzed.copy() @@ -1196,7 +1197,8 @@ class Backtesting: row_index += 1 indexes[pair] = row_index - self.dataprovider._set_dataframe_max_index(row_index) + self.dataprovider._set_dataframe_max_index(self.required_startup + row_index) + self.dataprovider._set_dataframe_max_date(current_time) current_detail_time: datetime = row[DATE_IDX].to_pydatetime() trade_dir: Optional[LongShort] = self.check_for_trade_entry(row) diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index 46a1d5d12..ac409bf71 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -1359,11 +1359,11 @@ def test_backtest_multi_pair(default_conf, fee, mocker, tres, pair, testdatadir) # Cached data correctly removed amounts offset = 1 if tres == 0 else 0 - removed_candles = len(data[pair]) - offset - backtesting.strategy.startup_candle_count + removed_candles = len(data[pair]) - offset assert len(backtesting.dataprovider.get_analyzed_dataframe(pair, '5m')[0]) == removed_candles assert len( backtesting.dataprovider.get_analyzed_dataframe('NXT/BTC', '5m')[0] - ) == len(data['NXT/BTC']) - 1 - backtesting.strategy.startup_candle_count + ) == len(data['NXT/BTC']) - 1 backtesting.strategy.max_open_trades = 1 backtesting.config.update({'max_open_trades': 1})