From 76e5d5b232b562ce1b7583b933ceb36d62110535 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 5 Mar 2022 15:53:40 +0100 Subject: [PATCH] Fix stake-amount handling for dry-run --- freqtrade/exchange/exchange.py | 2 +- freqtrade/wallets.py | 3 +-- tests/exchange/test_exchange.py | 14 +++++++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index cf0ef62c0..d561fe4cc 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -779,7 +779,7 @@ class Exchange: 'price': rate, 'average': rate, 'amount': _amount, - 'cost': _amount * rate, + 'cost': _amount * rate / leverage, 'type': ordertype, 'side': side, 'filled': 0, diff --git a/freqtrade/wallets.py b/freqtrade/wallets.py index 153512897..7a46f0397 100644 --- a/freqtrade/wallets.py +++ b/freqtrade/wallets.py @@ -102,8 +102,7 @@ class Wallets: for position in open_trades: # size = self._exchange._contracts_to_amount(position.pair, position['contracts']) size = position.amount - # TODO-lev: stake_amount in real trades does not include the leverage ... - collateral = position.stake_amount / position.leverage + collateral = position.stake_amount leverage = position.leverage tot_in_trades -= collateral _positions[position.pair] = PositionWallet( diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 6b2dd4334..1f6be2860 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -1040,12 +1040,14 @@ def test_exchange_has(default_conf, mocker): assert not exchange.exchange_has("deadbeef") -@pytest.mark.parametrize("side", [ - ("buy"), - ("sell") +@pytest.mark.parametrize("side,leverage", [ + ("buy", 1), + ("buy", 5), + ("sell", 1.0), + ("sell", 5.0), ]) @pytest.mark.parametrize("exchange_name", EXCHANGES) -def test_create_dry_run_order(default_conf, mocker, side, exchange_name): +def test_create_dry_run_order(default_conf, mocker, side, exchange_name, leverage): default_conf['dry_run'] = True exchange = get_patched_exchange(mocker, default_conf, id=exchange_name) @@ -1055,7 +1057,7 @@ def test_create_dry_run_order(default_conf, mocker, side, exchange_name): side=side, amount=1, rate=200, - leverage=1.0 + leverage=leverage ) assert 'id' in order assert f'dry_run_{side}_' in order["id"] @@ -1063,6 +1065,8 @@ def test_create_dry_run_order(default_conf, mocker, side, exchange_name): assert order["type"] == "limit" assert order["symbol"] == "ETH/BTC" assert order["amount"] == 1 + assert order["leverage"] == leverage + assert order["cost"] == 1 * 200 / leverage @pytest.mark.parametrize("side,startprice,endprice", [