VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
ACADEMY / Backtesting and validation

Options backtesting: why it is harder than futures, and how to do it

An options backtest is harder than a futures backtest because every option contract is repriced by time, strike, implied volatility and the path of the underlying, so the test needs full chain quotes, per-leg spread costs and bar-by-bar repricing. The cheapest honest first step is to test the timing idea on the underlying futures with real costs.

By · Published · updated · Editorial policy

Contents
  1. Why is backtesting options harder than backtesting futures?
  2. What option chain data do you need, and why is it expensive?
  3. How do greeks, implied volatility and path dependence change a backtest?
  4. Which fill and spread assumptions kill most option backtests?
  5. Can you test an option strategy through its underlying futures first?
  6. What should options backtesting software be able to do?
  7. How do you keep an options backtest honest?
  8. Frequently asked questions
  9. References

Options backtesting is harder than futures backtesting because an option strategy needs a chain of contracts, each repriced every bar by time, strike, implied volatility and the route the underlying took. A realistic test needs historical bid and ask quotes, per-leg spread costs and expiry handling. The cheapest honest start is to test the timing idea on the underlying futures.

Why is backtesting options harder than backtesting futures?

One price series against a whole chain. That is the difference, and it hits the data, the fills and the bookkeeping at the same time. Backtesting a futures rule is like following one car on a highway. Backtesting an option rule is like following forty cars at once, and every car slows down as the clock runs.

An option chain is the full list of call and put contracts on one underlying, across all listed strikes and expiry dates, with a quote for each. A futures backtest asks one question per bar: what was the price? An options backtest asks that question forty or more times per bar, and then asks a second question for each open position: what is it worth now, given how much time is left and how nervous the market is?

Part of the backtestFutures strategyOptions strategy
Data per barOpen, high, low, close, volume of one contractBid, ask and implied volatility for every strike and expiry
Fill modelOne tick of slippage per side is a common startHalf the bid-ask spread per leg, wider at the open and in fast markets
Value between entry and exitMoves with the underlying price onlyMoves with price, time, implied volatility and interest
Exit eventsYour exit rule or a roll dateYour exit rule, roll, expiry, exercise or assignment
Position accountingOne contract count, one point valueSeveral legs with different strikes, expiries and margin
One futures series against a small option chain: a futures backtest tracks one price per bar, while an options backtest tracks about forty contract prices per bar One price, or forty? Prices per bar, illustrative chain Futures 1 price Options 40 prices Options track forty prices a bar. So: scope the chain before testing.
One futures series against a small option chain: the backtest must track about forty prices per bar instead of one.

If you are still deciding which instrument to trade, futures vs options for beginners explains why the futures test is the simpler one to get right.

What option chain data do you need, and why is it expensive?

An honest options backtest needs bid and ask quotes for every strike and expiry your rules could touch, at every time your rules make a decision, and in a modest setup like the one below that multiplies the data volume about a hundred times compared with one futures series. This is one reason vendors charge far more for option history than for futures history, and why the cleaning work is larger too.

The decision time matters more than most traders expect. A strategy that trades once a day on the close needs one chain snapshot per day. A strategy that checks every 15 minutes needs a snapshot every 15 minutes, because the quote at the close tells you nothing about the spread you would have paid at 10:15. The snapshot must come from the same moment as the underlying bar, or the backtest will trade against stale prices.

Hypothetical example

A modest chain for one index future: 4 expiries, 20 strikes around the money, a call and a put at each strike, and three fields per contract (bid, ask, implied volatility). That is 4 × 20 × 2 × 3 = 480 values for every underlying bar. The futures bar itself has 5 values: open, high, low, close and volume. For a 15-minute strategy over several years, the option file is about a hundred times the size of the futures file before any cleaning.

Chain data multiplies fast: a futures bar has 5 values, while an illustrative chain of 4 expiries, 20 strikes, calls and puts, with bid, ask and implied volatility, has 480 values per bar Chain data multiplies fast Values per bar, illustrative setup Futures 5 Options 480 4 expiries × 20 strikes × 2 × 3 About 100× the data of futures. So: buy only strikes you can use.
How chain data multiplies: bars × expiries × strikes × (call and put) × (bid, ask, IV). Illustrative setup.

