diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 6fbd9ff09..4fe220cf4 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -701,32 +701,12 @@ class LocalTrade(): payment = "SELL" if self.is_short else "BUY" logger.info(f'{order.order_type.upper()}_{payment} has been fulfilled for {self}.') - # TODO WIP but to rm if useless - # condition to avoid reset value when updating fees (new) - # if order.order_id in self.open_orders_ids: - # self.open_order_id = None - # else: - # logger.warning( - # f'Got different open_order_id {self.open_order_id} != {order.order_id}') - # TODO validate if this is still relevant - # condition to avoid reset value when updating fees - # if self.open_order_id == order.order_id: - # self.open_order_id = None - # else: - # logger.warning( - # f'Got different open_order_id {self.open_order_id} != {order.order_id}') self.recalc_trade_from_orders() elif order.ft_order_side == self.exit_side: if self.is_open: payment = "BUY" if self.is_short else "SELL" # * On margin shorts, you buy a little bit more than the amount (amount + interest) logger.info(f'{order.order_type.upper()}_{payment} has been fulfilled for {self}.') - # condition to avoid reset value when updating fees - # if self.open_order_id == order.order_id: - # self.open_order_id = None - # else: - # logger.warning( - # f'Got different open_order_id {self.open_order_id} != {order.order_id}') elif order.ft_order_side == 'stoploss' and order.status not in ('open', ): self.stoploss_order_id = None diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 0a26bc95b..b8a729372 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -1119,7 +1119,6 @@ def test_add_stoploss_on_exchange(mocker, default_conf_usdt, limit_order, is_sho freqtrade.enter_positions() trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short - # trade.open_order_id = None trade.stoploss_order_id = None trade.is_open = True trades = [trade] @@ -1164,7 +1163,6 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, is_ trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - # trade.open_order_id = None trade.stoploss_order_id = None assert freqtrade.handle_stoploss_on_exchange(trade) is False @@ -1175,7 +1173,6 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, is_ # should do nothing and return false stop_order_dict.update({'id': "102"}) trade.is_open = True - # trade.open_order_id = None trade.stoploss_order_id = "102" trade.orders.append( Order( @@ -1199,7 +1196,6 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, is_ # should set a stoploss immediately and return False caplog.clear() trade.is_open = True - # trade.open_order_id = None trade.stoploss_order_id = "102" canceled_stoploss_order = MagicMock(return_value={'id': '103_1', 'status': 'canceled'}) @@ -1224,7 +1220,6 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, is_ trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - # trade.open_order_id = None trade.stoploss_order_id = "104" trade.orders.append(Order( ft_order_side='stoploss', @@ -1350,7 +1345,6 @@ def test_handle_stoploss_on_exchange_partial( trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - trade.open_order_id = None trade.stoploss_order_id = None assert freqtrade.handle_stoploss_on_exchange(trade) is False @@ -1409,7 +1403,6 @@ def test_handle_stoploss_on_exchange_partial_cancel_here( trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - trade.open_order_id = None trade.stoploss_order_id = None assert freqtrade.handle_stoploss_on_exchange(trade) is False @@ -1484,7 +1477,6 @@ def test_handle_sle_cancel_cant_recreate(mocker, default_conf_usdt, fee, caplog, trade = Trade.session.scalars(select(Trade)).first() assert trade.is_short == is_short trade.is_open = True - # trade.open_order_id = None trade.stoploss_order_id = "100" trade.orders.append( Order( @@ -1788,7 +1780,6 @@ def test_handle_stoploss_on_exchange_trailing_error( trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - trade.open_order_id = None trade.stoploss_order_id = "abcd" trade.stop_loss = 0.2 trade.stoploss_last_update = (dt_now() - timedelta(minutes=601)).replace(tzinfo=None) @@ -1902,7 +1893,6 @@ def test_handle_stoploss_on_exchange_custom_stop( trade = Trade.session.scalars(select(Trade)).first() trade.is_short = is_short trade.is_open = True - trade.open_order_id = None trade.stoploss_order_id = '100' trade.stoploss_last_update = dt_now() - timedelta(minutes=601) trade.orders.append( @@ -2040,7 +2030,6 @@ def test_tsl_on_exchange_compatible_with_edge(mocker, edge_conf, fee, limit_orde freqtrade.enter_positions() trade = Trade.session.scalars(select(Trade)).first() trade.is_open = True - trade.open_order_id = None trade.stoploss_order_id = '100' trade.stoploss_last_update = dt_now() trade.orders.append( @@ -2147,7 +2136,6 @@ def test_exit_positions(mocker, default_conf_usdt, limit_order, is_short, caplog order_id = '123' trade = Trade( - open_order_id=order_id, pair='ETH/USDT', fee_open=0.001, fee_close=0.001, @@ -2193,7 +2181,6 @@ def test_exit_positions_exception(mocker, default_conf_usdt, limit_order, caplog order_id = '123' trade = Trade( - open_order_id=order_id, pair='ETH/USDT', fee_open=0.001, fee_close=0.001, @@ -2214,7 +2201,6 @@ def test_exit_positions_exception(mocker, default_conf_usdt, limit_order, caplog order_id=order_id, )) - trade.open_order_id = None Trade.session.add(trade) Trade.commit() freqtrade.wallets.update() @@ -2243,7 +2229,6 @@ def test_update_trade_state(mocker, default_conf_usdt, limit_order, is_short, ca order_id = order['id'] trade = Trade( - open_order_id=order_id, fee_open=0.001, fee_close=0.001, open_rate=0.01, @@ -2267,7 +2252,7 @@ def test_update_trade_state(mocker, default_conf_usdt, limit_order, is_short, ca # Test amount not modified by fee-logic assert not log_has_re(r'Applying fee to .*', caplog) caplog.clear() - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.amount == order['amount'] trade.open_order_id = order_id @@ -2276,10 +2261,9 @@ def test_update_trade_state(mocker, default_conf_usdt, limit_order, is_short, ca # test amount modified by fee-logic freqtrade.update_trade_state(trade, order_id) assert trade.amount == 29.99 - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 trade.is_open = True - trade.open_order_id = None # Assert we call handle_trade() if trade is feasible for execution freqtrade.update_trade_state(trade, order_id) @@ -3505,7 +3489,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None: assert send_msg_mock.call_count == 1 assert trade.close_rate is None assert trade.exit_reason is None - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 send_msg_mock.reset_mock() @@ -4004,7 +3988,7 @@ def test_may_execute_trade_exit_after_stoploss_on_exchange_hit( freqtrade.exit_positions(trades) assert trade assert trade.stoploss_order_id == '123' - # assert trade.open_order_id is None + # assert trade.open_entry_or_exit_orders_count == 0 # Assuming stoploss on exchange is hit # stoploss_order_id should become None @@ -5496,7 +5480,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap return_value={'status': 'open'}) def reset_open_orders(trade): - trade.open_order_id = None + trade.stoploss_order_id = None trade.is_short = is_short @@ -5508,7 +5492,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap # No open order trade = trades[0] reset_open_orders(trade) - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is None freqtrade.handle_insufficient_funds(trade) @@ -5517,7 +5501,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap assert mock_fo.call_count == 0 assert mock_uts.call_count == 0 # No change to orderid - as update_trade_state is mocked - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is None caplog.clear() @@ -5526,7 +5510,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap # Open buy order trade = trades[3] reset_open_orders(trade) - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is None freqtrade.handle_insufficient_funds(trade) @@ -5544,7 +5528,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap # Open stoploss order trade = trades[4] reset_open_orders(trade) - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is None freqtrade.handle_insufficient_funds(trade) @@ -5553,7 +5537,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap assert mock_fo.call_count == 1 assert mock_uts.call_count == 2 # stoploss_order_id is "refound" and added to the trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is not None caplog.clear() @@ -5563,7 +5547,7 @@ def test_handle_insufficient_funds(mocker, default_conf_usdt, fee, is_short, cap # Open sell order trade = trades[5] reset_open_orders(trade) - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.stoploss_order_id is None freqtrade.handle_insufficient_funds(trade) @@ -5926,7 +5910,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == 11 assert trade.stake_amount == 110 @@ -5936,7 +5920,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == 11 assert trade.stake_amount == 110 assert not trade.fee_updated('buy') @@ -5946,7 +5930,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == 11 assert trade.stake_amount == 110 assert not trade.fee_updated('buy') @@ -6048,7 +6032,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: # Assert trade is as expected (averaged dca) trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert pytest.approx(trade.open_rate) == 9.90909090909 assert trade.amount == 22 assert pytest.approx(trade.stake_amount) == 218 @@ -6090,7 +6074,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: # Assert trade is as expected (averaged dca) trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert pytest.approx(trade.open_rate) == 8.729729729729 assert trade.amount == 37 assert trade.stake_amount == 323 @@ -6128,7 +6112,7 @@ def test_position_adjust(mocker, default_conf_usdt, fee) -> None: # Assert trade is as expected (averaged dca) trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.is_open assert trade.amount == 22 assert trade.stake_amount == 192.05405405405406 @@ -6205,7 +6189,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == bid assert trade.stake_amount == bid * amount @@ -6215,7 +6199,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == bid assert trade.stake_amount == bid * amount assert not trade.fee_updated(trade.entry_side) @@ -6225,7 +6209,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.open_rate == bid assert trade.stake_amount == bid * amount assert not trade.fee_updated(trade.entry_side) @@ -6260,7 +6244,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.amount == 50 assert trade.open_rate == 11 assert trade.stake_amount == 550 @@ -6302,7 +6286,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.amount == 50 assert trade.open_rate == 11 assert trade.stake_amount == 550 @@ -6402,7 +6386,7 @@ def test_position_adjust3(mocker, default_conf_usdt, fee, data) -> None: assert trade if idx < len(data) - 1: assert trade.is_open is True - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.amount == result[0] assert trade.open_rate == result[1] assert trade.stake_amount == result[2] @@ -6415,7 +6399,7 @@ def test_position_adjust3(mocker, default_conf_usdt, fee, data) -> None: trade = Trade.session.scalars(select(Trade)).first() assert trade - assert trade.open_order_id is None + assert trade.open_entry_or_exit_orders_count == 0 assert trade.is_open is False