From fa368a9a4a6547447647a4d081984e0b2ded38fd Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 2 Jan 2024 12:11:06 +0100 Subject: [PATCH] Improve trailing stoploss test with time_machine --- tests/test_freqtradebot.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 06d40dfb0..f38504ed6 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -1606,12 +1606,15 @@ def test_create_stoploss_order_insufficient_funds( ]) @pytest.mark.usefixtures("init_persistence") def test_handle_stoploss_on_exchange_trailing( - mocker, default_conf_usdt, fee, is_short, bid, ask, limit_order, stop_price, hang_price + mocker, default_conf_usdt, fee, is_short, bid, ask, limit_order, stop_price, hang_price, + time_machine, ) -> None: # When trailing stoploss is set enter_order = limit_order[entry_side(is_short)] exit_order = limit_order[exit_side(is_short)] - stoploss = MagicMock(return_value={'id': 13434334, 'status': 'open'}) + stoploss = MagicMock(return_value={'id': '13434334', 'status': 'open'}) + start_dt = dt_now() + time_machine.move_to(start_dt, tick=False) patch_RPCManager(mocker) mocker.patch.multiple( EXMS, @@ -1685,6 +1688,8 @@ def test_handle_stoploss_on_exchange_trailing( assert freqtrade.handle_trade(trade) is False assert freqtrade.handle_stoploss_on_exchange(trade) is False + assert trade.stoploss_order_id == '13434334' + # price jumped 2x mocker.patch( f'{EXMS}.fetch_ticker', @@ -1706,16 +1711,15 @@ def test_handle_stoploss_on_exchange_trailing( cancel_order_mock.assert_not_called() stoploss_order_mock.assert_not_called() + # Move time by 10s ... so stoploss order should be replaced. + time_machine.move_to(start_dt + timedelta(minutes=10), tick=False) + assert freqtrade.handle_trade(trade) is False assert trade.stop_loss == stop_price[1] - trade.stoploss_order_id = '100' - - # setting stoploss_on_exchange_interval to 0 seconds - freqtrade.strategy.order_types['stoploss_on_exchange_interval'] = 0 assert freqtrade.handle_stoploss_on_exchange(trade) is False - cancel_order_mock.assert_called_once_with('100', 'ETH/USDT') + cancel_order_mock.assert_called_once_with('13434334', 'ETH/USDT') stoploss_order_mock.assert_called_once_with( amount=30, pair='ETH/USDT',