freqtrade/freqtrade · error · ConfigurationError
On exchange stoploss is not supported for {self.name}.
Error message
On exchange stoploss is not supported for {self.name}. What it means
Raised in validate_stop_ordertypes() when config sets order_types['stoploss_on_exchange'] = True but the exchange subclass's _ft_has dict does not declare stoploss_on_exchange support. On-exchange stoploss requires per-exchange implementation work in freqtrade (order placement, polling, adjustment); merely having the option in config is not enough. This is a hard startup failure, not a warning.
Source
Thrown at freqtrade/exchange/exchange.py:824
raise ConfigurationError("Timeframes < 1m are currently not supported by Freqtrade.")
def validate_ordertypes(self, order_types: dict) -> None:
"""
Checks if order-types configured in strategy/config are supported
"""
if any(v == "market" for k, v in order_types.items()):
if not self.exchange_has("createMarketOrder"):
raise ConfigurationError(f"Exchange {self.name} does not support market orders.")
self.validate_stop_ordertypes(order_types)
def validate_stop_ordertypes(self, order_types: dict) -> None:
"""
Validate stoploss order types
"""
if order_types.get("stoploss_on_exchange") and not self._ft_has.get(
"stoploss_on_exchange", False
):
raise ConfigurationError(f"On exchange stoploss is not supported for {self.name}.")
if self.trading_mode == TradingMode.FUTURES:
price_mapping = self._ft_has.get("stop_price_type_value_mapping", {}).keys()
if (
order_types.get("stoploss_on_exchange", False) is True
and "stoploss_price_type" in order_types
and order_types["stoploss_price_type"] not in price_mapping
):
raise ConfigurationError(
f"On exchange stoploss price type '{order_types['stoploss_price_type']}' "
f"is not supported for {self.name}."
)
def validate_pricing(self, pricing: dict) -> None:
if pricing.get("use_order_book", False) and not self.exchange_has("fetchL2OrderBook"):
raise ConfigurationError(f"Orderbook not available for {self.name}.")
if not pricing.get("use_order_book", False) and (
not self.exchange_has("fetchTicker") or not self._ft_has["tickers_have_price"]
):View on GitHub (pinned to 1c8edfe4d1)
Solutions
- Set "stoploss_on_exchange": false in order_types (freqtrade then manages stoploss locally).
- Switch to an exchange whose freqtrade subclass supports on-exchange stoploss (see its _ft_has).
- Keep stoploss_on_exchange only in exchange-specific config files.
Example fix
# config.json - before
"order_types": { ..., "stoploss_on_exchange": true }
# after
"order_types": { ..., "stoploss_on_exchange": false } Defensive patterns
Strategy: validation
Validate before calling
if config['order_types'].get('stoploss_on_exchange') and not exchange._ft_has.get('stoploss_on_exchange', False):
raise SystemExit("stoploss_on_exchange unsupported here; set it false") Prevention
- Consult the exchange subclass's _ft_has dict before enabling exchange-managed stoploss.
- Default stoploss_on_exchange to false and enable per exchange only after checking docs/_ft_has.
When it happens
Trigger: Enabling stoploss_on_exchange on exchanges whose subclass (e.g. many spot implementations) lacks stoploss_on_exchange in _ft_has; inheriting a strategy-config template written for binance futures and using it on another exchange.
Common situations: Config copy-paste between exchanges; users assuming ccxt stop-order support implies freqtrade support; running spot mode on an exchange where only futures supports it.
Related errors
- On exchange stoploss price type '{order_types['stoploss_pric
- Invalid timeframe '{timeframe}'. This exchange supports: {se
- Exchange {self.name} does not support market orders.
- Orderbook not available for {self.name}.
- Ticker pricing not available for {self.name}.
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/b77de18b839e88f3.
Report an issue: GitHub.