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
- Use an exchange with full OHLCV history (e.g. binance, kraken) for freqAI.
- If you accept the limitation (live-only training data), set freqai.override_exchange_checks: true — freqtrade then logs a warning instead.
- 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
- Run freqAI only on exchanges with ohlcv_has_history, or consciously set override_exchange_checks.
- Provide freqAI training data from downloaded data files when the live exchange lacks history.
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
- The ccxt library does not provide the list of timeframes for
- 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
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/cef3a70842e0ec20.
Report an issue: GitHub.