From 0a89efd002db549ffe45d91e519b910d9fb69619 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 25 Apr 2024 11:43:24 +0200 Subject: [PATCH] Only cancel stoploss if really necessary partial workaround for #10002 --- freqtrade/freqtradebot.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index d24732e12..a7e35838b 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -462,6 +462,7 @@ class FreqtradeBot(LoggingMixin): trade.pair, trade.open_date_utc - timedelta(seconds=10)) prev_exit_reason = trade.exit_reason prev_trade_state = trade.is_open + prev_trade_amount = trade.amount for order in orders: trade_order = [o for o in trade.orders if o.order_id == order['id']] @@ -493,6 +494,10 @@ class FreqtradeBot(LoggingMixin): send_msg=prev_trade_state != trade.is_open) else: trade.exit_reason = prev_exit_reason + + if prev_trade_amount != trade.amount: + # Cancel stoploss on exchange if the amount changed + trade = self.cancel_stoploss_on_exchange(trade) Trade.commit() except ExchangeError: @@ -1948,21 +1953,23 @@ class FreqtradeBot(LoggingMixin): trade.update_trade(order_obj, not send_msg) - trade = self._update_trade_after_fill(trade, order_obj) + trade = self._update_trade_after_fill(trade, order_obj, send_msg) Trade.commit() self.order_close_notify(trade, order_obj, stoploss_order, send_msg) return False - def _update_trade_after_fill(self, trade: Trade, order: Order) -> Trade: + def _update_trade_after_fill(self, trade: Trade, order: Order, send_msg: bool) -> Trade: if order.status in constants.NON_OPEN_EXCHANGE_STATES: strategy_safe_wrapper( self.strategy.order_filled, default_retval=None)( pair=trade.pair, trade=trade, order=order, current_time=datetime.now(timezone.utc)) # If a entry order was closed, force update on stoploss on exchange if order.ft_order_side == trade.entry_side: - trade = self.cancel_stoploss_on_exchange(trade) + if send_msg: + # Don't cancel stoploss in recovery modes immediately + trade = self.cancel_stoploss_on_exchange(trade) if not self.edge: # TODO: should shorting/leverage be supported by Edge, # then this will need to be fixed.