diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 72531c9f9..a3dd29771 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1174,7 +1174,7 @@ class FreqtradeBot: if order_amount is None: order_amount = order['amount'] # Only run for closed orders - if trade.fee_open_currency is not None or order['status'] == 'open': + if trade.fee_updated(order['side']) or order['status'] == 'open': return order_amount trade_base_currency = self.exchange.get_pair_base_currency(trade.pair) diff --git a/freqtrade/persistence.py b/freqtrade/persistence.py index fec095daa..a541dcbcc 100644 --- a/freqtrade/persistence.py +++ b/freqtrade/persistence.py @@ -394,6 +394,15 @@ class Trade(_DECL_BASE): if fee_rate is not None: self.fee_close = fee_rate + def fee_updated(self, side: str) -> bool: + """ + Verify if this side (buy / sell) has already been updated + """ + if side == 'buy': + return self.fee_open_currency is not None + elif side == 'sell': + return self.fee_close_currency is not None + def _calc_open_trade_price(self) -> float: """ Calculate the open_rate including open_fee. diff --git a/tests/test_persistence.py b/tests/test_persistence.py index fa6f84ce0..1a42d95fe 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -890,8 +890,12 @@ def test_update_fee(fee): fee_currency = 'BTC' fee_rate = 0.0075 assert trade.fee_open_currency is None + assert not trade.fee_updated('buy') + assert not trade.fee_updated('sell') trade.update_fee(fee_cost, fee_currency, fee_rate, 'buy') + assert trade.fee_updated('buy') + assert not trade.fee_updated('sell') assert trade.fee_open_currency == fee_currency assert trade.fee_open_cost == fee_cost assert trade.fee_open == fee_rate @@ -902,6 +906,8 @@ def test_update_fee(fee): fee_rate = 0.0076 trade.update_fee(fee_cost, fee_currency, fee_rate, 'sell') + assert trade.fee_updated('buy') + assert trade.fee_updated('sell') assert trade.fee_close == 0.0076 assert trade.fee_close_cost == fee_cost assert trade.fee_close == fee_rate