freqtrade/freqtrade · error · ConfigurationError

Time in force policies are not supported for {self.name} yet

Error message

Time in force policies are not supported for {self.name} yet.

What it means

Raised in validate_order_time_in_force() when any configured time-in-force value (uppercased) is not in the exchange subclass's _ft_has['order_time_in_force'] list. That list defines which policies (GTC, IOC, FOK, etc.) the exchange accepts; an unknown policy cannot be mapped to the exchange's API values.

Source

Thrown at freqtrade/exchange/exchange.py:853

                )

    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"]
        ):
            raise ConfigurationError(f"Ticker pricing not available for {self.name}.")

    def validate_order_time_in_force(self, order_time_in_force: dict) -> None:
        """
        Checks if order time in force configured in strategy/config are supported
        """
        if any(
            v.upper() not in self._ft_has["order_time_in_force"]
            for k, v in order_time_in_force.items()
        ):
            raise ConfigurationError(
                f"Time in force policies are not supported for {self.name} yet."
            )

    def validate_orderflow(self, exchange: dict) -> None:
        if exchange.get("use_public_trades", False) and (
            not self.exchange_has("fetchTrades") or not self._ft_has["trades_has_history"]
        ):
            raise ConfigurationError(
                f"Trade data not available for {self.name}. Can't use orderflow feature."
            )

    def validate_freqai(self, config: Config) -> None:
        freqai_enabled = config.get("freqai", {}).get("enabled", False)
        override = config.get("freqai", {}).get("override_exchange_checks", False)
        if not override and freqai_enabled and not self._ft_has["ohlcv_has_history"]:
            raise ConfigurationError(
                f"Historic OHLCV data not available for {self.name}. Can't use freqAI."
            )

View on GitHub (pinned to 1c8edfe4d1)

Solutions

  1. Use only the time-in-force values the exchange subclass declares (commonly 'GTC'; futures exchanges often add 'IOC'/'FOK').
  2. Remove custom order_time_in_force to accept the default ('GTC').
  3. If post-only is desired, switch to an exchange/implementation that supports 'PO'.

Example fix

# config.json - before
"order_time_in_force": { "entry": "PO", "exit": "PO" }

# after
"order_time_in_force": { "entry": "GTC", "exit": "GTC" }
Defensive patterns

Strategy: validation

Validate before calling

allowed = exchange._ft_has['order_time_in_force']
bad = {k: v for k, v in config['order_time_in_force'].items() if v.upper() not in allowed}
if bad:
    raise SystemExit(f"Unsupported time in force {bad}; allowed: {allowed}")

Prevention

When it happens

Trigger: Config "order_time_in_force": {"entry": "PO", "exit": "PO"} on an exchange whose ft_has only allows e.g. ['GTC','IOC','FOK']; using 'PO' (post-only) on exchanges without it; lowercase or malformed values are uppercased, but wrong policy names still fail.

Common situations: Copy-pasting binance-specific config (PO support) onto kraken/bybit variants; policy naming differences between exchanges; typos like 'GtC' work but 'GTC ' does not.

Related errors


AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15). Data as JSON: /api/errors/f3794d4bdd48839e. Report an issue: GitHub.