From 730bef292097ffa5fc5f2323421fe8cbcc519115 Mon Sep 17 00:00:00 2001 From: Axel-CH Date: Mon, 9 Sep 2024 19:28:04 -0400 Subject: [PATCH] add comments and logs for failing test, create untied_assets propertyto Trade --- freqtrade/persistence/trade_model.py | 22 +++++++++++++++++----- tests/freqtradebot/test_integration.py | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/freqtrade/persistence/trade_model.py b/freqtrade/persistence/trade_model.py index 2df78796f..76f69793f 100644 --- a/freqtrade/persistence/trade_model.py +++ b/freqtrade/persistence/trade_model.py @@ -178,6 +178,7 @@ class Order(ModelBase): return ( f"Order(id={self.id}, trade={self.ft_trade_id}, order_id={self.order_id}, " f"side={self.side}, filled={self.safe_filled}, price={self.safe_price}, " + f"amount={self.amount}, " f"status={self.status}, date={self.order_date_utc:{DATETIME_PRINT_FORMAT}})" ) @@ -616,10 +617,7 @@ class LocalTrade: return (entry_orders_filled_qty - exit_orders_filled_qty) > 0 @property - def has_untied_assets(self) -> bool: - """ - True if there is still remaining position not yet tied up to exit order - """ + def untied_assets(self) -> float: entry_orders = [ o for o in self.orders if o.ft_order_side == self.entry_side @@ -633,7 +631,21 @@ class LocalTrade: exit_orders_remaining_qty = sum(exo.safe_remaining for exo in exit_orders) untied_remaining = entry_orders_filled_qty - exit_orders_remaining_qty - return untied_remaining > 0 + logger.info(f"entry_orders: {entry_orders}") + logger.info(f"exit_orders: {exit_orders}") + logger.info(f"entry_orders_filled_qty: {entry_orders_filled_qty}") + logger.info(f"exit_orders_remaining_qty: {exit_orders_remaining_qty}") + + logger.info(f"untied_remaining: {untied_remaining}") + + return untied_remaining + + @property + def has_untied_assets(self) -> bool: + """ + True if there is still remaining position not yet tied up to exit order + """ + return self.untied_assets > 0 @property def open_sl_orders(self) -> List[Order]: diff --git a/tests/freqtradebot/test_integration.py b/tests/freqtradebot/test_integration.py index 75cc81fa1..649bacddf 100644 --- a/tests/freqtradebot/test_integration.py +++ b/tests/freqtradebot/test_integration.py @@ -1,3 +1,4 @@ +import logging import time from unittest.mock import MagicMock @@ -347,8 +348,8 @@ def test_dca_short(default_conf_usdt, ticker_usdt, fee, mocker) -> None: assert trade.nr_of_successful_exits == 1 -@pytest.mark.parametrize("leverage", [1, 2]) -def test_dca_order_adjust(default_conf_usdt, ticker_usdt, leverage, fee, mocker) -> None: +@pytest.mark.parametrize("leverage", [1]) +def test_dca_order_adjust(default_conf_usdt, ticker_usdt, leverage, fee, mocker, caplog) -> None: default_conf_usdt["position_adjustment_enable"] = True default_conf_usdt["trading_mode"] = "futures" default_conf_usdt["margin_mode"] = "isolated" @@ -478,9 +479,24 @@ def test_dca_order_adjust(default_conf_usdt, ticker_usdt, leverage, fee, mocker) assert pytest.approx(trade.amount) == 91.689215 * leverage assert pytest.approx(trade.orders[-1].amount) == 91.689215 * leverage assert freqtrade.strategy.adjust_entry_price.call_count == 0 + + print("BEFORE Process trade.orders") + print(trade.orders) + + # adding this will prevent the second exit order creation, but this test case must be handled properly + #freqtrade.strategy.custom_exit = MagicMock(return_value=None) + + caplog.clear() + caplog.set_level(logging.DEBUG) # Process again, should not adjust entry price freqtrade.process() trade = Trade.get_trades().first() + + print(f"DEBUG TEST") + print(caplog.text) + print("AFTER Process trade.orders") + print(trade.orders) + assert len(trade.orders) == 5 assert trade.orders[-1].status == "open" assert trade.orders[-1].price == 2.02