{"record":{"id":"0168daecb64c4015","repo":"freqtrade/freqtrade","slug":"pairlist-handlers-join-pairlist-errors-do","errorCode":null,"errorMessage":"Pairlist Handlers {', '.join(pairlist_errors)} do not support backtesting.","messagePattern":"Pairlist Handlers (.+?) do not support backtesting\\.","errorType":"exception","errorClass":"OperationalException","httpStatus":null,"severity":"error","filePath":"freqtrade/plugins/pairlistmanager.py","lineNumber":94,"sourceCode":"                noaction_pairlists.append(pairlist_handler.name)\n            if pairlist_handler.supports_backtesting == SupportsBacktesting.BIASED:\n                biased_pairlists.append(pairlist_handler.name)\n\n        if noaction_pairlists:\n            logger.warning(\n                f\"Pairlist Handlers {', '.join(noaction_pairlists)} do not generate \"\n                \"any changes during backtesting. While it's safe to leave them enabled, they will \"\n                \"not behave like in dry/live modes. \"\n            )\n\n        if biased_pairlists:\n            logger.warning(\n                f\"Pairlist Handlers {', '.join(biased_pairlists)} will introduce a lookahead bias \"\n                \"to your backtest results, as they use today's data - which inheritly suffers from \"\n                \"'winner bias'.\"\n            )\n        if pairlist_errors:\n            raise OperationalException(\n                f\"Pairlist Handlers {', '.join(pairlist_errors)} do not support backtesting.\"\n            )\n\n    @property\n    def whitelist(self) -> list[str]:\n        \"\"\"The current whitelist\"\"\"\n        return self._whitelist\n\n    @property\n    def blacklist(self) -> list[str]:\n        \"\"\"\n        The current blacklist\n        -> no need to overwrite in subclasses\n        \"\"\"\n        return self._blacklist\n\n    @property\n    def expanded_blacklist(self) -> list[str]:","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/freqtrade/freqtrade/blob/1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15/freqtrade/plugins/pairlistmanager.py#L76-L112","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["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).","Keep two configs: one for dry/live with dynamic pairlists, one for backtesting with a static whitelist; point `--config` at the right one.","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."],"exampleFix":"// config.json (before)\n\"pairlists\": [ {\"method\": \"VolumePairList\", ...}, {\"method\": \"MyUnsupportedPairlist\"} ]\n// config-backtest.json (after)\n\"pairlists\": [ {\"method\": \"StaticPairList\"} ],\n\"exchange\": { \"pair_whitelist\": [\"BTC/USDT\", \"ETH/USDT\"] }","handlingStrategy":"validation","validationCode":"from freqtrade.plugins.pairlistmanager import PairListManager\n# before backtesting, dry-run the pairlist chain in backtest mode\nPairListManager.validate_backtesting(pairlist_handlers)  # raises OperationalException early\n# simpler: build via freqtrade's config validation or run `freqtrade backtesting --dry-run-wallet 1 --timerange 1d` smoke test","typeGuard":null,"tryCatchPattern":"from freqtrade.exceptions import OperationalException\ntry:\n    freqtrade.backtesting.Backtesting(config)\nexcept OperationalException as e:\n    if 'do not support backtesting' in str(e):\n        logger.error('Switch to StaticPairList for backtests: %s', e)\n    raise","preventionTips":["Maintain a dedicated backtest config with StaticPairList.","Run `freqtrade test-pairlist` after changing pairlist chains.","Pin freqtrade version in requirements so pairlist support flags don't change silently."],"tags":["freqtrade","backtesting","pairlist","configuration"],"backgroundTag":null,"analyzedSha":"1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15","analyzedAt":"2026-08-15T05:09:08.096Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}