From 6752c3e288dd5611549b5ddd7495e60cb4bfbde7 Mon Sep 17 00:00:00 2001 From: Axel-CH Date: Mon, 15 Apr 2024 14:43:40 -0400 Subject: [PATCH] add has_untied_assets, replace one has_open_orders condition by has_untied_assets in exit_positions --- freqtrade/freqtradebot.py | 2 +- freqtrade/persistence/trade_model.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 0184741ff..e4835034d 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1093,7 +1093,7 @@ class FreqtradeBot(LoggingMixin): logger.warning( f'Unable to handle stoploss on exchange for {trade.pair}: {exception}') # Check if we can sell our current pair - if not trade.has_open_orders and trade.is_open and self.handle_trade(trade): + if trade.has_untied_assets and trade.is_open and self.handle_trade(trade): trades_closed += 1 except DependencyException as exception: diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index f092176da..1ee350b5b 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -563,6 +563,26 @@ class LocalTrade: return (entry_orders_filled_qty - exit_orders_filled_qty) > 0 + @property + def has_untied_assets(self) -> bool: + """ + True if there is still remaining position not yet tied up to exit order + """ + entry_orders = [ + o for o in self.orders + if o.ft_order_side == self.entry_side + ] + entry_orders_filled_qty = sum(eno.safe_filled for eno in entry_orders) + + exit_orders = [ + o for o in self.orders + if o.ft_order_side == self.exit_side + ] + exit_orders_remaining_qty = sum(exo.safe_remaining for exo in exit_orders) + untied_remaining = entry_orders_filled_qty - exit_orders_remaining_qty + + return untied_remaining > 0 + @property def open_sl_orders(self) -> List[Order]: """