Quant Memo
Advanced

Options Strategy Backtesting

An options backtest built on end-of-day mid prices can show a beautiful Sharpe ratio for a strategy that would have lost money on every single real fill. Options need their own backtesting discipline because the quoted price is rarely the tradeable one.

Prerequisites: Options: Calls and Puts, Bid-Ask Spread Decomposition

A covered-call strategy — sell a monthly call against a long stock position, roll every expiry — is backtested using end-of-day option mid prices from a vendor database. It shows a steady 9% annual premium yield and a Sharpe near 1.6, comfortably better than the stock alone. Traded live at the same strikes, it earns closer to 4% and has a rougher ride getting there. Nothing about the strategy changed. What changed is that the backtest assumed every option could be sold at the mid price, and options routinely trade with bid-ask spreads of 5-10% of the option's own value — wide enough on their own to eat most of a modest premium-selling edge, long before market impact or timing enters the picture.

Equity backtesting mostly gets away with mid-price assumptions because equity spreads are a few basis points. Options don't get that pass: spreads are wide and vary by strike and expiry, the contract itself changes shape over its life (an option two days from expiry behaves nothing like the same strike two months out), and a chain has hundreds of listed contracts where equity has one instrument. A backtest that treats options like slightly exotic stocks will look better than it can perform.

What has to be modeled that isn't in an equity backtest

Bid-ask, not mid. Fill selling at something close to the bid and buying at something close to the ask, scaled by the size relative to typical quoted depth, rather than assuming the mid.

A volatility surface, not a single number. The same underlying has a different implied volatility at every strike and expiry — see The Volatility Smile and Skew — and a strategy that rolls to a fixed delta or fixed strike is implicitly trading a moving target on that surface, not a fixed price.

Early exercise and assignment, for American-style contracts — see American Options and Early Exercise — which can end a position days before the modeled expiry and change the realized cash flows.

Corporate actions on the contract itself — splits, special dividends, and mergers can adjust strikes and multipliers mid-life, and a database that silently re-adjusts historical strikes to be "as-if-always-adjusted" will misstate what a trader actually saw and could have traded on that day.

Time decay measured in calendar time, not trading days, since weekend and holiday theta accrue at a different rate than what a naive trading-day model assumes.

Worked example: pricing the spread gap into the covered call

The strategy sells a 30-delta monthly call quoted at a mid of $1.20, bid $1.10 / ask $1.30 — an 18% bid-ask spread relative to the mid, typical for a mid-cap single name. Selling at the mid (the backtest's assumption) versus selling at the bid (closer to a real fill for a retail-sized order) changes the premium captured by $0.10 per contract, or 8.3% of the option's value, on every single roll. Rolled twelve times a year, that gap alone consumes roughly a third of the strategy's headline premium yield before any consideration of the stock's realized move against the short call. A backtest using mid prices reports the 9% figure from the opening paragraph; pricing every leg at the realistic side of the spread brings it down toward the 4% actually observed live — the entire discrepancy explained by one modeling choice.

9.0% priced at mid 4.0% priced at bid/ask
Same signal, same strikes, same schedule — swapping the mid price for a realistic fill price roughly halves the headline yield, before anything else about the strategy changes.

The gap between an options backtest and live results is usually explained by the fill-price assumption, not by anything wrong with the underlying idea. Price every leg at the side of the spread you'd realistically get, not at the mid.

As a sanity check, compute what fraction of the strategy's average expected gross premium the bid-ask spread alone would consume per round trip. If that fraction is large relative to the edge the backtest claims, the backtest is measuring the spread's absence, not the strategy's skill.

Doing it properly

Source historical bid/ask quotes, not just trades or a single settlement mid, since a strategy's realistic fill sits somewhere inside that quoted range and moves with size. Model the volatility surface rather than a flat implied vol, so strike selection reflects the skew a real trader would have seen, and refit that surface at every rebalance date rather than holding it static across the backtest, since a surface frozen at inception will misprice every later roll by however much the market's skew has moved since.

Handle assignment and corporate actions explicitly rather than assuming every position runs cleanly to a modeled expiry — an American-style short call that gets assigned early on a dividend date changes the position's cash flows and its subsequent hedge in ways a European-style model never anticipates. Validate the backtest's fill assumptions against a sample of live trade prints before trusting the headline number — see Transaction Costs for the equity-side version of the same discipline, most of which carries over with wider margins for error on the options side. And size the sanity check to the strategy: a strategy that trades near-the-money, near-expiry options in thin names should assume a fill closer to the bid or ask than one trading liquid index options, where the quoted spread is a much smaller fraction of the option's value and the mid is a more defensible approximation.

Related concepts

Practice in interviews

Further reading

  • Hull, Options, Futures, and Other Derivatives
  • Sinclair, Volatility Trading
ShareTwitterLinkedIn