{"record":{"id":"5a8f9c0d8dc6dce2","repo":"freqtrade/freqtrade","slug":"precisionfilter-not-allowed-for-backtesting-multip","errorCode":null,"errorMessage":"PrecisionFilter not allowed for backtesting multiple strategies.","messagePattern":"PrecisionFilter not allowed for backtesting multiple strategies\\.","errorType":"exception","errorClass":"OperationalException","httpStatus":null,"severity":"error","filePath":"freqtrade/optimize/backtesting.py","lineNumber":255,"sourceCode":"\n        self.trading_mode: TradingMode = self.config.get(\"trading_mode\", TradingMode.SPOT)\n        self.margin_mode: MarginMode = self.config.get(\"margin_mode\", MarginMode.ISOLATED)\n        # strategies which define \"can_short=True\" will fail to load in Spot mode.\n        self._can_short = self.trading_mode != TradingMode.SPOT\n        self._position_stacking: bool = self.config.get(\"position_stacking\", False)\n        self.enable_protections: bool = self.config.get(\"enable_protections\", False)\n        migrate_data(config, self.exchange)\n\n        self.init_backtest()\n\n    def _validate_pairlists_for_backtesting(self):\n        if \"VolumePairList\" in self.pairlists.name_list:\n            raise OperationalException(\n                \"VolumePairList not allowed for backtesting. Please use StaticPairList instead.\"\n            )\n\n        if len(self.strategylist) > 1 and \"PrecisionFilter\" in self.pairlists.name_list:\n            raise OperationalException(\n                \"PrecisionFilter not allowed for backtesting multiple strategies.\"\n            )\n\n    def log_once(self, msg: str) -> None:\n        \"\"\"\n        Partial reimplementation of log_once from the Login mixin.\n        only used by recursive, as __initial_backtest is false in all other cases.\n\n        \"\"\"\n        if self.__initial_backtest:\n            logger.info(msg)\n\n    def set_fee(self):\n        if self.config.get(\"fee\", None) is not None:\n            self.fee = self.config[\"fee\"]\n            self.log_once(f\"Using fee {self.fee:.4%} from config.\")\n        else:\n            fees = [","sourceCodeStart":237,"sourceCodeEnd":273,"githubUrl":"https://github.com/freqtrade/freqtrade/blob/1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15/freqtrade/optimize/backtesting.py#L237-L273","documentation":"Thrown by Backtesting._validate_pairlists_for_backtesting when more than one strategy is being backtested (via --strategy-list) while the PrecisionFilter pairlist is active. PrecisionFilter removes pairs whose price precision makes targets (ROI/stop) unreachable, but the decision depends on each strategy's precision-related behavior, so it cannot be applied consistently across a multi-strategy run. Freqtrade rejects the combination instead of producing per-strategy-inconsistent pair sets.","triggerScenarios":"Running `freqtrade backtesting --strategy-list StratA StratB` with a config whose pairlists include {\"method\": \"PrecisionFilter\"}.","commonSituations":"Comparing several strategies with one command while keeping the production pairlist chain that includes PrecisionFilter.","solutions":["Remove PrecisionFilter from the pairlists for the multi-strategy comparison run.","Or split into separate single-strategy backtests (`--strategy StratA`, then `--strategy StratB`), which may keep PrecisionFilter.","Use a dedicated backtest config without PrecisionFilter and pass it with `-c`."],"exampleFix":"# before\n\"pairlists\": [{\"method\": \"StaticPairList\"}, {\"method\": \"PrecisionFilter\"}]\n# freqtrade backtesting --strategy-list StratA StratB\n# after\n\"pairlists\": [{\"method\": \"StaticPairList\"}]\n# freqtrade backtesting --strategy-list StratA StratB","handlingStrategy":"validation","validationCode":"def validate_multi_strategy_pairlists(config, strategy_list):\n    methods = [p.get(\"method\") for p in config.get(\"pairlists\", [])]\n    if len(strategy_list) > 1 and \"PrecisionFilter\" in methods:\n        raise ValueError(\"PrecisionFilter cannot be used with --strategy-list\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Strip non-deterministic or strategy-dependent filters before multi-strategy comparisons.","Run one strategy per backtest when the production pairlist chain must be preserved."],"tags":["freqtrade","backtesting","pairlist","precisionfilter","multi-strategy"],"backgroundTag":null,"analyzedSha":"1c8edfe4d1e8d11bd4b40e8fc3237c26c3a60e15","analyzedAt":"2026-08-15T05:09:08.096Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}