Ensure comparisions align when closing a trade
This commit is contained in:
parent
e4b7bcaeab
commit
1dd56e35d5
@ -875,13 +875,14 @@ class LocalTrade():
|
|||||||
self.realized_profit = close_profit_abs
|
self.realized_profit = close_profit_abs
|
||||||
self.close_profit_abs = profit
|
self.close_profit_abs = profit
|
||||||
|
|
||||||
if current_amount > ZERO:
|
current_amount_tr = amount_to_precision(float(current_amount),
|
||||||
|
self.amount_precision, self.precision_mode)
|
||||||
|
if current_amount_tr > 0.0:
|
||||||
# Trade is still open
|
# Trade is still open
|
||||||
# Leverage not updated, as we don't allow changing leverage through DCA at the moment.
|
# Leverage not updated, as we don't allow changing leverage through DCA at the moment.
|
||||||
self.open_rate = price_to_precision(float(current_stake / current_amount),
|
self.open_rate = price_to_precision(float(current_stake / current_amount),
|
||||||
self.price_precision, self.precision_mode)
|
self.price_precision, self.precision_mode)
|
||||||
self.amount = amount_to_precision(float(current_amount),
|
self.amount = current_amount_tr
|
||||||
self.amount_precision, self.precision_mode)
|
|
||||||
self.stake_amount = float(current_stake) / (self.leverage or 1.0)
|
self.stake_amount = float(current_stake) / (self.leverage or 1.0)
|
||||||
self.fee_open_cost = self.fee_open * float(current_stake)
|
self.fee_open_cost = self.fee_open * float(current_stake)
|
||||||
self.recalc_open_trade_value()
|
self.recalc_open_trade_value()
|
||||||
|
@ -220,8 +220,6 @@ def test_dca_buying(default_conf_usdt, ticker_usdt, fee, mocker) -> None:
|
|||||||
'freqtrade.exchange.Exchange',
|
'freqtrade.exchange.Exchange',
|
||||||
fetch_ticker=ticker_usdt,
|
fetch_ticker=ticker_usdt,
|
||||||
get_fee=fee,
|
get_fee=fee,
|
||||||
amount_to_precision=lambda s, x, y: y,
|
|
||||||
price_to_precision=lambda s, x, y: y,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
patch_get_signal(freqtrade)
|
patch_get_signal(freqtrade)
|
||||||
@ -249,7 +247,7 @@ def test_dca_buying(default_conf_usdt, ticker_usdt, fee, mocker) -> None:
|
|||||||
assert len(trade.orders) == 2
|
assert len(trade.orders) == 2
|
||||||
for o in trade.orders:
|
for o in trade.orders:
|
||||||
assert o.status == "closed"
|
assert o.status == "closed"
|
||||||
assert trade.stake_amount == 120
|
assert pytest.approx(trade.stake_amount) == 120
|
||||||
|
|
||||||
# Open-rate averaged between 2.0 and 2.0 * 0.995
|
# Open-rate averaged between 2.0 and 2.0 * 0.995
|
||||||
assert trade.open_rate < 2.0
|
assert trade.open_rate < 2.0
|
||||||
@ -259,9 +257,9 @@ def test_dca_buying(default_conf_usdt, ticker_usdt, fee, mocker) -> None:
|
|||||||
freqtrade.process()
|
freqtrade.process()
|
||||||
trade = Trade.get_trades().first()
|
trade = Trade.get_trades().first()
|
||||||
assert len(trade.orders) == 2
|
assert len(trade.orders) == 2
|
||||||
assert trade.stake_amount == 120
|
assert pytest.approx(trade.stake_amount) == 120
|
||||||
assert trade.orders[0].amount == 30
|
assert trade.orders[0].amount == 30
|
||||||
assert trade.orders[1].amount == 60 / ticker_usdt_modif['bid']
|
assert pytest.approx(trade.orders[1].amount) == 60 / ticker_usdt_modif['bid']
|
||||||
|
|
||||||
assert pytest.approx(trade.amount) == trade.orders[0].amount + trade.orders[1].amount
|
assert pytest.approx(trade.amount) == trade.orders[0].amount + trade.orders[1].amount
|
||||||
assert trade.nr_of_successful_buys == 2
|
assert trade.nr_of_successful_buys == 2
|
||||||
@ -274,7 +272,7 @@ def test_dca_buying(default_conf_usdt, ticker_usdt, fee, mocker) -> None:
|
|||||||
assert trade.is_open is False
|
assert trade.is_open is False
|
||||||
assert trade.orders[0].amount == 30
|
assert trade.orders[0].amount == 30
|
||||||
assert trade.orders[0].side == 'buy'
|
assert trade.orders[0].side == 'buy'
|
||||||
assert trade.orders[1].amount == 60 / ticker_usdt_modif['bid']
|
assert pytest.approx(trade.orders[1].amount) == 60 / ticker_usdt_modif['bid']
|
||||||
# Sold everything
|
# Sold everything
|
||||||
assert trade.orders[-1].side == 'sell'
|
assert trade.orders[-1].side == 'sell'
|
||||||
assert trade.orders[2].amount == trade.amount
|
assert trade.orders[2].amount == trade.amount
|
||||||
|
Loading…
Reference in New Issue
Block a user