Cleaning is the second cost. Far out-of-the-money strikes often show a bid of zero and an ask far above fair value, so a backtest that fills at the mid price on those strikes is trading at prices that never existed. Quotes also go stale when a strike has no trades for hours. Before the first run, decide which strikes and expiries your rules may use and remove the rest. You keep the data you need and drop most of the noise.

How do greeks, implied volatility and path dependence change a backtest?

An option position can lose money while the underlying ends exactly where the trader expected, because its value also depends on time passing, implied volatility moving and the route price took along the way, so the backtest must reprice the position bar by bar instead of only at entry and exit. A futures position is a straight line: profit equals points moved times point value. An option position is a surface, and the backtest has to walk across it.

Implied volatility is the level of future price movement that the current option price assumes, expressed as a yearly percentage. Greeks are the sensitivities of an option price to one input at a time: delta to the underlying price, theta to one day passing, vega to a one-point change in implied volatility, gamma to how fast delta itself changes. Path dependence means the result depends on the route the underlying took, not only on where it ended.

Why does this force bar-by-bar repricing? Because the events that end a trade early happen in the middle of the path. A stop is hit, a margin call arrives, or a rule says "close if the loss reaches X". A backtest that reprices only at entry and exit never sees those events and reports the recovery that the real account never lived to enjoy.

Hypothetical example

A trader sells a put 20 days before expiry with the underlying at 100 and plans to hold to expiry. Path A: the underlying stays between 98 and 102 and closes at 100. The put loses value every day from time decay and the trade ends with a small gain. Path B: the underlying drops to 92 on day 8, then recovers and also closes at 100. On day 8 the put is worth several times its sale price, implied volatility has jumped, and the margin requirement has risen. A stop rule or the broker closes the trade at a deep loss. Both paths end at 100. Only one of them lets the trader collect the premium.

Path dependence: two illustrative underlying paths both end at 100; on path A a short put keeps a small gain, on path B the price drops to 92 on day 8 and the trade is stopped out before the recovery Same end, different fate Illustrative short put, two paths Path A: gain Path B: stopped 100 Same close, opposite results. So: reprice every bar, not the end.
Path dependence: two underlying paths end at the same price, but a short put survives only one of them. Illustrative.

Implied volatility adds a second path. It can rise while price barely moves, as it often does before scheduled announcements, and fall sharply after them. A backtest that reprices options with a fixed volatility input misses this entirely. The payoff diagram at expiry is only part of the story; how to calculate options profit and the limits of the payoff view explains what the diagram leaves out.

Which fill and spread assumptions kill most option backtests?

Filling at the mid price, ignoring the bid-ask spread on multi-leg trades and assuming free rolls or expiries are the three assumptions that turn a losing options strategy into a backtest that looks profitable. Each one is small per trade. Together they are often larger than the average trade of the strategy.

  1. Mid-price fills. The mid price is the average of bid and ask. Nobody trades there with a market order. A buyer pays near the ask and a seller receives near the bid, so a realistic fill is at least half the spread away from mid on every leg, on entry and on exit.
  2. Spread on multi-leg trades. A vertical spread has two legs, an iron condor has four. Each leg pays its own half spread, so a four-leg trade pays eight half spreads over its life. Some brokers fill a complex order as one unit at a better net price, but a backtest cannot know how often that happened, so model the legs separately and treat a better fill as a bonus.
  3. Free rolls and expiries. Rolling a position means closing one expiry and opening the next, which is a full round of spreads and commissions. Expiry is not free either: an option near the money at the close can be assigned, which turns a defined-risk trade into an underlying position over a weekend.

Hypothetical example

A two-leg spread shows a result of +$40 when both legs are filled at mid on entry and exit. Half the spread on entry costs $10 per leg, so −$20. The same on exit, −$20. One tick of slippage per leg across the trade, −$10. Commission at $2 per leg for four fills, −$8. The net result is −$18. The idea did not change; only the fill model did.

One hypothetical two-leg trade: a mid-price result of plus 40 dollars, minus 40 dollars of entry and exit spreads, minus 10 dollars of slippage and minus 8 dollars of commission leaves a net result of minus 18 dollars Fills turn +$40 into −$18 One two-leg trade, hypothetical Mid fill +$40 Spreads −$40 Slippage −$10 Commission −$8 Net −$18 The fill model flipped the result. So: price every leg at bid or ask.
Spread, slippage and commission turn a mid-price result of +$40 into −$18 on one two-leg trade. Hypothetical example.

