fix tests test_handle_trade, test_handle_cancel_exit_limit, WIP on test_adjust_entry_maintain_replace
This commit is contained in:
@@ -443,13 +443,6 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
if fo and fo['status'] == 'open':
|
if fo and fo['status'] == 'open':
|
||||||
# Assume this as the open stoploss order
|
# Assume this as the open stoploss order
|
||||||
trade.stoploss_order_id = order.order_id
|
trade.stoploss_order_id = order.order_id
|
||||||
elif order.ft_order_side == trade.exit_side:
|
|
||||||
if fo and fo['status'] == 'open':
|
|
||||||
# Assume this as the open order
|
|
||||||
trade.open_order_id = order.order_id
|
|
||||||
elif order.ft_order_side == trade.entry_side:
|
|
||||||
if fo and fo['status'] == 'open':
|
|
||||||
trade.open_order_id = order.order_id
|
|
||||||
if fo:
|
if fo:
|
||||||
logger.info(f"Found {order} for trade {trade}.")
|
logger.info(f"Found {order} for trade {trade}.")
|
||||||
self.update_trade_state(trade, order.order_id, fo,
|
self.update_trade_state(trade, order.order_id, fo,
|
||||||
@@ -1700,7 +1693,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
order_obj = Order.parse_from_ccxt_object(order, trade.pair, trade.exit_side, amount, limit)
|
order_obj = Order.parse_from_ccxt_object(order, trade.pair, trade.exit_side, amount, limit)
|
||||||
trade.orders.append(order_obj)
|
trade.orders.append(order_obj)
|
||||||
|
|
||||||
trade.open_order_id = order['id']
|
# trade.open_order_id = order['id']
|
||||||
trade.exit_order_status = ''
|
trade.exit_order_status = ''
|
||||||
trade.close_rate_requested = limit
|
trade.close_rate_requested = limit
|
||||||
trade.exit_reason = exit_reason
|
trade.exit_reason = exit_reason
|
||||||
@@ -1708,7 +1701,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
self._notify_exit(trade, order_type, sub_trade=bool(sub_trade_amt), order=order_obj)
|
self._notify_exit(trade, order_type, sub_trade=bool(sub_trade_amt), order=order_obj)
|
||||||
# In case of market sell orders the order can be closed immediately
|
# In case of market sell orders the order can be closed immediately
|
||||||
if order.get('status', 'unknown') in ('closed', 'expired'):
|
if order.get('status', 'unknown') in ('closed', 'expired'):
|
||||||
self.update_trade_state(trade, trade.open_order_id, order)
|
self.update_trade_state(trade, order_obj.order_id, order)
|
||||||
Trade.commit()
|
Trade.commit()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -2452,7 +2452,7 @@ def test_handle_trade(
|
|||||||
patch_get_signal(freqtrade, enter_long=False, exit_short=is_short,
|
patch_get_signal(freqtrade, enter_long=False, exit_short=is_short,
|
||||||
exit_long=not is_short, exit_tag='sell_signal1')
|
exit_long=not is_short, exit_tag='sell_signal1')
|
||||||
assert freqtrade.handle_trade(trade) is True
|
assert freqtrade.handle_trade(trade) is True
|
||||||
assert trade.open_order_id == exit_order['id']
|
assert trade.open_orders_ids[-1] == exit_order['id']
|
||||||
|
|
||||||
# Simulate fulfilled LIMIT_SELL order for trade
|
# Simulate fulfilled LIMIT_SELL order for trade
|
||||||
trade.orders[-1].ft_is_open = False
|
trade.orders[-1].ft_is_open = False
|
||||||
@@ -2848,7 +2848,7 @@ def test_adjust_entry_cancel(
|
|||||||
assert freqtrade.strategy.adjust_entry_price.call_count == 1
|
assert freqtrade.strategy.adjust_entry_price.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("is_short", [False, True])
|
@pytest.mark.parametrize("is_short", [False])
|
||||||
def test_adjust_entry_maintain_replace(
|
def test_adjust_entry_maintain_replace(
|
||||||
default_conf_usdt, ticker_usdt, limit_buy_order_old, open_trade,
|
default_conf_usdt, ticker_usdt, limit_buy_order_old, open_trade,
|
||||||
limit_sell_order_old, fee, mocker, caplog, is_short
|
limit_sell_order_old, fee, mocker, caplog, is_short
|
||||||
@@ -2879,6 +2879,7 @@ def test_adjust_entry_maintain_replace(
|
|||||||
freqtrade.manage_open_orders()
|
freqtrade.manage_open_orders()
|
||||||
trades = Trade.session.scalars(
|
trades = Trade.session.scalars(
|
||||||
select(Trade)
|
select(Trade)
|
||||||
|
.where(Order.ft_is_open.is_(True))
|
||||||
.where(Order.ft_trade_id == Trade.id)
|
.where(Order.ft_trade_id == Trade.id)
|
||||||
).all()
|
).all()
|
||||||
assert len(trades) == 1
|
assert len(trades) == 1
|
||||||
@@ -2889,9 +2890,14 @@ def test_adjust_entry_maintain_replace(
|
|||||||
# Check that order is replaced
|
# Check that order is replaced
|
||||||
freqtrade.get_valid_enter_price_and_stake = MagicMock(return_value={100, 10, 1})
|
freqtrade.get_valid_enter_price_and_stake = MagicMock(return_value={100, 10, 1})
|
||||||
freqtrade.strategy.adjust_entry_price = MagicMock(return_value=1234)
|
freqtrade.strategy.adjust_entry_price = MagicMock(return_value=1234)
|
||||||
|
|
||||||
|
# TODO Check why call_count at 0, possible cause of test failure
|
||||||
|
assert freqtrade.strategy.adjust_entry_price.call_count == 2
|
||||||
|
|
||||||
freqtrade.manage_open_orders()
|
freqtrade.manage_open_orders()
|
||||||
trades = Trade.session.scalars(
|
trades = Trade.session.scalars(
|
||||||
select(Trade)
|
select(Trade)
|
||||||
|
.where(Order.ft_is_open.is_(True))
|
||||||
.where(Order.ft_trade_id == Trade.id)
|
.where(Order.ft_trade_id == Trade.id)
|
||||||
).all()
|
).all()
|
||||||
assert len(trades) == 1
|
assert len(trades) == 1
|
||||||
@@ -3512,7 +3518,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None:
|
|||||||
'status': "open"}
|
'status': "open"}
|
||||||
reason = CANCEL_REASON['TIMEOUT']
|
reason = CANCEL_REASON['TIMEOUT']
|
||||||
send_msg_mock.reset_mock()
|
send_msg_mock.reset_mock()
|
||||||
assert freqtrade.handle_cancel_exit(trade, order, order.id, reason)
|
assert freqtrade.handle_cancel_exit(trade, order, order['id'], reason)
|
||||||
assert cancel_order_mock.call_count == 1
|
assert cancel_order_mock.call_count == 1
|
||||||
assert send_msg_mock.call_count == 1
|
assert send_msg_mock.call_count == 1
|
||||||
assert trade.close_rate is None
|
assert trade.close_rate is None
|
||||||
@@ -3524,14 +3530,14 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None:
|
|||||||
# Partial exit - below exit threshold
|
# Partial exit - below exit threshold
|
||||||
order['amount'] = 2
|
order['amount'] = 2
|
||||||
order['filled'] = 1.9
|
order['filled'] = 1.9
|
||||||
assert not freqtrade.handle_cancel_exit(trade, order, order.id, reason)
|
assert not freqtrade.handle_cancel_exit(trade, order, order['id'], reason)
|
||||||
# Assert cancel_order was not called (callcount remains unchanged)
|
# Assert cancel_order was not called (callcount remains unchanged)
|
||||||
assert cancel_order_mock.call_count == 1
|
assert cancel_order_mock.call_count == 1
|
||||||
assert send_msg_mock.call_count == 1
|
assert send_msg_mock.call_count == 1
|
||||||
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
||||||
== CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN'])
|
== CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN'])
|
||||||
|
|
||||||
assert not freqtrade.handle_cancel_exit(trade, order, order.id, reason)
|
assert not freqtrade.handle_cancel_exit(trade, order, order['id'], reason)
|
||||||
|
|
||||||
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
||||||
== CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN'])
|
== CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN'])
|
||||||
@@ -3543,7 +3549,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None:
|
|||||||
send_msg_mock.reset_mock()
|
send_msg_mock.reset_mock()
|
||||||
|
|
||||||
order['filled'] = 1
|
order['filled'] = 1
|
||||||
assert freqtrade.handle_cancel_exit(trade, order, order.id, reason)
|
assert freqtrade.handle_cancel_exit(trade, order, order['id'], reason)
|
||||||
assert send_msg_mock.call_count == 1
|
assert send_msg_mock.call_count == 1
|
||||||
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
assert (send_msg_mock.call_args_list[0][0][0]['reason']
|
||||||
== CANCEL_REASON['PARTIALLY_FILLED'])
|
== CANCEL_REASON['PARTIALLY_FILLED'])
|
||||||
|
|||||||
Reference in New Issue
Block a user