freqtrade/freqtrade · error · OperationalException
PrecisionFilter not allowed for backtesting multiple strateg
Error message
PrecisionFilter not allowed for backtesting multiple strategies.
What it means
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.
Source
Thrown at freqtrade/optimize/backtesting.py:255
self.trading_mode: TradingMode = self.config.get("trading_mode", TradingMode.SPOT)
self.margin_mode: MarginMode = self.config.get("margin_mode", MarginMode.ISOLATED)
# strategies which define "can_short=True" will fail to load in Spot mode.
self._can_short = self.trading_mode != TradingMode.SPOT
self._position_stacking: bool = self.config.get("position_stacking", False)
self.enable_protections: bool = self.config.get("enable_protections", False)
migrate_data(config, self.exchange)
self.init_backtest()
def _validate_pairlists_for_backtesting(self):
if "VolumePairList" in self.pairlists.name_list:
raise OperationalException(
"VolumePairList not allowed for backtesting. Please use StaticPairList instead."
)
if len(self.strategylist) > 1 and "PrecisionFilter" in self.pairlists.name_list:
raise OperationalException(
"PrecisionFilter not allowed for backtesting multiple strategies."
)
def log_once(self, msg: str) -> None:
"""
Partial reimplementation of log_once from the Login mixin.
only used by recursive, as __initial_backtest is false in all other cases.
"""
if self.__initial_backtest:
logger.info(msg)
def set_fee(self):
if self.config.get("fee", None) is not None:
self.fee = self.config["fee"]
self.log_once(f"Using fee {self.fee:.4%} from config.")
else:
fees = [View on GitHub (pinned to 1c8edfe4d1)
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`.
Example fix
# before
"pairlists": [{"method": "StaticPairList"}, {"method": "PrecisionFilter"}]
# freqtrade backtesting --strategy-list StratA StratB
# after
"pairlists": [{"method": "StaticPairList"}]
# freqtrade backtesting --strategy-list StratA StratB Defensive patterns
Strategy: validation
Validate before calling
def validate_multi_strategy_pairlists(config, strategy_list):
methods = [p.get("method") for p in config.get("pairlists", [])]
if len(strategy_list) > 1 and "PrecisionFilter" in methods:
raise ValueError("PrecisionFilter cannot be used with --strategy-list") Prevention
- Strip non-deterministic or strategy-dependent filters before multi-strategy comparisons.
- Run one strategy per backtest when the production pairlist chain must be preserved.
When it happens
Trigger: Running `freqtrade backtesting --strategy-list StratA StratB` with a config whose pairlists include {"method": "PrecisionFilter"}.
Common situations: Comparing several strategies with one command while keeping the production pairlist chain that includes PrecisionFilter.
Related errors
- Dataprovider was not initialized with a pairlist provider.
- No pair in whitelist.
- VolumePairList not allowed for backtesting. Please use Stati
- Pairs {unavailable_pairs} got no leverage tiers available. I
- PrecisionFilter can only work with stoploss defined. Please
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/5a8f9c0d8dc6dce2.
Report an issue: GitHub.