From 550ab2b8e85290f11f961ffac12491ab076cf4e1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 8 Jan 2023 11:24:04 +0100 Subject: [PATCH] Improve select_order to only consider filled where needed. --- freqtrade/freqtradebot.py | 4 ++-- freqtrade/persistence/trade_model.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 258a45008..659eb2660 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -374,7 +374,7 @@ class FreqtradeBot(LoggingMixin): for trade in trades: if not trade.is_open and not trade.fee_updated(trade.exit_side): # Get sell fee - order = trade.select_order(trade.exit_side, False) + order = trade.select_order(trade.exit_side, False, only_filled=True) if not order: order = trade.select_order('stoploss', False) if order: @@ -390,7 +390,7 @@ class FreqtradeBot(LoggingMixin): for trade in trades: with self._exit_lock: if trade.is_open and not trade.fee_updated(trade.entry_side): - order = trade.select_order(trade.entry_side, False) + order = trade.select_order(trade.entry_side, False, only_filled=True) open_order = trade.select_order(trade.entry_side, True) if order and open_order is None: logger.info( diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 0c36d2378..f19b3808f 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -956,11 +956,12 @@ class LocalTrade(): return None def select_order(self, order_side: Optional[str] = None, - is_open: Optional[bool] = None) -> Optional[Order]: + is_open: Optional[bool] = None, only_filled: bool = False) -> Optional[Order]: """ Finds latest order for this orderside and status :param order_side: ft_order_side of the order (either 'buy', 'sell' or 'stoploss') :param is_open: Only search for open orders? + :param only_filled: Only search for Filled orders (only valid with is_open=False). :return: latest Order object if it exists, else None """ orders = self.orders @@ -968,6 +969,8 @@ class LocalTrade(): orders = [o for o in orders if o.ft_order_side == order_side] if is_open is not None: orders = [o for o in orders if o.ft_is_open == is_open] + if is_open is False and only_filled: + orders = [o for o in orders if o.filled and o.status in NON_OPEN_EXCHANGE_STATES] if len(orders) > 0: return orders[-1] else: