From 60a50a2ea84fe8759482de498d0dad3b2d246b43 Mon Sep 17 00:00:00 2001 From: axel Date: Thu, 15 Jun 2023 11:56:41 -0400 Subject: [PATCH] fix test_handle_stoploss_on_exchange, add more orders related hybrid_properties to Trade classes --- freqtrade/freqtradebot.py | 2 +- freqtrade/persistence/trade_model.py | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index cf1911972..700b16766 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1236,7 +1236,7 @@ class FreqtradeBot(LoggingMixin): self.handle_protections(trade.pair, trade.trade_direction) return True - if trade.open_orders_count != 0 or not trade.is_open: + if trade.open_entry_or_exit_orders_count != 0 or not trade.is_open: # Trade has an open Buy or Sell order, Stoploss-handling can't happen in this case # as the Amount on the exchange is tied up in another trade. # The trade can be closed already (sell-order fill confirmation came in this iteration) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 93231f236..36113011f 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -473,6 +473,15 @@ class LocalTrade(): def open_orders_count(self) -> int: return len(self.open_orders) + @hybrid_property + def open_entry_or_exit_orders_count(self) -> int: + open_buy_or_sell_orders = [] + for oo in self.open_orders: + if (oo.ft_order_side in ['buy', 'sell']): + open_buy_or_sell_orders.append(oo) + + return len(open_buy_or_sell_orders) + @hybrid_property def open_orders_ids(self) -> list: return [open_order.order_id for open_order in self.open_orders] @@ -1354,6 +1363,24 @@ class Trade(ModelBase, LocalTrade): .subquery() ) + @hybrid_property + def open_entry_or_exit_orders_count(self) -> int: + open_buy_or_sell_orders = [] + for oo in self.open_orders: + if (oo.ft_order_side in ['buy', 'sell']): + open_buy_or_sell_orders.append(oo) + + return len(open_buy_or_sell_orders) + + @open_entry_or_exit_orders_count.expression + def open_entry_or_exit_orders_count(cls): + return ( + select(func.count(Order.order_id)) + .where(Order.ft_order_side.contains(['buy', 'sell'])) + .where(Order.ft_trade_id == cls.id) + .subquery() + ) + @hybrid_property def open_orders_ids(self) -> list: return [open_order.order_id for open_order in self.open_orders]