From f9aa36f29108fd797de542dc1f3e27bcef356b14 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 15 Dec 2021 19:37:15 +0100 Subject: [PATCH] Don't hard-fail when executing emergency sell fails closes #6068 --- freqtrade/freqtradebot.py | 10 +++++++--- tests/test_freqtradebot.py | 12 +++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 7d8e0ec2f..fff187ef9 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -666,7 +666,7 @@ class FreqtradeBot(LoggingMixin): trades_closed += 1 except DependencyException as exception: - logger.warning('Unable to sell trade %s: %s', trade.pair, exception) + logger.warning(f'Unable to sell trade {trade.pair}: {exception}') # Updating wallets if any trade occurred if trades_closed: @@ -910,8 +910,12 @@ class FreqtradeBot(LoggingMixin): if max_timeouts > 0 and canceled_count >= max_timeouts: logger.warning(f'Emergencyselling trade {trade}, as the sell order ' f'timed out {max_timeouts} times.') - self.execute_trade_exit(trade, order.get('price'), sell_reason=SellCheckTuple( - sell_type=SellType.EMERGENCY_SELL)) + try: + self.execute_trade_exit( + trade, order.get('price'), + sell_reason=SellCheckTuple(sell_type=SellType.EMERGENCY_SELL)) + except DependencyException as exception: + logger.warning(f'Unable to emergency sell trade {trade.pair}: {exception}') def cancel_all_open_orders(self) -> None: """ diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index dd1fcd6e2..2d2664055 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -2171,10 +2171,20 @@ def test_check_handle_timedout_sell_usercustom(default_conf_usdt, ticker_usdt, l assert open_trade.is_open is True assert freqtrade.strategy.check_sell_timeout.call_count == 1 - # 2nd canceled trade ... + # 2nd canceled trade - Fail execute sell caplog.clear() open_trade.open_order_id = 'order_id_2' mocker.patch('freqtrade.persistence.Trade.get_exit_order_count', return_value=1) + mocker.patch('freqtrade.freqtradebot.FreqtradeBot.execute_trade_exit', + side_effect=DependencyException) + freqtrade.check_handle_timedout() + assert log_has_re('Unable to emergency sell .*', caplog) + + et_mock = mocker.patch('freqtrade.freqtradebot.FreqtradeBot.execute_trade_exit') + caplog.clear() + + # 2nd canceled trade ... + open_trade.open_order_id = 'order_id_2' freqtrade.check_handle_timedout() assert log_has_re('Emergencyselling trade.*', caplog) assert et_mock.call_count == 1