freqtrade/freqtrade · error · OperationalException

Pairlist Handlers {', '.join(pairlist_errors)} do not suppor

Error message

Pairlist Handlers {', '.join(pairlist_errors)} do not support backtesting.

What it means

Raised by PairListManager when starting a backtest whose pairlist chain contains handlers flagged as non-backtestable (their 'pairlist' needs live/dry data, e.g. VolumePairList-style dynamic volume filtering is different but some handlers simply declare no backtest support). During backtesting, freqtrade validates every configured pairlist handler; any handler whose class does not support the backtesting context is collected into pairlist_errors and the run aborts before any data is processed.

Source

Thrown at freqtrade/plugins/pairlistmanager.py:94

                noaction_pairlists.append(pairlist_handler.name)
            if pairlist_handler.supports_backtesting == SupportsBacktesting.BIASED:
                biased_pairlists.append(pairlist_handler.name)

        if noaction_pairlists:
            logger.warning(
                f"Pairlist Handlers {', '.join(noaction_pairlists)} do not generate "
                "any changes during backtesting. While it's safe to leave them enabled, they will "
                "not behave like in dry/live modes. "
            )

        if biased_pairlists:
            logger.warning(
                f"Pairlist Handlers {', '.join(biased_pairlists)} will introduce a lookahead bias "
                "to your backtest results, as they use today's data - which inheritly suffers from "
                "'winner bias'."
            )
        if pairlist_errors:
            raise OperationalException(
                f"Pairlist Handlers {', '.join(pairlist_errors)} do not support backtesting."
            )

    @property
    def whitelist(self) -> list[str]:
        """The current whitelist"""
        return self._whitelist

    @property
    def blacklist(self) -> list[str]:
        """
        The current blacklist
        -> no need to overwrite in subclasses
        """
        return self._blacklist

    @property
    def expanded_blacklist(self) -> list[str]:

View on GitHub (pinned to 1c8edfe4d1)

Solutions

  1. Inspect the `pairlists` list in the config you pass to backtesting and remove/replace the handler named in the message with a static `StaticPairList` (or another backtest-compatible handler).
  2. Keep two configs: one for dry/live with dynamic pairlists, one for backtesting with a static whitelist; point `--config` at the right one.
  3. If you wrote a custom pairlist handler, verify it implements the backtest-compatible behavior and is not explicitly marked unsupported; test it via `freqtrade test-pairlist` before backtesting.

Example fix

// config.json (before)
"pairlists": [ {"method": "VolumePairList", ...}, {"method": "MyUnsupportedPairlist"} ]
// config-backtest.json (after)
"pairlists": [ {"method": "StaticPairList"} ],
"exchange": { "pair_whitelist": ["BTC/USDT", "ETH/USDT"] }
Defensive patterns

Strategy: validation

Validate before calling

from freqtrade.plugins.pairlistmanager import PairListManager
# before backtesting, dry-run the pairlist chain in backtest mode
PairListManager.validate_backtesting(pairlist_handlers)  # raises OperationalException early
# simpler: build via freqtrade's config validation or run `freqtrade backtesting --dry-run-wallet 1 --timerange 1d` smoke test

Try / catch

from freqtrade.exceptions import OperationalException
try:
    freqtrade.backtesting.Backtesting(config)
except OperationalException as e:
    if 'do not support backtesting' in str(e):
        logger.error('Switch to StaticPairList for backtests: %s', e)
    raise

Prevention

When it happens

Trigger: Running `freqtrade backtesting` with a config where one of the `pairlists` entries is a handler that declares itself unsupported in backtesting (checked via the handler's `is_pairlist_generator`/backtest support logic in PairListManager.validate_backtesting). Only handlers that land in pairlist_errors raise; noaction/biased ones only log warnings.

Common situations: Copying a dry-run/live config into a backtest config without pruning pairlists that rely on live market data; enabling remote/exotic pairlist plugins; upgrading freqtrade where a pairlist's backtest support was removed or the plugin API changed.

Related errors


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