From 1e61aea23b31e7dfca72a037bed71b6bb3098262 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 17 Jan 2025 06:45:56 +0100 Subject: [PATCH] feat: allow in-candle entries --- freqtrade/optimize/backtesting.py | 2 +- tests/optimize/test_backtesting.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 96c962869..e9b93d7d7 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -1386,7 +1386,7 @@ class Backtesting: and (self._position_stacking or len(LocalTrade.bt_trades_open_pp[pair]) == 0) and not PairLocks.is_pair_locked(pair, row[DATE_IDX], trade_dir) ): - if self.trade_slot_available(LocalTrade.bt_open_open_trade_count_candle): + if self.trade_slot_available(LocalTrade.bt_open_open_trade_count): trade = self._enter_trade(pair, row, trade_dir) if trade: self.wallets.update() diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index 9e45eedec..b85e2e2d5 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -1773,16 +1773,18 @@ def test_backtest_multi_pair_detail_simplified( if use_detail: # Backtest loop is called once per candle per pair # Exact numbers depend on trade state - but should be around 3_800 - assert bl_spy.call_count > 2_250 + assert bl_spy.call_count > 2_170 assert bl_spy.call_count < 2_800 + assert len(evaluate_result_multi(results["results"], "1h", 3)) > 0 else: assert bl_spy.call_count < 995 + assert len(evaluate_result_multi(results["results"], "1h", 3)) == 0 # Make sure we have parallel trades assert len(evaluate_result_multi(results["results"], "1h", 2)) > 0 + assert len(evaluate_result_multi(results["results"], "5m", 2)) > 0 # make sure we don't have trades with more than configured max_open_trades # This must evaluate on detail timeframe - as we can have entries within the candle. - assert len(evaluate_result_multi(results["results"], "1h", 3)) == 0 assert len(evaluate_result_multi(results["results"], "5m", 3)) == 0 assert len(evaluate_result_multi(results["results"], "1m", 3)) == 0 @@ -1803,7 +1805,10 @@ def test_backtest_multi_pair_detail_simplified( "end_date": max_date, } results = backtesting.backtest(**backtest_conf) - assert len(evaluate_result_multi(results["results"], "1h", 1)) == 0 + if use_detail: + assert len(evaluate_result_multi(results["results"], "1h", 1)) > 0 + else: + assert len(evaluate_result_multi(results["results"], "1h", 1)) == 0 assert len(evaluate_result_multi(results["results"], "5m", 1)) == 0 assert len(evaluate_result_multi(results["results"], "1m", 1)) == 0