From 5f07546b8655c23af90b07229d88b99ddd71b900 Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Wed, 9 Feb 2022 03:18:32 -0600 Subject: [PATCH] moved leverage_tier caching to get_leverage_tiers_for_pair --- freqtrade/exchange/exchange.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index b677e7bd1..210f7d7e7 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1911,12 +1911,12 @@ class Exchange: if stake_amount is None: raise OperationalException( 'binance.get_max_leverage requires argument stake_amount') + if pair not in self._leverage_tiers: tiers = self.get_leverage_tiers_for_pair(pair) if not tiers: # Not a leveraged market return 1.0 - else: - self._leverage_tiers[pair] = tiers + if stake_amount == 0: return self._leverage_tiers[pair][0]['lev'] # Max lev for lowest amount @@ -2248,7 +2248,7 @@ class Exchange: "Freqtrade only supports isolated futures for leverage trading") @retrier - def get_leverage_tiers_for_pair(self, pair: str): + def get_leverage_tiers_for_pair(self, pair: str) -> List: # When exchanges can load all their leverage tiers at once in the constructor # then this method does nothing, it should only be implemented when the leverage # tiers requires per symbol fetching to avoid excess api calls @@ -2257,12 +2257,17 @@ class Exchange: not self._ft_has['can_fetch_multiple_tiers'] and self.trading_mode == TradingMode.FUTURES ): + self._leverage_tiers[pair] = [] try: - return self._api.fetch_leverage_tiers(pair) + tiers = self._api.fetch_leverage_tiers(pair) + for tier in tiers[pair]: + self._leverage_tiers[pair].append(self.parse_leverage_tier(tier)) + + return tiers except ccxt.BadRequest: - return None + return [] else: - return None + return [] def get_maintenance_ratio_and_amt( self, @@ -2285,10 +2290,6 @@ class Exchange: tiers = self.get_leverage_tiers_for_pair(pair) if not bool(tiers): raise InvalidOrderException(f"Cannot calculate liquidation price for {pair}") - else: - self._leverage_tiers[pair] = [] - for tier in tiers[pair]: - self._leverage_tiers[pair].append(self.parse_leverage_tier(tier)) pair_tiers = self._leverage_tiers[pair] for tier in reversed(pair_tiers): if nominal_value >= tier['min']: