Backtesting realism

Why Options Backtests Fail

Most options backtests fail because they model a cleaner market than the one the strategy would have traded.

Direct answer

Options backtests usually fail because they use today’s contract list, last price fills, incomplete quote history, weak liquidity filters, and entry timing that could not have been known at the time.

The hidden data problem

A valid options backtest starts with the contract universe that existed on the simulated date. If the model selects from current listings or ignores expiration availability, the result has stale-contract leakage before the first trade is evaluated.

The hidden execution problem

A last price is only a print. It does not prove the bid, ask, size, or spread available at entry and exit. Quote-aware fills force the simulation to pay attention to what was executable.

The practical fix

Use historical contracts, listed expirations, quote windows, trade evidence, and liquidity filters. Then run the same setup through a realism checker before comparing strategy variants.

A defensible replay sequence

Start with the signal timestamp, then request the contract universe that was listed at that time, then select the contract using only information available before entry. After that, request quote and trade windows around the candidate entry and exit. This sequence prevents the model from quietly using future listings, future open interest, or a cleaner end-of-day chain than the strategy actually had.

What should be stored with each fill

A research result is easier to trust when every fill stores the OCC ticker, expiration, strike, side, intended timestamp, quote timestamp, bid, ask, midpoint, last trade, spread percent, volume, open interest, and rejection reason. The rejection rows are as important as the trades because they show how often the strategy wanted contracts that were too stale, too wide, or unavailable.

How to compare variants

Compare strategy variants under the same execution model before comparing return metrics. A strategy that survives midpoint fills but fails near-side fills is a different claim than a strategy that survives marketable assumptions. Report the fill model, spread threshold, freshness window, and missing-data policy next to Sharpe, drawdown, win rate, and turnover.

Quote vs Trade Timeline

Bid, ask, midpoint, and prints show why last price alone is fragile.

CallsPuts

Bid/Ask Spread by Strike

Lower bars usually produce more defensible fill assumptions.

CallsPuts
485485490490495495500500505505510515

Evidence checklist

What to record before trusting an options research result

The pages in this cluster are intentionally practical: a backtest, scanner, or dashboard should preserve the evidence that made each contract eligible and each fill plausible. The table is the minimum audit trail for option-specific execution realism.

CheckEvidence to keepDocs
Contract universeHistorical contract identity, listed expiration, strike, call/put type, and as-of contract metadata./docs/contracts
Executable marketBid, ask, midpoint, quote timestamp, quote size, and stale-quote handling around the decision time./docs/quotes
Trade confirmationNearby prints, sizes, exchange/condition codes, and whether prints support the assumed fill level./docs/trades
Liquidity gateSpread percent, volume, open interest, DTE, IV, and whether the contract should have been eligible./docs/option-chain

Related tools and docs

Learn Options From Zero

Beginner explanations for calls, puts, chains, Greeks, IV, paper trading, and risk.

Backtest Realism Checker

Score contract, quote, trade, and spread assumptions before trusting a backtest.

Options Slippage Calculator

Translate bid/ask assumptions into dollar drag and breakeven movement.

Options Liquidity Scanner

Rank contracts by spread, volume, open interest, IV, and quote context.

Put/Call Ratio Dashboard

Track the current market put/call ratio beside daily, weekly, or monthly history.

Options Chain Visualizer

Inspect heatmaps, IV smile, spread by strike, and volume versus open interest.

Why options backtests fail

Audit stale contracts, last-price fills, quote gaps, liquidity filters, and execution timing.

Options slippage modeling

Model midpoint, near-side, and marketable fills from bid/ask spreads and contract size.

Mid price vs fill price

Separate a reference midpoint from the executable fill assumption used by the strategy.

Bid/ask spread backtesting

Use spread width as both a liquidity gate and a cost input for every modeled entry.

Quote vs trade timeline

Validate fills with synchronized bid, ask, midpoint, and print evidence around each decision.

Options data API

See the full API surface behind these tools.

Historical options data API

Use contracts, quotes, trades, and aggregates for research workflows.

Options backtesting API

Plan historical contract and quote-aware fill sequences.

Quotes docs

Review bid/ask history fields used by realism checks.

Option chain docs

Inspect chain snapshots with Greeks, IV, volume, and open interest.