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 Soren Huang · Published · updated · Editorial policy
Contents
- Why is backtesting options harder than backtesting futures?
- What option chain data do you need, and why is it expensive?
- How do greeks, implied volatility and path dependence change a backtest?
- Which fill and spread assumptions kill most option backtests?
- Can you test an option strategy through its underlying futures first?
- What should options backtesting software be able to do?
- How do you keep an options backtest honest?
- Frequently asked questions
- 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 backtest | Futures strategy | Options strategy |
|---|---|---|
| Data per bar | Open, high, low, close, volume of one contract | Bid, ask and implied volatility for every strike and expiry |
| Fill model | One tick of slippage per side is a common start | Half the bid-ask spread per leg, wider at the open and in fast markets |
| Value between entry and exit | Moves with the underlying price only | Moves with price, time, implied volatility and interest |
| Exit events | Your exit rule or a roll date | Your exit rule, roll, expiry, exercise or assignment |
| Position accounting | One contract count, one point value | Several legs with different strikes, expiries and margin |
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.
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.
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.
- 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.
- 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.
- 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.
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.
- Write the timing rule. State the entry condition, the exit condition and the stop in plain words, with no mention of strikes or expiries.
- 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.
- Validate it out of sample and walk forward. Hold back data the rule never saw and check whether the result holds there.
- 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.
- 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.
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.
| Capability | Required or optional | Why it matters |
|---|---|---|
| Historical bid and ask per strike and expiry | Required | Without real quotes, fills are guesses and spreads are invisible |
| Repricing of open positions every bar | Required | Stops, margin calls and drawdown happen between entry and exit |
| Spread and slippage per leg | Required | Multi-leg trades pay the spread several times per round trip |
| Expiry and assignment handling | Required | An option near the money at expiry becomes an underlying position |
| Roll logic with its costs | Required | Rolling is a full close and open, not a free continuation |
| Margin and drawdown report | Required | Short-premium strategies fail on margin before they fail on P&L |
| Greeks display | Optional | Helps understanding; the backtest result does not depend on it |
| Volatility surface charts | Optional | Useful for research, not needed to compute a result |
| Scenario what-if tool | Optional | Explores one position; the backtest already walks the real paths |
| Live paper-trading link | Optional | Useful after the backtest passes, not during it |
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.
- 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.
- Hold back out-of-sample data. Keep the most recent part of the history untouched until the rule is final.
- Walk forward on a schedule you would really follow. Re-tune as often as you would in a live account, not more.
- 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.
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.

