Liquidity Filters in Options Backtests
CuteMarkets Team
Research
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.

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.
| Filter | What it protects against | Example policy |
|---|---|---|
| Quote freshness | Filling from stale bid/ask data. | Reject quotes older than the configured entry window. |
| Spread width | Paying more spread than the expected edge can absorb. | Reject spread above a percent of premium or absolute max. |
| Minimum premium | Trading contracts too cheap to model cleanly. | Reject asks below a floor such as 0.05 or 0.10. |
| Open interest | Selecting structurally inactive contracts. | Require a minimum OI before ranking candidates. |
| Volume or trades | Choosing contracts with no activity near the event. | Use printed trades as support, not the sole fill source. |
| DTE window | Mixing different decay and gamma regimes. | Keep min, target, and max DTE explicit. |
| Quote size | Ignoring 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:
| Policy | Intended use |
|---|---|
| Strict | Tests whether the idea survives only very clean markets. |
| Base | Represents the default research and paper-trading policy. |
| Loose | Shows 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.
Product links
Build the workflow with CuteMarkets
This article is part of the broader CuteMarkets product and research stack. Use the landing pages below to move from the blog into the specific API workflow you want to evaluate.
Backtesting Execution Realism
Use the docs standard for quote-aware fills, spread checks, and rejects.
Options Liquidity Scanner
Inspect spreads, volume, open interest, IV, and delta in an interactive workflow.
Options Backtesting API
Build historical contract, quote, trade, and aggregate workflows with liquidity gates.
Quotes Docs
Use bid/ask history as the evidence layer behind fill assumptions.