freqtrade/freqtrade · error · ConfigurationError

Historic OHLCV data not available for {self.name}. Can't use

Error message

Historic OHLCV data not available for {self.name}. Can't use freqAI.

What it means

Raised in validate_freqai() when freqai.enabled is true, freqai.override_exchange_checks is false, and the exchange subclass's _ft_has['ohlcv_has_history'] is false. FreqAI training needs substantial historical OHLCV; exchanges that only serve a rolling window (no history) cannot supply it. The override flag exists specifically to bypass this check with a warning.

Source

Thrown at freqtrade/exchange/exchange.py:869

            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."
            )
        elif override and freqai_enabled and not self._ft_has["ohlcv_has_history"]:
            logger.warning(
                "Overriding exchange checks for freqAI. Make sure that your exchange supports "
                "fetching historic OHLCV data, otherwise freqAI will not work."
            )

    def validate_demo_trading(self, exchange_conf: dict) -> None:
        """Validate demo trading configuration
        Prevents accidental configuration with wrong expectations.
        """
        if exchange_conf.get("demo_trading", False):
            if not self.get_option("supports_demo_trading"):
                raise ConfigurationError(f"Demo trading is not supported for {self.name}.")
            else:
                logger.info(f"Demo trading enabled for {self.name}")

View on GitHub (pinned to 1c8edfe4d1)

Solutions

  1. Use an exchange with full OHLCV history (e.g. binance, kraken) for freqAI.
  2. If you accept the limitation (live-only training data), set freqai.override_exchange_checks: true — freqtrade then logs a warning instead.
  3. Supply training data via a data file / datadir workflow instead of the live exchange.

Example fix

# config.json - before
"freqai": { "enabled": true }

# after
"freqai": { "enabled": true, "override_exchange_checks": true }
Defensive patterns

Strategy: validation

Validate before calling

if config.get('freqai', {}).get('enabled'):
    if not exchange._ft_has['ohlcv_has_history']:
        if not config['freqai'].get('override_exchange_checks'):
            raise SystemExit("freqAI needs historic OHLCV; override or change exchange")

Prevention

When it happens

Trigger: Enabling the freqai config section on exchanges like some futures feeds where ohlcv_has_history is false (only recent candles available via paginated fetch).

Common situations: Users enabling freqAI on exchanges with limited candle history; not realizing their exchange caps OHLCV depth; porting freqAI configs from binance to niche exchanges.

Related errors


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