From e09abfdc754a6eff31339c2ee3a56f3a3faa780c Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 11 Apr 2024 20:54:16 +0200 Subject: [PATCH] Split enter and exit rows to use different values --- .../test_backtesting_adjust_position.py | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/tests/optimize/test_backtesting_adjust_position.py b/tests/optimize/test_backtesting_adjust_position.py index 25375ac8e..322b292ff 100644 --- a/tests/optimize/test_backtesting_adjust_position.py +++ b/tests/optimize/test_backtesting_adjust_position.py @@ -121,8 +121,8 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera backtesting._can_short = True backtesting._set_strategy(backtesting.strategylist[0]) pair = 'XRP/USDT:USDT' - row = [ - pd.Timestamp(year=2020, month=1, day=1, hour=5, minute=0), + row_enter = [ + pd.Timestamp(year=2020, month=1, day=1, hour=4, minute=0), 2.1, # Open 2.2, # High 1.9, # Low @@ -133,10 +133,24 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera 0, # exit_short '', # enter_tag '', # exit_tag - ] + ] + # Exit row - with slightly different values + row_exit = [ + pd.Timestamp(year=2020, month=1, day=1, hour=5, minute=0), + 2.2, # Open + 2.3, # High + 2.0, # Low + 2.2, # Close + 1, # enter_long + 0, # exit_long + 0, # enter_short + 0, # exit_short + '', # enter_tag + '', # exit_tag + ] backtesting.strategy.leverage = MagicMock(return_value=leverage) - trade = backtesting._enter_trade(pair, row=row, direction='long') - current_time = row[0].to_pydatetime() + trade = backtesting._enter_trade(pair, row=row_enter, direction='long') + current_time = row_enter[0].to_pydatetime() assert trade assert pytest.approx(trade.stake_amount) == 100.0 assert pytest.approx(trade.amount) == 47.61904762 * leverage @@ -144,7 +158,7 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera backtesting.strategy.adjust_trade_position = MagicMock(return_value=None) assert pytest.approx(trade.liquidation_price) == (0.10278333 if leverage == 1 else 1.2122249) - trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time) + trade = backtesting._get_adjust_trade_entry_for_candle(trade, row_enter, current_time) assert trade assert pytest.approx(trade.stake_amount) == 100.0 assert pytest.approx(trade.amount) == 47.61904762 * leverage @@ -152,7 +166,7 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera # Increase position by 100 backtesting.strategy.adjust_trade_position = MagicMock(return_value=(100, 'PartIncrease')) - trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time) + trade = backtesting._get_adjust_trade_entry_for_candle(trade, row_enter, current_time) liq_price = 0.1038916 if leverage == 1 else 1.2127791 assert trade @@ -164,8 +178,9 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera # Reduce by more than amount - no change to trade. backtesting.strategy.adjust_trade_position = MagicMock(return_value=-500) + current_time = row_exit[0].to_pydatetime() - trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time) + trade = backtesting._get_adjust_trade_entry_for_candle(trade, row_exit, current_time) assert trade assert pytest.approx(trade.stake_amount) == 200.0 @@ -176,7 +191,7 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera # Reduce position by 50 backtesting.strategy.adjust_trade_position = MagicMock(return_value=(-100, 'partDecrease')) - trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time) + trade = backtesting._get_adjust_trade_entry_for_candle(trade, row_exit, current_time) assert trade assert pytest.approx(trade.stake_amount) == 100.0 @@ -189,7 +204,7 @@ def test_backtest_position_adjustment_detailed(default_conf, fee, mocker, levera # Adjust below minimum backtesting.strategy.adjust_trade_position = MagicMock(return_value=-99) - trade = backtesting._get_adjust_trade_entry_for_candle(trade, row, current_time) + trade = backtesting._get_adjust_trade_entry_for_candle(trade, row_exit, current_time) assert trade assert pytest.approx(trade.stake_amount) == 100.0