freqtrade/freqtrade · error · TemporaryError
Could not set leverage due to {e.__class__.__name__}. Messag
Error message
Could not set leverage due to {e.__class__.__name__}. Message: {e} What it means
TemporaryError raised by Okx._set_leverage() when set_leverage fails with ccxt.OperationFailed/ExchangeError AND __fetch_leverage_already_set() confirms the leverage is NOT already at the target. OKX rejects redundant set-leverage calls with an error, so the code first checks whether the error is benign (leverage already equals the requested value); only a genuine failure raises.
Source
Thrown at freqtrade/exchange/okx.py:173
def _lev_prep(self, pair: str, leverage: float, side: BuySell, accept_fail: bool = False):
if self.trading_mode != TradingMode.SPOT and self.margin_mode is not None:
try:
res = self._api.set_leverage(
leverage=leverage,
symbol=pair,
params={
"mgnMode": self.margin_mode.value,
"posSide": self._get_posSide(side, False),
},
)
self._log_exchange_response("set_leverage", res)
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.OperationFailed, ccxt.ExchangeError) as e:
already_set = self.__fetch_leverage_already_set(pair, leverage, side)
if not already_set:
raise TemporaryError(
f"Could not set leverage due to {e.__class__.__name__}. Message: {e}"
) from e
except ccxt.BaseError as e:
raise OperationalException(e) from e
def get_max_pair_stake_amount(self, pair: str, price: float, leverage: float = 1.0) -> float:
if self.trading_mode == TradingMode.SPOT:
return float("inf") # Not actually inf, but this probably won't matter for SPOT
if pair not in self._leverage_tiers:
return float("inf")
pair_tiers = self._leverage_tiers[pair]
last_max_notional = pair_tiers[-1]["maxNotional"]
if last_max_notional is None:
return float("inf")
return last_max_notional / leverage
View on GitHub (pinned to 1c8edfe4d1)
Solutions
- Read the embedded ccxt message — OKX usually states 'leverage greater than the max' or similar; lower max_leverage in the strategy.
- Verify margin_mode config (isolated/cross) matches what the account and pair support.
- Confirm the pair is still tradable on OKX.
- Update ccxt so leverage tier data and error codes are current.
Example fix
# strategy.py — clamp leverage to what OKX allows for the pair
# before
def leverage(self, pair, current_time, current_rate, proposed_leverage, max_leverage, entry_tag, side, **kwargs) -> float:
return 10.0
# after
def leverage(self, pair, current_time, current_rate, proposed_leverage, max_leverage, entry_tag, side, **kwargs) -> float:
return min(10.0, max_leverage) Defensive patterns
Strategy: validation
Validate before calling
tiers = exchange.get_leverage_tiers(pair) if hasattr(exchange, 'get_leverage_tiers') else {}
max_ok = tiers.get(pair, [{}])[-1].get('maxLeverage', 100) if tiers else 100
lev = min(requested_leverage, max_ok) Try / catch
from freqtrade.exceptions import TemporaryError
try:
exchange.set_leverage(lev, pair, side)
except TemporaryError as e:
if 'leverage' in str(e).lower():
lev = min(lev, 3) # retry with conservative leverage
exchange.set_leverage(lev, pair, side) Prevention
- Clamp strategy leverage() return to max_leverage argument.
- Match margin_mode config to what the pair supports (isolated vs cross).
- Update leverage tier data via ccxt refresh after listing/delisting changes.
When it happens
Trigger: Placing an order whose leverage differs from the account's current setting while OKX rejects the change: leverage above the tier limit for the pair/margin mode, insufficient margin for requested leverage, or 'Instrument not found' style errors.
Common situations: Strategy max_leverage exceeds OKX's per-pair cap for the position tier, margin mode mismatch (isolated vs cross), or a pair delisted/renamed on OKX.
Related errors
- Error in additional_exchange_init due to {e.__class__.__name
- Could not get order due to {e.__class__.__name__}. Message:
- Could not place {side} order due to {e.__class__.__name__}.
- Could not get order due to {e.__class__.__name__}. Message:
- Could not get balance due to {e.__class__.__name__}. Message
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/4d3d663aaf09d5a8.
Report an issue: GitHub.