diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index c8544ac13..e47c4f7a3 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -381,15 +381,16 @@ class FreqtradeBot(LoggingMixin): trades = Trade.get_open_trades_without_assigned_fees() for trade in trades: - if trade.is_open and not trade.fee_updated(trade.entry_side): - order = trade.select_order(trade.entry_side, False) - open_order = trade.select_order(trade.entry_side, True) - if order and open_order is None: - logger.info( - f"Updating {trade.entry_side}-fee on trade {trade}" - f"for order {order.order_id}." - ) - self.update_trade_state(trade, order.order_id, send_msg=False) + with self._exit_lock: + if trade.is_open and not trade.fee_updated(trade.entry_side): + order = trade.select_order(trade.entry_side, False) + open_order = trade.select_order(trade.entry_side, True) + if order and open_order is None: + logger.info( + f"Updating {trade.entry_side}-fee on trade {trade}" + f"for order {order.order_id}." + ) + self.update_trade_state(trade, order.order_id, send_msg=False) def handle_insufficient_funds(self, trade: Trade): """ diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 1d3f36844..011543a09 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -789,17 +789,18 @@ class RPC: if not order_type: order_type = self._freqtrade.strategy.order_types.get( 'force_entry', self._freqtrade.strategy.order_types['entry']) - if self._freqtrade.execute_entry(pair, stake_amount, price, - ordertype=order_type, trade=trade, - is_short=is_short, - enter_tag=enter_tag, - leverage_=leverage, - ): - Trade.commit() - trade = Trade.get_trades([Trade.is_open.is_(True), Trade.pair == pair]).first() - return trade - else: - raise RPCException(f'Failed to enter position for {pair}.') + with self._freqtrade._exit_lock: + if self._freqtrade.execute_entry(pair, stake_amount, price, + ordertype=order_type, trade=trade, + is_short=is_short, + enter_tag=enter_tag, + leverage_=leverage, + ): + Trade.commit() + trade = Trade.get_trades([Trade.is_open.is_(True), Trade.pair == pair]).first() + return trade + else: + raise RPCException(f'Failed to enter position for {pair}.') def _rpc_delete(self, trade_id: int) -> Dict[str, Union[str, int]]: """