The test that catches this is the same one used for futures: compare the gross average trade with the full round-trip cost of all legs. Trading costs in backtests walks through that comparison with round numbers. For options, add the roll cost and multiply by the number of legs.

Can you test an option strategy through its underlying futures first?

Most option strategies are a timing or direction idea wrapped in a payoff shape, so the cheapest honest first step is to test the timing idea on the underlying futures with real costs, and only then decide whether the option structure adds anything. If the timing idea has no edge on the futures, the option wrapper adds spread costs to a coin flip.

Look at what the rule actually says. "Sell a put after a three-day decline" is a long-direction idea with a short holding time. "Buy a call when price breaks the 20-day high" is a breakout idea. "Sell a strangle when implied volatility is high" is partly a mean-reversion idea on the underlying's range. Each of these can be written as a futures rule: when to enter, in which direction, when to exit, how far the stop sits. That rule needs only one price series and the usual futures cost model. Rules like these, with their entry and exit conditions and parameter ranges, are what the strategy generation in AlphaPrime (Valynox) works from on the futures side.

  1. Write the timing rule. State the entry condition, the exit condition and the stop in plain words, with no mention of strikes or expiries.
  2. Backtest it on the underlying futures with commission, slippage and next-bar execution. AlphaPrime runs this kind of test as its core job: backtesting evaluates each candidate with fees, slippage and next-bar execution on your own bar data.
  3. Validate it out of sample and walk forward. Hold back data the rule never saw and check whether the result holds there.
  4. Only if it holds, map the rule to an option structure. Decide the direction, the holding time and whether you want to pay premium (long options) or receive it (short options). The holding time from the futures test tells you which expiry fits.
  5. Re-test with chain quotes, per-leg spread and roll costs, so that the option layer is tested on top of a timing idea that already works.
Five steps: write the timing rule, backtest it on futures, walk forward, map it to options, and only then re-test on option chain data; steps one to four use futures data only Test on futures first Chain data only in the last step 1 Write timing rule 2 Backtest on futures 3 Walk forward 4 Map to options Futures 5 Re-test on chain Chain Weak ideas fail before chain data. So: buy chains only after a pass.
Test the timing idea on the underlying futures first. Chain data is only needed in the last step, and only for ideas that passed.

Two things the futures proxy does not test: changes in implied volatility, and the shape of the payoff. A short-premium strategy has many small wins and rare large losses, which the futures test with a stop does not reproduce. Treat the proxy as the test of the idea, and the chain test as the test of the structure. Pure volatility ideas, such as buying a straddle before an announcement, map less cleanly, but even there the futures test answers a useful question: does the underlying move more after the trigger than on an ordinary day?

What should options backtesting software be able to do?

Software for options backtesting must reprice from historical chain quotes, model spread and slippage per leg, handle expiry, assignment and rolls, and report drawdown and margin; display features such as greeks charts are useful but optional. When you compare options backtesting software, check the required list first, because a missing required item makes every result from the tool unreliable.

CapabilityRequired or optionalWhy it matters
Historical bid and ask per strike and expiryRequiredWithout real quotes, fills are guesses and spreads are invisible
Repricing of open positions every barRequiredStops, margin calls and drawdown happen between entry and exit
Spread and slippage per legRequiredMulti-leg trades pay the spread several times per round trip
Expiry and assignment handlingRequiredAn option near the money at expiry becomes an underlying position
Roll logic with its costsRequiredRolling is a full close and open, not a free continuation
Margin and drawdown reportRequiredShort-premium strategies fail on margin before they fail on P&L
Greeks displayOptionalHelps understanding; the backtest result does not depend on it
Volatility surface chartsOptionalUseful for research, not needed to compute a result
Scenario what-if toolOptionalExplores one position; the backtest already walks the real paths
Live paper-trading linkOptionalUseful after the backtest passes, not during it
Options backtesting software: six required capabilities (bid and ask quotes, repricing each bar, spread per leg, expiry and assignment, roll costs, margin and drawdown) and four optional ones (greeks, volatility charts, scenarios, paper-trading link) Check the required list first A missing one breaks every result Required Bid and ask quotes Repricing each bar Spread per leg Expiry, assignment Roll costs Margin, drawdown Optional Greeks Vol charts Scenarios Paper link
Required and optional capabilities for options backtesting software. Check the required column before anything else.

