From a65dcc709e289ec7e8c28f9d54033179caa1910d Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Wed, 16 Feb 2022 08:09:43 -0600 Subject: [PATCH 1/2] leverage in trade.stake_amount calculation --- freqtrade/freqtradebot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 597ab98d6..fb618a536 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1291,8 +1291,7 @@ class FreqtradeBot(LoggingMixin): # * Check edge cases, we don't want to make leverage > 1.0 if we don't have to # * (for leverage modes which aren't isolated futures) - # TODO-lev: The below calculation needs to include leverage ... - trade.stake_amount = trade.amount * trade.open_rate + trade.stake_amount = trade.amount * trade.open_rate / trade.leverage self.update_trade_state(trade, trade.open_order_id, corder) trade.open_order_id = None From 989edca6227f6e8388bea9ceb4fbb319deb7eeb4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 18 Feb 2022 06:41:15 +0100 Subject: [PATCH 2/2] Add test-case for cancel stake update with leverage --- tests/test_freqtradebot.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 61c7d9dfa..f22ed72d4 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -2564,11 +2564,13 @@ def test_check_handle_cancelled_sell( @pytest.mark.parametrize("is_short", [False, True]) +@pytest.mark.parametrize("leverage", [1, 3, 5, 10]) def test_check_handle_timedout_partial( - default_conf_usdt, ticker_usdt, limit_buy_order_old_partial, is_short, + default_conf_usdt, ticker_usdt, limit_buy_order_old_partial, is_short, leverage, open_trade, mocker ) -> None: rpc_mock = patch_RPCManager(mocker) + open_trade.leverage = leverage limit_buy_order_old_partial['id'] = open_trade.open_order_id limit_buy_canceled = deepcopy(limit_buy_order_old_partial) limit_buy_canceled['status'] = 'canceled' @@ -2582,7 +2584,7 @@ def test_check_handle_timedout_partial( cancel_order_with_result=cancel_order_mock ) freqtrade = FreqtradeBot(default_conf_usdt) - + prior_stake = open_trade.stake_amount Trade.query.session.add(open_trade) # check it does cancel buy orders over the time limit @@ -2593,7 +2595,8 @@ def test_check_handle_timedout_partial( trades = Trade.query.filter(Trade.open_order_id.is_(open_trade.open_order_id)).all() assert len(trades) == 1 assert trades[0].amount == 23.0 - assert trades[0].stake_amount == open_trade.open_rate * trades[0].amount + assert trades[0].stake_amount == open_trade.open_rate * trades[0].amount / leverage + assert trades[0].stake_amount != prior_stake @pytest.mark.parametrize("is_short", [False, True])