HomeBlogLiquidity Filters in Options Backtests
BacktestingApril 24, 2026·7 min read

Liquidity Filters in Options Backtests

CuteMarkets

CuteMarkets Team

Research

Quick answer

Liquidity Filters in Options Backtests

Options liquidity filters should enforce quote freshness, max spread, minimum size or activity, DTE availability, and price guards consistently across research and paper.

Liquidity Filters in Options Backtests

Abstract

Liquidity filters are not there to make a backtest look conservative. They define whether the strategy could plausibly trade the contract. For options, that means spreads, quote age, size, open interest, volume, DTE, and price guards.

Developers should treat liquidity as part of the strategy contract, not a cleanup step after results are known.

Why Liquidity Is Part Of The Model

An options backtest has two decisions. First, the model decides that an underlying setup is worth trading. Second, the system decides whether an option contract can express that setup. Liquidity filters live in the second decision.

If the strategy buys a short-dated call with a wide spread, the signal may still be correct while the execution is not. If the trade is filled from midpoint in research but would have crossed the ask in practice, the PnL curve is making a stronger claim than the market evidence supports.

That is why liquidity should be logged beside the trade, not hidden in a later data-cleaning pass.

Filters That Matter

The basic filters are quote freshness, max spread percentage, minimum bid or ask, open interest, volume, and contract price. More advanced filters can include delta range, expected move, intrinsic value, and minimum number of valid quote observations.

FilterWhat it protects againstExample policy
Quote freshnessFilling from stale bid/ask data.Reject quotes older than the configured entry window.
Spread widthPaying more spread than the expected edge can absorb.Reject spread above a percent of premium or absolute max.
Minimum premiumTrading contracts too cheap to model cleanly.Reject asks below a floor such as 0.05 or 0.10.
Open interestSelecting structurally inactive contracts.Require a minimum OI before ranking candidates.
Volume or tradesChoosing contracts with no activity near the event.Use printed trades as support, not the sole fill source.
DTE windowMixing different decay and gamma regimes.Keep min, target, and max DTE explicit.
Quote sizeIgnoring the displayed market depth.Record bid and ask size even when not hard-gated.

The key is consistency. If the filter is part of research, it should also exist in paper trading.

Liquidity Can Change The Winner

A strategy family may produce a strong stock-signal winner that fails once option liquidity is enforced. Another branch may have lower raw return but better quote quality and fewer rejects.

That second branch is often the better paper candidate. The market does not pay for untradable theoretical edge. A clean research report should show both versions: before liquidity and after liquidity. The difference explains whether the strategy idea is weak or whether the option expression is the bottleneck.

For example, a 0DTE breakout rule might find many attractive underlying moves. Once the selector requires a same-day expiration, fresh bid/ask, a reasonable spread, and enough open interest, the number of tradable entries may fall sharply. That is not a bug. It is evidence about whether the strategy can be expressed through the listed options market.

Avoid Post-Hoc Filter Mining

Liquidity filters can be overfit too. If a threshold is chosen only because it rescues the winner, it should be treated with suspicion. Prefer round, explainable thresholds and then test robustness around them.

A practical approach is to define a base policy and two nearby variants before reading the full result:

PolicyIntended use
StrictTests whether the idea survives only very clean markets.
BaseRepresents the default research and paper-trading policy.
LooseShows opportunity size when liquidity limits are relaxed.

If the result only works in the loose policy and collapses in base, the strategy should not be promoted without a clear reason. If the strict policy keeps fewer trades but similar shape, the idea may be more credible than the raw count suggests.

What To Log

Every selected or rejected contract should preserve the fields that drove the decision:

  • selected OCC ticker
  • expiration date and DTE
  • strike and call/put side
  • bid, ask, midpoint, and spread
  • quote timestamp and quote age
  • bid size and ask size when available
  • open interest and volume
  • reject reason or pass reason
  • fill model used at entry and exit

These fields make review possible. Without them, a future developer has to guess whether a backtest failed because the signal was poor, the chain was sparse, or the fill model was too optimistic.

Carry Filters Into Paper

The paper bot should not silently loosen liquidity. If the research profile required fresh quotes, max spread, and DTE validation, the paper route should enforce the same rules or label the change as intentional. Otherwise paper trading is no longer validating the backtest. It is testing a different system.

This is also where rejection statistics become useful. A paper run with many spread_above_max rejects tells the team something different from a run with many no_listed_expiry rejects. The first suggests market quality problems. The second suggests calendar or universe selection problems.

Takeaway

Liquidity filters are part of the evidence standard for options backtesting. They should be explicit, stable, logged, and carried forward into paper validation. Start from contract selection, use quotes for executable context, and treat every reject as a measurement of the market surface.

FAQ

Related questions

Can liquidity filters be overfit?

Yes. Prefer stable, explainable thresholds and test nearby values instead of choosing filters only because they rescue a winner.