Ask one more question of any tool: can you set the fill assumption yourself, and can you change it and rerun? A tool that only fills at mid, with no setting to change, will show you results you cannot stress.

How do you keep an options backtest honest?

The same validation habits as for futures apply: hold back out-of-sample data, walk forward, stress the spread and slippage assumptions, and reject strategies that only survive one set of fill assumptions. Options add more free choices than futures, such as strike distance, days to expiry and roll timing, and every extra choice is one more way to fit the past by accident.

Walk-forward analysis is a test that tunes a strategy on one window of data, trades the chosen settings unchanged on the window that follows, then moves forward and repeats. For an option strategy, the tuned settings include things like "sell the strike 5% below the market, 30 days out". Walk-forward analysis explains how to choose the windows and read the joined result.

  1. Fix fill and cost assumptions before the first run. Half spread per leg, one tick of slippage per leg, commission per leg, roll cost. Write them down so that you cannot soften them later.
  2. Hold back out-of-sample data. Keep the most recent part of the history untouched until the rule is final.
  3. Walk forward on a schedule you would really follow. Re-tune as often as you would in a live account, not more.
  4. Stress test. Double the spread and slippage and rerun. Keep only strategies that still show a positive average trade; a strategy that fails here was depending on cheap fills.
The validation loop is the same for options and futures: fix costs, hold out recent data, walk forward, stress the fills by doubling spreads, then repeat Same loop, options or futures Four steps, then repeat Fix costs Write them down Hold out data Keep recent data Walk forward Retune like live Stress fills Double spreads
The validation loop is the same for options and futures: fix costs, hold back data, walk forward, stress the fills, repeat.

Count how many variants you tried. If you tested twenty strike distances and six expiries and kept the best combination, the best backtest is partly the luckiest, and research on backtest overfitting shows that the more variants you test, the more the winner's result is inflated (Bailey, Borwein, López de Prado & Zhu, 2014). A result that holds across neighbouring strikes and expiries is worth more than a single best cell.

What this means if you use AlphaPrime: the cost and slippage settings you fix in step 1 are entered once and applied to every candidate, and the strategy databank keeps the results organized for review, so when you judge the best variant you can also see how many neighbouring settings you tried.

Frequently asked questions

Can I backtest options using only the underlying price and a pricing model?

You can compute a model price from the underlying, but the model needs an implied volatility input for every bar, and that input is exactly what chain data provides. A fixed volatility number ignores the largest source of option losses and gains outside price direction. Model prices also carry no bid-ask spread, so fills will be unrealistic unless you add a spread assumption by hand.

Why does my options backtest look much better than my live results?

The usual causes are mid-price fills, no spread cost on each leg, free rolls and no repricing between entry and exit. Each one adds a small amount per trade in your favour, and short-premium strategies with many trades collect that advantage many times. Rerun the test with fills at bid and ask, a full cost for every roll, and bar-by-bar repricing, and compare again.

How much option chain data do I need for a backtest?

You need quotes for the strikes and expiries your rules can reach, at every time your rules make a decision, across enough history to include calm and volatile periods. A daily strategy needs one snapshot per day; an intraday strategy needs one per bar. Strikes far from the money that your rules never touch can be left out, which reduces cost and cleaning work.

Is it worth testing an option idea on futures first?

Yes, because most option strategies are a timing or direction idea with a payoff shape added, and the timing idea can be tested on one futures series with ordinary costs. If it fails there, the option structure will not rescue it, and you have saved the cost of chain data. If it passes, you then test only the structure on top of an idea that already works.

What is the single most important feature in options backtesting software?

Historical bid and ask quotes per strike and expiry, with fills modelled per leg. Everything else, including greeks and volatility charts, is secondary, because without real spreads the result is a guess. Second in importance is bar-by-bar repricing of open positions, so that stops, margin and drawdown are measured on the path and not only at the end.

References

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.