mirror of
https://github.com/freqtrade/freqtrade.git
synced 2026-01-25 16:30:26 +00:00
Merge pull request #12146 from stash86/main-stash
Fix calc_profit_ratio
This commit is contained in:
@@ -1187,10 +1187,13 @@ class LocalTrade:
|
|||||||
"""
|
"""
|
||||||
close_trade_value = self.calc_close_trade_value(rate, amount)
|
close_trade_value = self.calc_close_trade_value(rate, amount)
|
||||||
|
|
||||||
if amount is None or open_rate is None:
|
if (amount is None) and (open_rate is None):
|
||||||
open_trade_value = self.open_trade_value
|
open_trade_value = self.open_trade_value
|
||||||
else:
|
else:
|
||||||
open_trade_value = self._calc_open_trade_value(amount, open_rate)
|
# Fall back to trade.amount and self.open_rate if necessary
|
||||||
|
open_trade_value = self._calc_open_trade_value(
|
||||||
|
amount or self.amount, open_rate or self.open_rate
|
||||||
|
)
|
||||||
|
|
||||||
if open_trade_value == 0.0:
|
if open_trade_value == 0.0:
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|||||||
@@ -1528,6 +1528,25 @@ def test_handle_trade(
|
|||||||
assert trade.close_date is not None
|
assert trade.close_date is not None
|
||||||
assert trade.exit_reason == "sell_signal1"
|
assert trade.exit_reason == "sell_signal1"
|
||||||
|
|
||||||
|
correct_profit_ratio = trade.calc_profit_ratio(
|
||||||
|
rate=trade.close_rate, amount=trade.amount, open_rate=trade.open_rate
|
||||||
|
)
|
||||||
|
profit_ratio_1 = trade.calc_profit_ratio(rate=trade.close_rate, open_rate=trade.open_rate)
|
||||||
|
profit_ratio_2 = trade.calc_profit_ratio(
|
||||||
|
rate=trade.close_rate, open_rate=trade.open_rate * 1.02
|
||||||
|
)
|
||||||
|
profit_ratio_3 = trade.calc_profit_ratio(rate=trade.close_rate, amount=trade.amount)
|
||||||
|
profit_ratio_4 = trade.calc_profit_ratio(rate=trade.close_rate)
|
||||||
|
profit_ratio_5 = trade.calc_profit_ratio(
|
||||||
|
rate=trade.close_rate, amount=trade.amount, open_rate=trade.open_rate * 1.02
|
||||||
|
)
|
||||||
|
assert correct_profit_ratio == close_profit
|
||||||
|
assert correct_profit_ratio == profit_ratio_1
|
||||||
|
assert correct_profit_ratio != profit_ratio_2
|
||||||
|
assert correct_profit_ratio == profit_ratio_3
|
||||||
|
assert correct_profit_ratio == profit_ratio_4
|
||||||
|
assert correct_profit_ratio != profit_ratio_5
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("is_short", [False, True])
|
@pytest.mark.parametrize("is_short", [False, True])
|
||||||
def test_handle_overlapping_signals(
|
def test_handle_overlapping_signals(
|
||||||
@@ -5729,7 +5748,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None:
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"data",
|
"data",
|
||||||
[
|
[
|
||||||
# tuple 1 - side amount, price
|
# tuple 1 - side, amount, price
|
||||||
# tuple 2 - amount, open_rate, stake_amount, cumulative_profit, realized_profit, rel_profit
|
# tuple 2 - amount, open_rate, stake_amount, cumulative_profit, realized_profit, rel_profit
|
||||||
(
|
(
|
||||||
(("buy", 100, 10), (100.0, 10.0, 1000.0, 0.0, None, None)),
|
(("buy", 100, 10), (100.0, 10.0, 1000.0, 0.0, None, None)),
|
||||||
|
|||||||
Reference in New Issue
Block a user