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
- Use only the time-in-force values the exchange subclass declares (commonly 'GTC'; futures exchanges often add 'IOC'/'FOK').
- Remove custom order_time_in_force to accept the default ('GTC').
- 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
- Check _ft_has['order_time_in_force'] per exchange before customizing the policy.
- Omit order_time_in_force entirely unless a strategy requires non-default behavior.
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
- Invalid timeframe '{timeframe}'. This exchange supports: {se
- Exchange {self.name} does not support market orders.
- On exchange stoploss is not supported for {self.name}.
- On exchange stoploss price type '{order_types['stoploss_pric
- Orderbook not available for {self.name}.
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/f3794d4bdd48839e.
Report an issue: GitHub.