From b7c89a72fa27ea30173f628c74b4c2947b195dce Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 Mar 2026 09:19:27 +0100 Subject: [PATCH] feat: enhance orders_emulate to include canceled orders --- freqtrade/exchange/exchange.py | 9 ++++++--- tests/exchange/test_exchange.py | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 83fe564e7..79f93eed0 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1896,9 +1896,12 @@ class Exchange: orders = [] if self.exchange_has("fetchClosedOrders"): orders = self._api.fetch_closed_orders(pair, since=since_ms) - if self.exchange_has("fetchOpenOrders"): - orders_open = self._api.fetch_open_orders(pair, since=since_ms) - orders.extend(orders_open) + if self.exchange_has("fetchCanceledOrders"): + orders_canceled = self._api.fetch_canceled_orders(pair, since=since_ms) + orders.extend(orders_canceled) + if self.exchange_has("fetchOpenOrders"): + orders_open = self._api.fetch_open_orders(pair, since=since_ms) + orders.extend(orders_open) return orders @retrier(retries=0) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 9b68e37d2..0d2a6ae61 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1968,6 +1968,7 @@ def test_fetch_orders(default_conf, mocker, exchange_name, limit_order): api_mock.fetch_orders = MagicMock(side_effect=return_value) api_mock.fetch_open_orders = MagicMock(return_value=[limit_order["buy"]]) + api_mock.fetch_canceled_orders = MagicMock(return_value=[]) api_mock.fetch_closed_orders = MagicMock(return_value=[limit_order["buy"]]) mocker.patch(f"{EXMS}.exchange_has", return_value=True) @@ -2000,6 +2001,8 @@ def test_fetch_orders(default_conf, mocker, exchange_name, limit_order): return True if endpoint == "fetchOpenOrders": return True + if endpoint == "fetchCanceledOrders": + return True if exchange_name == "okx": # Special OKX case is tested separately @@ -2012,6 +2015,7 @@ def test_fetch_orders(default_conf, mocker, exchange_name, limit_order): assert api_mock.fetch_orders.call_count == 0 assert api_mock.fetch_open_orders.call_count == expected assert api_mock.fetch_closed_orders.call_count == expected + assert api_mock.fetch_canceled_orders.call_count == expected mocker.patch(f"{EXMS}.exchange_has", return_value=True) @@ -2031,12 +2035,14 @@ def test_fetch_orders(default_conf, mocker, exchange_name, limit_order): api_mock.fetch_orders = MagicMock(side_effect=ccxt.NotSupported()) api_mock.fetch_open_orders.reset_mock() api_mock.fetch_closed_orders.reset_mock() + api_mock.fetch_canceled_orders.reset_mock() exchange.fetch_orders("mocked", start_time) assert api_mock.fetch_orders.call_count == expected assert api_mock.fetch_open_orders.call_count == expected assert api_mock.fetch_closed_orders.call_count == expected + assert api_mock.fetch_canceled_orders.call_count == expected def test_fetch_trading_fees(default_conf, mocker):