From 419d5d99464cb4010461b649a33d6f97e56b743f Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 17 Jan 2025 06:36:32 +0100 Subject: [PATCH] feat: add backtesting support for ignore_buying_expired_candle_after this is only relevant for detail candles - otherwise entries will never happen within a candle. --- freqtrade/optimize/backtesting.py | 9 +++++++++ tests/optimize/test_backtesting.py | 1 + 2 files changed, 10 insertions(+) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 5ecb0d800..96c962869 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -1527,6 +1527,15 @@ class Backtesting: row = detail_data[idx] trade_dir = pair_tradedir_cache.get(pair) + if self.strategy.ignore_expired_candle( + current_time - self.timeframe_td, # last closed candle is 1 timeframe away. + current_time_det, + self.timeframe_secs, + trade_dir is not None, + ): + # Ignore late entries eventually + trade_dir = None + self.dataprovider._set_dataframe_max_date(current_time_det) pair_has_open_trades = len(LocalTrade.bt_trades_open_pp[pair]) > 0 diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index 47f196813..9e45eedec 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -866,6 +866,7 @@ def test_backtest_one_detail(default_conf_usdt, mocker, testdatadir, use_detail) backtesting = Backtesting(default_conf_usdt) backtesting._set_strategy(backtesting.strategylist[0]) backtesting.strategy.populate_entry_trend = advise_entry + backtesting.strategy.ignore_buying_expired_candle_after = 59 backtesting.strategy.custom_entry_price = custom_entry_price pair = "XRP/ETH" # Pick a timerange adapted to the pair we use to test