Skip to content

Commit bdd69db

Browse files
authored
Merge pull request freqtrade#12146 from stash86/main-stash
Fix calc_profit_ratio
2 parents 87b0a6d + ec4767a commit bdd69db

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

freqtrade/persistence/trade_model.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,10 +1187,13 @@ def calc_profit_ratio(
11871187
"""
11881188
close_trade_value = self.calc_close_trade_value(rate, amount)
11891189

1190-
if amount is None or open_rate is None:
1190+
if (amount is None) and (open_rate is None):
11911191
open_trade_value = self.open_trade_value
11921192
else:
1193-
open_trade_value = self._calc_open_trade_value(amount, open_rate)
1193+
# Fall back to trade.amount and self.open_rate if necessary
1194+
open_trade_value = self._calc_open_trade_value(
1195+
amount or self.amount, open_rate or self.open_rate
1196+
)
11941197

11951198
if open_trade_value == 0.0:
11961199
return 0.0

tests/freqtradebot/test_freqtradebot.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1528,6 +1528,25 @@ def test_handle_trade(
15281528
assert trade.close_date is not None
15291529
assert trade.exit_reason == "sell_signal1"
15301530

1531+
correct_profit_ratio = trade.calc_profit_ratio(
1532+
rate=trade.close_rate, amount=trade.amount, open_rate=trade.open_rate
1533+
)
1534+
profit_ratio_1 = trade.calc_profit_ratio(rate=trade.close_rate, open_rate=trade.open_rate)
1535+
profit_ratio_2 = trade.calc_profit_ratio(
1536+
rate=trade.close_rate, open_rate=trade.open_rate * 1.02
1537+
)
1538+
profit_ratio_3 = trade.calc_profit_ratio(rate=trade.close_rate, amount=trade.amount)
1539+
profit_ratio_4 = trade.calc_profit_ratio(rate=trade.close_rate)
1540+
profit_ratio_5 = trade.calc_profit_ratio(
1541+
rate=trade.close_rate, amount=trade.amount, open_rate=trade.open_rate * 1.02
1542+
)
1543+
assert correct_profit_ratio == close_profit
1544+
assert correct_profit_ratio == profit_ratio_1
1545+
assert correct_profit_ratio != profit_ratio_2
1546+
assert correct_profit_ratio == profit_ratio_3
1547+
assert correct_profit_ratio == profit_ratio_4
1548+
assert correct_profit_ratio != profit_ratio_5
1549+
15311550

15321551
@pytest.mark.parametrize("is_short", [False, True])
15331552
def test_handle_overlapping_signals(
@@ -5729,7 +5748,7 @@ def test_position_adjust2(mocker, default_conf_usdt, fee) -> None:
57295748
@pytest.mark.parametrize(
57305749
"data",
57315750
[
5732-
# tuple 1 - side amount, price
5751+
# tuple 1 - side, amount, price
57335752
# tuple 2 - amount, open_rate, stake_amount, cumulative_profit, realized_profit, rel_profit
57345753
(
57355754
(("buy", 100, 10), (100.0, 10.0, 1000.0, 0.0, None, None)),

0 commit comments

Comments
 (0)