From 24e806f081ab6cb2b12779551534c67a630aa6f0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 16 Jun 2023 19:58:35 +0200 Subject: [PATCH] Improve resiliance by using non-exchange controlled order attributes. --- freqtrade/strategy/interface.py | 2 +- tests/test_freqtradebot.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index dfdfd31d8..d0655b504 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -1300,7 +1300,7 @@ class IStrategy(ABC, HyperStrategyMixin): timedout = (order.status == 'open' and order.order_date_utc < timeout_threshold) if timedout: return True - time_method = (self.check_exit_timeout if order.side == trade.exit_side + time_method = (self.check_exit_timeout if order.ft_order_side == trade.exit_side else self.check_entry_timeout) return strategy_safe_wrapper(time_method, diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 945a81aa6..24e726403 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -3011,8 +3011,8 @@ def test_manage_open_orders_exit_usercustom( freqtrade.manage_open_orders() assert cancel_order_mock.call_count == 0 assert rpc_mock.call_count == 1 - assert freqtrade.strategy.check_exit_timeout.call_count == 1 - assert freqtrade.strategy.check_entry_timeout.call_count == 0 + assert freqtrade.strategy.check_exit_timeout.call_count == (0 if is_short else 1) + assert freqtrade.strategy.check_entry_timeout.call_count == (1 if is_short else 0) freqtrade.strategy.check_exit_timeout = MagicMock(side_effect=KeyError) freqtrade.strategy.check_entry_timeout = MagicMock(side_effect=KeyError) @@ -3020,8 +3020,8 @@ def test_manage_open_orders_exit_usercustom( freqtrade.manage_open_orders() assert cancel_order_mock.call_count == 0 assert rpc_mock.call_count == 1 - assert freqtrade.strategy.check_exit_timeout.call_count == 1 - assert freqtrade.strategy.check_entry_timeout.call_count == 0 + assert freqtrade.strategy.check_exit_timeout.call_count == (0 if is_short else 1) + assert freqtrade.strategy.check_entry_timeout.call_count == (1 if is_short else 0) # Return True - sells! freqtrade.strategy.check_exit_timeout = MagicMock(return_value=True) @@ -3029,8 +3029,8 @@ def test_manage_open_orders_exit_usercustom( freqtrade.manage_open_orders() assert cancel_order_mock.call_count == 1 assert rpc_mock.call_count == 2 - assert freqtrade.strategy.check_exit_timeout.call_count == 1 - assert freqtrade.strategy.check_entry_timeout.call_count == 0 + assert freqtrade.strategy.check_exit_timeout.call_count == (0 if is_short else 1) + assert freqtrade.strategy.check_entry_timeout.call_count == (1 if is_short else 0) trade = Trade.session.scalars(select(Trade)).first() # cancelling didn't succeed - order-id remains open. assert trade.open_order_id is not None