From f4f2884a66c97c05e6871b1ecf2f12b1bc0ec460 Mon Sep 17 00:00:00 2001 From: Wagner Costa Santos Date: Wed, 7 Sep 2022 18:52:58 -0300 Subject: [PATCH 1/3] Fix freqai backtesting time range issue --- freqtrade/freqai/data_kitchen.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index 7670cfd45..01b2f1f3b 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -461,6 +461,20 @@ class FreqaiDataKitchen: return df + def remove_training_from_backtesting( + self + ) -> DataFrame: + """ + Function which takes the backtesting time range and + remove training data from dataframe + """ + tr = self.config["timerange"] + backtesting_timerange = TimeRange.parse_timerange(tr) + start = datetime.fromtimestamp(backtesting_timerange.startts, tz=timezone.utc) + df = self.return_dataframe + df = df.loc[df["date"] >= start, :] + return df + def principal_component_analysis(self) -> None: """ Performs Principal Component Analysis on the data for dimensionality reduction @@ -954,6 +968,7 @@ class FreqaiDataKitchen: to_keep = [col for col in dataframe.columns if not col.startswith("&")] self.return_dataframe = pd.concat([dataframe[to_keep], self.full_df], axis=1) + self.return_dataframe = self.remove_training_from_backtesting() self.full_df = DataFrame() return From 79985fda015c0f060d0b0aca7d83962c43c75e8e Mon Sep 17 00:00:00 2001 From: Wagner Costa Santos Date: Sat, 10 Sep 2022 10:27:17 -0300 Subject: [PATCH 2/3] fix backtesting freqai startup candles bug --- freqtrade/freqai/data_kitchen.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index 01b2f1f3b..88d841b9e 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -468,8 +468,14 @@ class FreqaiDataKitchen: Function which takes the backtesting time range and remove training data from dataframe """ + startup_candle_count = self.config.get('startup_candle_count', 0) + tf = self.config['timeframe'] tr = self.config["timerange"] + backtesting_timerange = TimeRange.parse_timerange(tr) + if startup_candle_count > 0 and backtesting_timerange: + backtesting_timerange.subtract_start(timeframe_to_seconds(tf) * startup_candle_count) + start = datetime.fromtimestamp(backtesting_timerange.startts, tz=timezone.utc) df = self.return_dataframe df = df.loc[df["date"] >= start, :] From 311ae8bf1f14e4cc80d6e5ec036c942d9af716bf Mon Sep 17 00:00:00 2001 From: Wagner Costa Santos Date: Sat, 10 Sep 2022 14:45:42 -0300 Subject: [PATCH 3/3] freqai backtesting - add startup_candle_count at function description --- freqtrade/freqai/data_kitchen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index 88d841b9e..9168db2aa 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -466,7 +466,8 @@ class FreqaiDataKitchen: ) -> DataFrame: """ Function which takes the backtesting time range and - remove training data from dataframe + remove training data from dataframe, keeping only the + startup_candle_count candles """ startup_candle_count = self.config.get('startup_candle_count', 0) tf = self.config['timeframe']