Skip to content

Commit be572ba

Browse files
committed
fix: include leverage tiers in max_stake calculation
closes freqtrade#11650
1 parent f711afd commit be572ba

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

freqtrade/exchange/exchange.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,8 +1000,11 @@ def _get_stake_amount_limit(
10001000
# it should not be more than 50%
10011001
stoploss_reserve = max(min(stoploss_reserve, 1.5), 1)
10021002
else:
1003+
# is_max
10031004
margin_reserve = 1.0
10041005
stoploss_reserve = 1.0
1006+
if max_from_tiers := self._get_max_notional_from_tiers(pair, leverage=leverage):
1007+
stake_limits.append(max_from_tiers)
10051008

10061009
if limits["cost"][limit] is not None:
10071010
stake_limits.append(
@@ -3391,6 +3394,23 @@ def get_max_leverage(self, pair: str, stake_amount: float | None) -> float:
33913394
else:
33923395
return 1.0
33933396

3397+
def _get_max_notional_from_tiers(self, pair: str, leverage: float) -> float | None:
3398+
"""
3399+
get max_notional from leverage_tiers
3400+
:param pair: The base/quote currency pair being traded
3401+
:param leverage: The leverage to be used
3402+
:return: The maximum notional value for the given leverage or None if not found
3403+
"""
3404+
if self.trading_mode != TradingMode.FUTURES:
3405+
return None
3406+
if pair not in self._leverage_tiers:
3407+
return None
3408+
pair_tiers = self._leverage_tiers[pair]
3409+
for tier in reversed(pair_tiers):
3410+
if leverage <= tier["maxLeverage"]:
3411+
return tier["maxNotional"]
3412+
return None
3413+
33943414
@retrier
33953415
def _set_leverage(
33963416
self,

0 commit comments

Comments
 (0)