{"record":{"id":"b77de18b839e88f3","repo":"freqtrade/freqtrade","slug":"on-exchange-stoploss-is-not-supported-for-self-na","errorCode":null,"errorMessage":"On exchange stoploss is not supported for {self.name}.","messagePattern":"On exchange stoploss is not supported for (.+?)\\.","errorType":"validation","errorClass":"ConfigurationError","httpStatus":null,"severity":"error","filePath":"freqtrade/exchange/exchange.py","lineNumber":824,"sourceCode":"            raise ConfigurationError(\"Timeframes < 1m are currently not supported by Freqtrade.\")\n\n    def validate_ordertypes(self, order_types: dict) -> None:\n        \"\"\"\n        Checks if order-types configured in strategy/config are supported\n        \"\"\"\n        if any(v == \"market\" for k, v in order_types.items()):\n            if not self.exchange_has(\"createMarketOrder\"):\n                raise ConfigurationError(f\"Exchange {self.name} does not support market orders.\")\n        self.validate_stop_ordertypes(order_types)\n\n    def validate_stop_ordertypes(self, order_types: dict) -> None:\n        \"\"\"\n        Validate stoploss order types\n        \"\"\"\n        if order_types.get(\"stoploss_on_exchange\") and not self._ft_has.get(\n            \"stoploss_on_exchange\", False\n        ):\n            raise ConfigurationError(f\"On exchange stoploss is not supported for {self.name}.\")\n        if self.trading_mode == TradingMode.FUTURES:\n            price_mapping = self._ft_has.get(\"stop_price_type_value_mapping\", {}).keys()\n            if (\n                order_types.get(\"stoploss_on_exchange\", False) is True\n                and \"stoploss_price_type\" in order_types\n                and order_types[\"stoploss_price_type\"] not in price_mapping\n            ):\n                raise ConfigurationError(\n                    f\"On exchange stoploss price type '{order_types['stoploss_price_type']}' \"\n                    f\"is not supported for {self.name}.\"\n                )\n\n    def validate_pricing(self, pricing: dict) -> None:\n        if pricing.get(\"use_order_book\", False) and not self.exchange_has(\"fetchL2OrderBook\"):\n            raise ConfigurationError(f\"Orderbook not available for {self.name}.\")\n        if not pricing.get(\"use_order_book\", False) and (\n            not self.exchange_has(\"fetchTicker\") or not self._ft_has[\"tickers_have_price\"]\n        ):","sourceCodeStart":806,"sourceCodeEnd":842,"githubUrl":"https://github.com/freqtrade/freqtrade/blob/1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15/freqtrade/exchange/exchange.py#L806-L842","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# config.json - before\n\"order_types\": { ..., \"stoploss_on_exchange\": true }\n\n# after\n\"order_types\": { ..., \"stoploss_on_exchange\": false }","handlingStrategy":"validation","validationCode":"if config['order_types'].get('stoploss_on_exchange') and not exchange._ft_has.get('stoploss_on_exchange', False):\n    raise SystemExit(\"stoploss_on_exchange unsupported here; set it false\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["exchange","stoploss","configuration","ft-has","startup"],"backgroundTag":null,"analyzedSha":"1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15","analyzedAt":"2026-08-15T05:09:08.096Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}