options.wiki
Listed options - mechanics, payoffs, and conventions

Volatility

Implied, realised and historical volatility, and the arithmetic that converts between them.

Volatility is quoted as an annualised standard deviation of continuously compounded returns. Variance is additive in time and volatility is not, which is the source of most conversion errors in this area. Every number in this section is derived from stated inputs; none of it is an observation of any market.

Time scaling of volatility and variance

Variance scales linearly in time; volatility scales with the square root of time. All conversions below follow from that one fact.

ConversionFormulaWorked
Annual to horizon Tsigma_T = sigma * sqrt(T)sigma = 0.20, T = 30/365: 0.20 * sqrt(0.0821918) = 0.057338, i.e. a 5.7338 percent one-standard-deviation move
Annual to one trading daysigma_day = sigma / sqrt(252)0.20 / sqrt(252) = 0.012599, i.e. 1.2599 percent
Daily to annualsigma = sigma_day * sqrt(252)0.011 * sqrt(252) = 0.174620, i.e. 17.4620 percent
Variance over TVar_T = sigma^2 * T0.20^2 * 0.25 = 0.010000
Adding independent periodsVar_total = Var_1 + Var_2Never add volatilities. Add variances and take the square root at the end
Expected absolute moveE|S_T - S| approx S * sigma * sqrt(2*T/pi)S = 100, sigma = 0.20, T = 0.25: 100 * 0.20 * sqrt(0.159155) = 7.9788

Volatility measures compared

MeasureWhat it isComputed fromDirection of time
Implied volatilityThe sigma that equates a model price to the observed option priceOption prices, inverted numericallyForward-looking, one number per contract
Realised volatilityThe standard deviation of the returns that actually occurredUnderlying price history over a stated windowBackward-looking
Historical volatilityA realised volatility over a longer or reference window, used as a baselineUnderlying price historyBackward-looking
Forward implied volatilityThe volatility implied for the interval between two expirationsTwo implied volatilities and their tenorsForward-looking, interval-specific

IV rank and IV percentile are different calculations

Both compress a volatility level into a 0 to 100 figure and they are not interchangeable. Rank is a position between two extremes; percentile is a count of observations below the current level.

MeasureFormulaWorkedWhat it ignores
IV rank100 * (IV - IV_low) / (IV_high - IV_low)IV 28, low 14, high 56: 100 * 14 / 42 = 33.3333The shape of the distribution between the two extremes. Two very different histories with the same high and low give the same rank
IV percentile100 * (count of observations with IV below the current level) / (total observations)63 of 252 observations below the current level: 25.0000The magnitude of the extremes. A level can sit at the 25th percentile and still be near the all-time high if the distribution is compressed

Newton on vega, from a deliberately poor starting point

Inverting a call price of 4.485236409 at S = 100, K = 100, T = 0.25, r = 0.04, q = 0, starting from sigma = 0.50. Each step is sigma_next = sigma - (price - target)/Vega, with Vega the raw derivative. The iteration is quadratically convergent near the root: the error goes from 0.30 to 7.7e-04 to 1.1e-08 to zero in machine precision.

IterationsigmaModel pricePrice errorVega, rawNext sigma
10.500000000010.4035391530plus 5.918e+0019.6774240.1992338610
20.19923386104.4701253275minus 1.511e-0219.7233950.2000000111
30.20000001114.4852366285plus 2.195e-0719.7239670.2000000000
40.20000000004.4852364090plus 0.000e+0019.7239670.2000000000, converged

Volatility-surface parameterisations

Three named parameterisations in general use, with the quantity each one actually parameterises. None is a model of the underlying; each is a way of writing a smile down with few enough parameters to fit and interpolate.

ParameterisationParameterisesFormulaParametersPrimary reference
SABRImplied volatility directly, as a function of strike and forwardSee the SABR entry below for the full Hagan expansionalpha, beta, rho, nuHagan, Kumar, Lesniewski and Woodward 2002
SVI, rawTotal implied variance w = sigma^2*T as a function of log-moneyness kw(k) = a + b*[rho*(k - m) + sqrt((k - m)^2 + s^2)]a, b, rho, m, sGatheral 2004; Gatheral and Jacquier 2014
Dupire local volatilityThe instantaneous volatility as a function of price and time, extracted from the call surfaceSee the Dupire entry belowNone; it is a function read off the surfaceDupire 1994

SABR and SVI evaluated at the stated parameters, verified

SABR at F = 100, T = 0.25, alpha = 0.20, beta = 1, rho = minus 0.30, nu = 0.40. SVI at the same T with a = 0.010, b = 0.060, rho = minus 0.40, m = 0.02, s = 0.12. Log-moneyness k = ln(K/100) for the SVI column, so the two columns are read at the same strikes only approximately. These are chosen parameters, not a calibration to any market.

StrikeSABR implied volatilityLog-moneyness kSVI total variance w(k)SVI implied volatility sqrt(w/T)
81.8731n/a, outside the strikes shownminus 0.200.030315960.34822956
85.00000.21268532n/an/an/a
90.00000.20777936n/an/an/a
90.4837n/aminus 0.100.023062340.30372578
95.00000.20364996n/an/an/a
100.00000.200276670.000.017779320.26667820
105.00000.19763009n/an/an/a
110.00000.19566979n/an/an/a
110.5171n/aplus 0.100.016733320.25871469
115.00000.19434424n/an/an/a
122.1403n/aplus 0.200.018659980.27320311

Discretisation error in the VIX-style calculation, measured on a flat 20 percent surface

Option prices were generated from Black-Scholes-Merton at a constant sigma = 0.20, S = 100, r = 0.04, q = 0, T = 30/365, then fed into the CBOE white-paper formula. Because the generating volatility is flat and known, any departure from 20.000000 is pure method error from the finite strike grid. The bias is upward at every spacing tested.

Strike spacingStrike rangeK0Forward Fsigma squared from the formulaIndex levelError in volatility points
5.0050 to 150100100.3293080.0450987321.236462plus 1.236462
5.0020 to 300100100.3293080.0450987321.236462plus 1.236462
2.5020 to 300100100.3293080.0412751820.316294plus 0.316294
1.0010 to 500100100.3293080.0402038220.050890plus 0.050890

Entries

Implied volatility

The volatility input that makes a pricing model return the observed market price of an option. It is an output of an inversion, not a measurement, and it inherits every assumption of the model used to invert it.

FieldValue
FormulaSolve sigma such that BS(S, K, T, r, q, sigma) = observed price
UniquenessOption value is strictly increasing in sigma, so the solution is unique when the price is inside the no-arbitrage bounds
No-arbitrage bounds (call)max(S*exp(-q*T) - K*exp(-r*T), 0) <= C <= S*exp(-q*T)
Inversion methodNewton on vega, or bisection when vega is near zero
WorkedAt S = 100, K = 100, T = 0.25, r = 0.04, q = 0: a call priced at 4.485236 inverts to sigma = 0.200000. At sigma = 0.210000 the same call is 4.682511, so a 0.197274 price difference corresponds to exactly one volatility point at these inputs
  • Vega approaches zero for deep in- or out-of-the-money options, so the inversion becomes numerically unstable exactly where the quoted implied volatility is most often reported to three decimals.
  • A price below the intrinsic-value bound has no implied volatility at all. In practice that means a stale or crossed quote, not a negative volatility.
  • Two vendors can publish different implied volatilities for the same contract from the same price by using a different rate, dividend assumption, or mid-price convention. Reconcile the inputs before reconciling the outputs.

Also described at: Wikipedia · Wikidata

Realised volatility

The annualised standard deviation of the log returns that actually occurred over a stated window. The zero-mean estimator is standard for short windows because the drift term is not estimable over them.

FieldValue
Formulasigma_realised = sqrt( (252/n) * sum over t of ln(S_t / S_{t-1})^2 )
Sample-variance variantsqrt( 252 * sum((r_t - rbar)^2) / (n - 1) )
Annualisation factor252 for trading-day returns, 365 for calendar-day returns. State which
WorkedFive daily log returns 0.0120, -0.0080, 0.0150, -0.0050, 0.0060. Sum of squares = 0.000494. Zero-mean estimator: sqrt(252/5 * 0.000494) = 0.157790, i.e. 15.7790 percent. Sample-variance estimator on the same data: 0.161499, i.e. 16.1499 percent. The two differ by 0.37 volatility points on identical data
  • The estimator choice changes the answer materially on short windows. A realised-volatility figure without its estimator and its annualisation factor stated is not reproducible.
  • Close-to-close realised volatility ignores intraday range entirely, so it understates the variance a gamma position actually experienced.
  • Comparing a realised volatility over n days to an implied volatility for a T-day option compares two different horizons unless n and T are matched.

Variance versus volatility, and why the square root matters

Variance is additive across independent time intervals; volatility is not. Any operation that combines periods, tenors, or components must be done in variance and converted back at the end.

FieldValue
Formulasigma_total = sqrt( (sigma_1^2 * T_1 + sigma_2^2 * T_2) / (T_1 + T_2) )
WrongAveraging two volatilities directly
RightAveraging variances weighted by time, then taking the square root
WorkedA 7-day interval at 0.60 and a following 23-day interval at 0.20. Variance contributions: 0.36 * 7/365 = 0.00690411 and 0.04 * 23/365 = 0.00252055. Total over 30 days = 0.00942466. sigma_total = sqrt(0.00942466 / (30/365)) = sqrt(0.114667) = 0.338625, i.e. 33.8625 percent. The naive time-weighted average of the volatilities is 0.293333, understating by more than four volatility points
  • The square root is convex, so a variance-correct blend always exceeds the naive volatility average when the two inputs differ. The gap widens with the dispersion.
  • This is the same arithmetic that makes a single event day dominate a short-dated volatility quote out of all proportion to its length.

Forward implied volatility

The volatility implied for the interval between two expirations, extracted from the two spot implied volatilities by variance subtraction. A negative result inside the square root indicates a calendar arbitrage or bad data.

FieldValue
Formulasigma_fwd = sqrt( (sigma_2^2 * T_2 - sigma_1^2 * T_1) / (T_2 - T_1) )
No-arbitrage conditionsigma_2^2 * T_2 >= sigma_1^2 * T_1; total variance must be non-decreasing in maturity
WorkedT_1 = 7/365 at sigma_1 = 0.60, T_2 = 30/365 at sigma_2 = 0.40. Total variances: 0.36 * 0.0191781 = 0.00690411 and 0.16 * 0.0821918 = 0.01315068. Forward variance = (0.01315068 - 0.00690411) / (23/365) = 0.099130. sigma_fwd = 0.314850, i.e. 31.4850 percent for the 23-day interval beginning in 7 days
  • A steeply inverted front end can imply a forward volatility far below both quoted numbers. That is not an error; it is what a concentrated near-dated event does to the term structure.
  • A calendar spread is a position on forward volatility, not on either quoted volatility. Pricing it against the spot volatilities of the two legs misstates the exposure.
  • When the expression under the square root is negative, the two quotes are jointly inconsistent. Check the rate, dividend and settlement-time assumptions before concluding an arbitrage exists.

Also described at: Wikipedia · Wikidata

Volatility smile, skew and term structure

Implied volatility is not constant across strikes or expirations, so a single sigma cannot reprice a whole surface. The pattern across strikes at one expiry is the smile or skew; the pattern across expiries at one moneyness is the term structure.

FieldValue
FormulaSkew slope = (IV at K_low - IV at K_high) / (K_high - K_low), or per unit of delta
SmileImplied volatility higher on both wings than at the money, symmetric or nearly so
SkewImplied volatility monotonically higher on one side, producing an asymmetric curve
Common quoting conventions25-delta risk reversal: IV(25-delta call) - IV(25-delta put). 25-delta butterfly: 0.5*(IV(25d call) + IV(25d put)) - IV(ATM)
Term structureIV as a function of T at fixed moneyness; must satisfy non-decreasing total variance
WorkedAt one expiry, IV of 0.24 at K = 90 and 0.18 at K = 110 gives a slope of (0.24 - 0.18) / 20 = 0.003 volatility per point of strike, so an interpolated K = 100 sits at 0.21 under a linear fit
  • A skew makes the Black-Scholes constant-sigma assumption false by construction, which is why traders use the model as a quoting convention rather than a belief about the world.
  • Interpolating a surface linearly in strike can produce a negative implied density and therefore a butterfly arbitrage. Interpolation is normally done in variance against log-moneyness for that reason.
  • A skew means the wings of a spread carry different implied volatilities, so a vertical is a position on the skew as well as on direction, whether intended or not.

Also described at: Wikipedia · Wikidata

Put-call parity pins one implied volatility per strike

Because the difference between a call and a put at the same strike and expiry is model-free, a European call and put at the same strike must share a single implied volatility. Any observed difference is an artefact of the inputs used, not a real dislocation.

FieldValue
FormulaC - P = S*exp(-q*T) - K*exp(-r*T), independent of sigma
ImplicationOne implied volatility per strike and expiry, not one per option type
DiagnosticIf inverted call and put IVs differ, the discrepancy is in r, q, the underlying reference price, or the quote timestamp
WorkedAt S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20: call = 4.485236, put = 3.490220. Difference = 0.995017. Independently, S - K*exp(-r*T) = 100 - 100*exp(-0.01) = 0.995017. The two agree to eight decimals, and they would agree at any sigma
  • This is the single most useful consistency check on an options data feed. Run it before trusting any implied volatility the feed publishes.
  • On American-style equity options the identity holds only approximately, and the residual is a read on borrow cost and pending dividends rather than on volatility.
  • A persistent call-put IV gap in a vendor feed usually means the vendor is using a different dividend forecast, not that the market disagrees with itself.

The arithmetic of an implied volatility crush around a known event

When a scheduled event sits inside an option life, the quoted implied volatility blends a diffusive component with a one-off jump component. Once the event passes, the jump component leaves the quote and the implied volatility falls by a computable amount irrespective of the price move.

FieldValue
Formulasigma_quoted^2 * T = sigma_base^2 * T + J^2, where J is the standard deviation of the one-off event move
Solving for the event componentJ = sqrt(sigma_quoted^2 * T - sigma_base^2 * T)
Post-event implied volatilitysigma_base, once J has been removed
Crush in volatility points100 * (sigma_quoted - sigma_base)
First-order value effectposition vega per point multiplied by the crush in points
WorkedT = 5/365 = 0.0136986. Quoted sigma = 0.60, assumed base sigma = 0.30. Total variance 0.36 * 0.0136986 = 0.00493151; base variance 0.09 * 0.0136986 = 0.00123288. J = sqrt(0.00369863) = 0.060816, so the quote embeds a 6.0816 percent one-off move. Crush = 30.00 volatility points. An at-the-money straddle at S = 100 on those inputs has vega 0.093299 per point per share, so the linear estimate of the crush is -30 * 9.3299 = -279.90 per contract pair. Repricing the straddle from 0.60 to 0.30 gives 5.6006 to 2.8010 per share, an actual change of -279.96 per contract pair. The linear vega estimate is within 0.02 percent
  • The crush is a function of the event and the tenor, not of the direction of the move. A position can be right on direction and still lose if the realised move is smaller than J.
  • J is the move the quote is charging for. Comparing J to the move a position needs is the same comparison as breakeven versus expected move, expressed in variance terms.
  • Shorter tenors embed a larger volatility number for the same J, because J is divided by a smaller sqrt(T). Comparing headline implied volatilities across tenors around an event compares nothing.

Vega exposure per volatility point

The dollar change in position value for a one-point change in implied volatility, which is the form vega is quoted in and the form position limits are usually set in.

FieldValue
FormulaPosition vega per point = sum over legs of (signed qty) * multiplier * Vega_leg / 100
Single legVega / 100 per share, then times the multiplier
Across tenorsNot additive without weighting; a common convention is to weight each tenor by sqrt(T_ref / T)
WorkedAt S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20: raw Vega = 19.7240, so 0.197240 per point per share and 19.72 dollars per point per contract. A 100/105 call spread nets 19.7240 - 18.8403 = 0.8837 dollars per point. Ten short at-the-money calls carry -197.24 dollars per point
  • Summing vega across expirations treats a one-point move in a one-week tenor as equal to a one-point move in a one-year tenor. It is not, and an unweighted total vega on a book with a term spread is close to meaningless.
  • Vega is quoted per point but the derivative is per unit. A raw vega of 19.72 and a quoted vega of 0.1972 are the same number under different conventions, and mixing them is a factor-of-100 error.

Solving implied volatility by Newton with vega as the derivative

Option value is strictly increasing in sigma, and its derivative in sigma is vega in closed form, so Newton's method applies directly with no numerical differentiation. Where vega is not small it converges quadratically and reaches machine precision in three or four steps from almost any starting point.

FieldValue
Formulasigma_{n+1} = sigma_n - [BS(S, K, T, r, q, sigma_n) - Price] / Vega(sigma_n)
DerivativeVega = S*exp(-q*T)*phi(d1)*sqrt(T), the raw derivative and not the per-point quoted figure
ConvergenceQuadratic while vega is bounded away from zero: the number of correct digits roughly doubles each step
Bracketing fallbackBisection on [1e-8, 5.0], which cannot diverge because value is monotone in sigma. Costs about 50 iterations for full double precision
Sensitivity of the answer to the pricedsigma/dPrice = 1/Vega, so the uncertainty in an implied volatility is the price uncertainty divided by vega
WorkedReference inputs: S = 100, r = 0.04, q = 0, sigma = 0.20, T = 0.25, at which the K = 100 call is 4.485236409. These are inputs chosen to make the arithmetic checkable, not observations of any market. Inverting a price of 4.485236409 from a start of sigma = 0.50: step 1 gives 0.1992338610 with a price of 10.4035391530 and vega 19.677424; step 2 gives 0.2000000111 with a price of 4.4701253275; step 3 gives 0.2000000000 with a price of 4.4852366285; step 4 confirms with a price error of exactly zero. Four iterations from an error of 0.30. Separately, a one-cent price change at this strike moves the implied volatility by 0.01/0.197240 = 0.050705, i.e. 5.07 hundredths of a volatility point, verified by inverting 4.48 and 4.49 to 0.199735 and 0.200242
  • Always use the raw vega, not the vega divided by 100 that the risk screen shows. Using the quoted figure makes every Newton step a hundred times too large and the iteration will appear to diverge.
  • Bracket before you iterate. If the price is outside the no-arbitrage bounds there is no root, and Newton will wander for as long as you let it rather than telling you so.
  • The quantity 1/vega is the correct error bar on any published implied volatility. A feed that quotes IV to three decimals on a contract whose vega implies half a point of uncertainty per tick is reporting precision it does not have.

Why the implied-volatility inversion fails deep out of the money

Vega goes to zero faster than value does as a strike moves away from the money, so the Newton step, which divides by vega, becomes unboundedly large and the mapping from price to volatility becomes numerically unusable. The failure is not in the algorithm; it is that the price carries almost no information about sigma at that strike.

FieldValue
Formuladsigma/dPrice = 1/Vega, and Vega goes to zero as |d1| grows, so the inversion error is amplified by 1/Vega
MechanismVega is proportional to phi(d1), which decays like exp(-d1^2/2). Moving two more standard deviations out of the money cuts vega by roughly a factor of e-squared per unit of d1
Practical boundaryThe inversion stops being informative once the model price at a plausible sigma falls below the minimum quotable tick
What to do insteadInterpolate the surface in variance against log-moneyness from strikes where vega is material, rather than inverting a price that is one tick wide
WorkedS = 100, T = 0.25, r = 0.04, q = 0, K = 200. At sigma = 0.20 the model price is 8.314e-12 and vega is 2.06e-09 raw; at sigma = 0.10 vega is 8.16e-40. Newton started at 0.50 to hit the sigma = 0.20 price walks 0.45001000, 0.41191065, 0.38171430, 0.35706701, 0.33648284, 0.31897386 - six steps and it has covered 40 percent of the distance, with each step shrinking rather than accelerating. Read the other way: the minimum 0.01 tick at K = 200 already implies sigma = 0.447857, a 0.05 quote implies 0.521454 and a 0.10 quote implies 0.563981, so one nickel of price is 4.2528 volatility points. At K = 100 the same 0.05 of price spans only 0.198732 to 0.201267, i.e. 0.2535 volatility points, so one nickel of price carries 16.78 times more volatility information at the money than it does at K = 200
  • A deep out-of-the-money strike does not have a well-determined implied volatility, and printing one to three decimals implies otherwise. The honest output is a range, or nothing.
  • This is why far-wing implied volatilities in vendor feeds jump around by whole points day to day while the underlying barely moves. The quote moved one tick.
  • The same arithmetic explains why wing volatility is where a fitted surface adds the most value: it replaces a number the price cannot determine with one the neighbouring strikes can.

The volatility surface in strike-maturity space

The implied volatility of every listed contract on one underlying, arranged as a function of strike and expiration. It is not a model output; it is a restatement of the option prices in a unit that removes S, K, T and r, and it is subject to arbitrage constraints in both directions.

FieldValue
Formulasigma_imp(K, T) such that BS(S, K, T, r, q, sigma_imp) equals the observed price at every (K, T). Total variance w(K, T) = sigma_imp(K, T)^2 * T
Strike direction, the smile or skewA slice at fixed T. Must satisfy call-spread and butterfly no-arbitrage constraints
Maturity direction, the term structureA slice at fixed moneyness. Total variance must be non-decreasing in T at fixed log-moneyness
Butterfly constraintThe second derivative of the call price in K must be non-negative, equivalently dual gamma is non-negative
Calendar constraintw(k, T2) is at least w(k, T1) for T2 above T1, which forbids a forward variance below zero
WorkedCalendar constraint at a stated pair of quotes: T1 = 7/365 at sigma = 0.60 gives w1 = 0.36*0.0191781 = 0.00690411, and T2 = 30/365 at sigma = 0.40 gives w2 = 0.16*0.0821918 = 0.01315068. Since w2 exceeds w1 the pair is admissible, and the implied forward variance over the 23-day interval is (0.01315068 minus 0.00690411)/(23/365) = 0.09913043, a forward volatility of 0.31484986. The floor the constraint places on the 30-day quote given the 7-day quote is sigma_2 at least 0.60*sqrt(7/30) = 0.28982753; a 30-day quote below that would be a calendar arbitrage
  • The surface is quoted in volatility and constrained in variance. Every no-arbitrage condition above is clean in w and messy in sigma, which is the whole argument for working in total variance.
  • A surface fitted strike by strike with no cross-strike constraint will produce butterfly arbitrages on any day the quotes are noisy. The constraint is not decoration.
  • Two vendors publishing different surfaces for the same underlying usually differ in the forward and the dividend assumption, not in the option prices. Reconcile w at the at-the-money strike before comparing wings.

Sticky strike, sticky delta and sticky moneyness, and the delta each one implies

A skew means volatility is a function of strike, so a move in the underlying changes the volatility applicable to a fixed strike unless the surface is assumed rigid in strike space. The assumption made about that determines the total delta, and the three standard assumptions give three materially different numbers for the same contract.

FieldValue
FormulaTotal delta = Delta_BS + Vega * dsigma/dS. Sticky strike: dsigma/dS = 0. Sticky moneyness or sticky delta: dsigma/dS = minus (dsigma/dK)*(K/S). Skew-following spot: dsigma/dS = dsigma/dK
Sticky strikesigma attached to the strike and unchanged by a spot move. Total delta equals the Black-Scholes delta
Sticky moneyness, also sticky deltasigma a function of K/S, so the whole smile translates with spot. dsigma/dS = minus (dsigma/dK)*(K/S)
Skew-following spotsigma at a fixed strike moves in the same direction as the strike-slope, so the smile moves against spot. dsigma/dS = dsigma/dK
Units warningVega here is the raw derivative, not vega per point. Using the per-point figure understates the adjustment by a factor of 100
WorkedReference inputs S = 100, r = 0.04, q = 0, sigma = 0.20, T = 0.25, with a stated skew slope dsigma/dK = minus 0.003 per point of strike, chosen for checkability and not observed anywhere. At K = 100: Black-Scholes delta 0.559618, raw vega 19.723967. Sticky moneyness gives dsigma/dS = plus 0.00300000 and a total delta of 0.618790, a shift of plus 0.059172. Skew-following spot gives dsigma/dS = minus 0.00300000 and a total delta of 0.500446, a shift of minus 0.059172. At K = 95 the two shifts are plus 0.045634 and minus 0.048036 against a base delta of 0.746313; at K = 105 they are plus 0.059347 and minus 0.056521 against 0.367719. The regime assumption moves the at-the-money delta by 11.8 points from one extreme to the other, on the same contract, at the same instant
  • The gap between the two extreme regimes on the worked at-the-money contract is 0.118344 of delta, which is exactly what a 3.00 move in the underlying would do through gamma alone, since Gamma*3.00 = 0.039448*3 = 0.118344. Choosing the regime is therefore the same size of decision as being wrong about spot by three points. It is not a refinement; it is a first-order disagreement about the hedge.
  • A risk system that reports one delta is silently asserting one regime. Find out which before reconciling a hedge against it.
  • The regimes are not interchangeable at different tenors: short-dated surfaces behave closer to sticky strike over small moves and closer to sticky moneyness over large ones, so a single choice applied across a book will be wrong somewhere by construction.

SABR parameterisation

A stochastic-volatility model for a single forward, in which the forward follows dF = alpha_t*F^beta dW1 and alpha_t follows d(alpha) = nu*alpha dW2 with correlation rho. Its practical use is not the process but the published asymptotic expansion, which gives Black implied volatility directly as a function of strike in four parameters.

FieldValue
Formulasigma_B(K,F) = [alpha / (D * z_over_x)] inverted as: sigma_B = (alpha / D) * (z/x(z)) * B, with D = (F*K)^((1-beta)/2) * [1 + ((1-beta)^2/24)*ln^2(F/K) + ((1-beta)^4/1920)*ln^4(F/K)], z = (nu/alpha)*(F*K)^((1-beta)/2)*ln(F/K), x(z) = ln( (sqrt(1 - 2*rho*z + z^2) + z - rho) / (1 - rho) ), B = 1 + [ ((1-beta)^2/24)*alpha^2/(F*K)^(1-beta) + (rho*beta*nu*alpha)/(4*(F*K)^((1-beta)/2)) + nu^2*(2 - 3*rho^2)/24 ] * T
alphaLevel. Sets the at-the-money volatility, since sigma_ATM is approximately alpha/F^(1-beta) times the B factor
betaBackbone. beta = 1 is lognormal and beta = 0 normal; it fixes how the smile moves when the forward moves
rhoCorrelation between forward and volatility. Controls the slope of the smile
nuVolatility of volatility. Controls the curvature of the smile
At-the-money limitsigma_ATM = (alpha/F^(1-beta)) * B, which is the K = F limit of the general formula
WorkedF = 100, T = 0.25, alpha = 0.20, beta = 1, rho = minus 0.30, nu = 0.40, all chosen for checkability. The expansion returns 0.21268532 at K = 85, 0.20777936 at K = 90, 0.20364996 at K = 95, 0.20027667 at K = 100, 0.19763009 at K = 105, 0.19566979 at K = 110 and 0.19434424 at K = 115 - a monotone downward skew of about 1.83 volatility points over the 30-point strike range. Two internal consistency checks: the dedicated at-the-money formula returns 0.20027667, identical to the general formula evaluated at K = F minus 1e-9; and with beta = 1, rho = 0 and nu shrunk toward zero the formula must collapse to sigma = alpha = 0.20, which it does, returning 0.2000013417 at nu = 0.01, 0.2000000134 at nu = 0.001 and 0.2000000000 at nu = 1e-06
  • The z/x(z) factor is numerically unstable as z approaches zero, which is exactly at the money. At nu = 1e-12 the check above returns 0.1999585247 rather than 0.20 - a catastrophic-cancellation artefact, not a model result. Every production implementation needs an explicit small-z branch, and the entry above uses the closed at-the-money form there.
  • beta and rho are jointly close to unidentifiable from a single smile: a range of beta values fit almost equally well with a compensating rho. Most desks fix beta by convention and fit the other three.
  • It is an expansion, so its accuracy degrades at long maturities and in the far wings, and it can produce negative densities at extreme strikes. That is a known property and not a calibration failure.

Source: Hagan, Kumar, Lesniewski and Woodward 2002

SVI parameterisation

A five-parameter functional form for total implied variance as a function of log-moneyness. It is a fitting form rather than a model of the underlying, and its value is that its no-arbitrage conditions are explicit algebraic inequalities in the five parameters.

FieldValue
Formulaw(k) = a + b*[rho*(k - m) + sqrt((k - m)^2 + s^2)], with k = ln(K/F) and implied volatility sigma(k) = sqrt(w(k)/T)
aVertical level of total variance. Shifts the whole slice
bOverall wing angle. Non-negative
rhoAsymmetry between the two wings. Must lie strictly between minus 1 and plus 1
mHorizontal shift of the smile in log-moneyness
sSmoothing of the vertex. Strictly positive; s = 0 gives a kink
Asymptotic wing slopesLeft slope b*(1 - rho), right slope b*(1 + rho)
No-arbitrage conditionsb*(1 + |rho|) is at most 4/T from the Lee moment formula, and the minimum of w, which is a + b*s*sqrt(1 - rho^2), must be non-negative
Workeda = 0.010, b = 0.060, rho = minus 0.40, m = 0.02, s = 0.12, T = 0.25, all chosen for checkability. w at k = minus 0.20 is 0.03031596, giving sigma = 0.34822956; at k = minus 0.10, w = 0.02306234 and sigma = 0.30372578; at k = 0, w = 0.01777932 and sigma = 0.26667820; at k = plus 0.10, w = 0.01673332 and sigma = 0.25871469; at k = plus 0.20, w = 0.01865998 and sigma = 0.27320311. Wing slopes: left b*(1 - rho) = 0.084000, right b*(1 + rho) = 0.036000, so the left wing is 2.33 times steeper. Lee condition: b*(1 + |rho|) = 0.084000 against a limit of 4/T = 16.000000, satisfied with a wide margin. Minimum total variance = 0.010 + 0.060*0.12*sqrt(0.84) = 0.01659891, positive as required
  • The minimum of w is at k = m minus s*rho/sqrt(1 - rho^2), which is not at k = m. On the worked parameters that is k = 0.07237229, not k = 0.02, and w there is 0.01659891, matching the closed-form minimum a + b*s*sqrt(1 - rho^2) exactly. Reporting m as the location of the vertex is wrong whenever rho is non-zero.
  • The Lee bound is almost never binding at equity tenors and becomes binding on very short-dated slices, where 4/T is small. A one-day slice has a limit of 1460, a one-year slice a limit of 4.
  • Satisfying the per-slice conditions does not make a whole surface arbitrage-free. Calendar arbitrage between slices is a separate constraint, and it is the one that a slice-by-slice fit breaks most often.

Source: Gatheral 2004; Gatheral and Jacquier 2014

Local volatility via Dupire

Given a complete arbitrage-free surface of European call prices, there is exactly one local volatility function that reproduces every one of them. It is recovered by differentiating the call surface, once in maturity and twice in strike, with no optimisation and no model fitting.

FieldValue
Formulasigma_loc^2(K, T) = [ dC/dT + (r - q)*K*dC/dK + q*C ] / [ 0.5*K^2*d2C/dK2 ]
NumeratorThe calendar direction plus the carry terms. Non-negative for an arbitrage-free surface
DenominatorProportional to the implied terminal density at K, since d2C/dK2 = exp(-r*T) times the density
Failure modeA negative numerator is a calendar arbitrage and a negative denominator a butterfly arbitrage. Both surface as an imaginary local volatility rather than as a warning
Verification used hereFeeding a surface generated from a constant sigma = 0.20 must return 0.20 at every point, and it does
WorkedSurface generated from Black-Scholes-Merton at a constant sigma = 0.20, S = 100, r = 0.04, q = 0, with derivatives taken by central differences at hK = 1 percent of K and hT = 1e-04. At K = 90, T = 0.25: dC/dT = plus 6.950365, dC/dK = minus 0.856151, d2C/dK2 = plus 0.02386808, and sigma_loc = 0.20004120. At K = 100, T = 0.25: 9.948648, minus 0.514798, 0.03941534, sigma_loc = 0.20008102. At K = 110, T = 0.25: sigma_loc = 0.19995781. At K = 100, T = 0.50: 0.20003937. At K = 110, T = 1.00: 0.20000190. Every point returns 0.20 to within 8e-05, which is the finite-difference truncation error and not a property of the formula
  • The denominator is the implied density, so local volatility is worst determined exactly where there is least probability mass: the far wings. A local-vol surface is a smooth function fitted to a quantity that is numerically hopeless out there.
  • Local volatility reprices every vanilla by construction, which is often mistaken for evidence that it is right. It says nothing about whether it prices a barrier or a cliquet correctly, because those depend on the dynamics and not just the marginals.
  • In practice the second derivative in strike is taken from a fitted implied-volatility slice rather than from raw quotes, because differencing noisy mid prices twice amplifies the noise by the square of the strike gap.

Source: Dupire 1994

Variance swaps and the log-contract replication

A contract paying realised variance minus a fixed strike. Its fair strike is replicable, with no volatility model, from a continuum of out-of-the-money option prices weighted by one over strike squared. This is the log-contract result and it is the reason variance, not volatility, is the tradable quantity.

FieldValue
FormulaK_var = (2*exp(r*T)/T) * [ integral from 0 to F of P(K)/K^2 dK + integral from F to infinity of C(K)/K^2 dK ], with F = S*exp((r - q)*T)
PayoffNotional * (realised variance minus K_var), with realised variance computed by a stated formula in the contract, normally zero-mean close-to-close
Why 1/K^2It is the weight that makes the option portfolio replicate minus 2*ln(S_T/F), whose expected value under the risk-neutral measure is the total variance
Static hedgeThe option strip is held to maturity unchanged; only the delta hedge of the log contract is rebalanced
Vega notionalA variance notional N_var corresponds to a vega notional of about 2*K_vol*N_var, so the two are quoted in different units and differ by a factor of roughly twice the volatility
WorkedOn a flat surface at sigma = 0.20 with S = 100, r = 0.04, q = 0, T = 0.25, the forward is F = 101.005017. Evaluating both integrals by Simpson quadrature with 2,000 nodes and a truncation at K = 200 returns K_var = 0.04000000, a fair volatility of 0.20000000, matching the generating volatility to eight decimals. Extending the truncation to 400, 1,000 and 4,000 changes nothing at eight decimals, because the 1/K^2 weight makes the far tail contribute almost nothing at this tenor
  • The replication is exact for a continuum of strikes and continuous monitoring. Every real variance swap deviates from it in two known ways: a finite strike grid and discrete return sampling, and the first is much larger than the second.
  • Because the strip is 1/K^2-weighted, a variance swap is much longer the downside wing than a straddle of the same vega. A position that looks like a volatility position is substantially a skew position.
  • Truncating the strip converts the exact replication into a corridor variance swap, which is a different contract with a different fair strike. The gap is not hedging error; it is a payoff difference.

Source: Carr and Madan 1998; Demeterfi, Derman, Kamal and Zou 1999

The VIX calculation as published in the CBOE white paper

A discretised version of the variance-swap fair strike, applied to two option expirations bracketing 30 days and interpolated between them. The published formula is a finite sum over listed out-of-the-money strikes plus a correction term for the gap between the forward and the nearest strike below it.

FieldValue
Formulasigma^2 = (2/T) * sum over i of [ (dK_i / K_i^2) * exp(r*T) * Q(K_i) ] - (1/T) * (F/K0 - 1)^2, with K0 the highest listed strike at or below F, Q(K_i) the out-of-the-money mid price, and dK_i the half-distance between neighbouring strikes
FDerived from the strike at which the call and put prices are closest, as F = K + exp(r*T)*(C - P)
K0The highest strike at or below F. Below K0 puts are used, above it calls, and at K0 the average of the two
Correction termminus (1/T)*(F/K0 - 1)^2, which adjusts for K0 not coinciding with F
30-day interpolationInterpolate in total variance between the near-term and next-term expirations, then annualise and multiply by 100
WorkedPrices generated from Black-Scholes-Merton at a constant sigma = 0.20 with S = 100, r = 0.04, q = 0, T = 30/365, so the correct answer is exactly 20.000000 and any departure is method error. F = 100.329308 and K0 = 100. With 5.00 strike spacing over 50 to 150 the formula returns sigma squared = 0.04509873 and an index level of 21.236462, an error of plus 1.236462 volatility points. Widening the range to 20 to 300 at the same spacing changes nothing, so the error is spacing and not truncation. At 2.50 spacing the level is 20.316294, error plus 0.316294. At 1.00 spacing it is 20.050890, error plus 0.050890. Error falls roughly with the square of the spacing and is upward at every spacing tested
  • The discretisation bias is upward, so a strike grid alone makes the index read above the variance it is estimating. On a 5-point grid at this level and tenor the effect measured here is 1.24 volatility points, which is larger than most of the daily changes people attribute to sentiment.
  • The index is a variance calculation reported as a volatility. Interpolating two index levels linearly, rather than interpolating in variance and then taking the square root, reintroduces the error the whole construction was designed to avoid.
  • The correction term is not cosmetic. Dropping it on a grid where F sits midway between strikes biases the result by roughly (F/K0 - 1)^2/T. On a 2.50 strike grid at a level of 100, F sitting midway gives F/K0 minus 1 = 0.0125 and a correction of 0.001901 in variance, which at a 20 volatility level moves the reported index from 20.0000 to 20.4697 - 0.4697 volatility points from one omitted term. On a 5.00 grid the same calculation gives 1.8184 points.

Source: CBOE VIX white paper

Volatility cones

The distribution of realised volatility computed over a range of window lengths from the same return history, plotted as percentile bands against window length. It exists because the sampling variability of a realised-volatility estimate depends on the window, so a 5-day estimate and a 60-day estimate from identical data are not comparable numbers.

FieldValue
FormulaFor each window w: sigma_w(i) = sqrt( (252/w) * sum over the w returns ending at i of ln(S_t/S_{t-1})^2 ), then take the percentiles of {sigma_w(i)} across all i
What narrows with wThe width of the band. The standard error of a variance estimate falls with the square root of the number of observations
What the band is notA forecast interval. It is the historical dispersion of an estimator, not the distribution of future volatility
Overlapping windowsRolling windows overlap, so the observations are serially dependent and the percentiles are narrower than an independent sample would give
WorkedComputed on a stated synthetic series, r_t = 0.01*sin(t) for t = 1 to 60, chosen because it is fully reproducible and is not market data. Window 5 days, 56 overlapping observations: min 0.098632, 25th percentile 0.102696, median 0.113653, 75th percentile 0.120440, max 0.124384 - a band 0.025752 wide. Window 10 days, 51 observations: min 0.108582, median 0.112202, max 0.115798, a band 0.007216 wide. Window 20 days, 41 observations: min 0.109183, median 0.112182, max 0.115237, a band 0.006054 wide. The 5-day band is 4.3 times the width of the 20-day band on identical data, and the medians agree to within 0.0015
  • The cone shape is a property of the estimator, not of the market. A synthetic series with no volatility clustering at all produces one, as the worked example shows.
  • Because rolling windows overlap, the extremes of a cone are much less independent than the observation count suggests. Treating 56 overlapping 5-day windows as 56 observations overstates the sample by roughly the window length.
  • The cone answers one narrow and useful question: whether a realised-volatility reading is unusual for the window it was measured over. It does not answer whether it is unusual for the underlying.

Term-structure interpolation in variance space

Interpolating an implied volatility between two expirations must be done on total variance, which is additive in time, not on volatility, which is not. Interpolating volatility linearly understates the intermediate level whenever the front is higher, and the error is not small.

FieldValue
Formulaw(T) = w1 + (w2 - w1)*(T - T1)/(T2 - T1), with w = sigma^2*T; then sigma(T) = sqrt(w(T)/T)
Why varianceTotal variance over disjoint intervals adds. Volatility does not, because the square root is concave
Direction of the errorLinear-in-volatility interpolation lies above the variance-correct value when the front volatility is the higher of the two, and below it when the back is
AdmissibilityThe interpolation is arbitrage-free only if w is non-decreasing in T, i.e. w2 is at least w1
WorkedT1 = 7 days at sigma = 0.60 gives w1 = 0.00690411; T2 = 30 days at sigma = 0.40 gives w2 = 0.01315068. At T = 10 days the variance-correct interpolation gives w = 0.00771888 and sigma = 0.53079104, against a naive linear-in-volatility figure of 0.57391304 - a gap of 4.3122 volatility points. At 14 days: 0.47912965 against 0.53913043, a gap of 6.0001 points. At 21 days: 0.43137797 against 0.47826087, a gap of 4.6883 points. The maximum error sits in the middle of the interval, which is where interpolation is most often needed
  • A six-point interpolation error at a 14-day tenor is larger than most bid-ask spreads in volatility terms. This is a pricing error, not a rounding preference.
  • The same argument applies across strikes: interpolate in total variance against log-moneyness, not in volatility against strike, or a linear fit can produce a negative implied density.
  • When w2 is below w1 the interpolation is still computable and is meaningless, because the pair of quotes is jointly inconsistent. Check the monotonicity before interpolating, not after.

Forward variance and the floor it places on a longer-dated quote

The variance attributable to the interval between two expirations, obtained by subtracting total variances. Because it cannot be negative, it converts every pair of quoted implied volatilities into a hard lower bound on the longer-dated one.

FieldValue
FormulaForward variance over [T1, T2] = (sigma_2^2*T_2 - sigma_1^2*T_1)/(T_2 - T_1); floor: sigma_2 is at least sigma_1*sqrt(T_1/T_2)
Forward volatilityThe square root of the forward variance, applicable to the interval and not to either quoted tenor
Non-negativityA negative forward variance is a calendar arbitrage in the quotes, not a market view
Floorsigma_2 at least sigma_1*sqrt(T_1/T_2), which follows directly from w2 being at least w1
AdditivityForward variances over disjoint intervals weighted by interval length sum to the total variance, which volatilities never do
WorkedT1 = 7/365 at sigma_1 = 0.60 and T2 = 30/365 at sigma_2 = 0.40. Total variances 0.00690411 and 0.01315068. Forward variance = (0.01315068 minus 0.00690411)/(23/365) = 0.09913043, so the forward volatility for the 23-day interval beginning in 7 days is 0.31484986 - well below both quoted numbers, which is what a concentrated front-end event does. The floor: sigma_2 must be at least 0.60*sqrt(7/30) = 0.28982753, so the 0.40 quote clears it by 11 volatility points. Reconstruction check: 0.36*(7/365) plus 0.09913043*(23/365) = 0.00690411 plus 0.00624657 = 0.01315068, recovering w2 exactly
  • A calendar spread is a position on forward variance and on nothing else. Pricing it against the two quoted spot volatilities misstates the exposure by exactly the amount the two differ from the forward.
  • The floor is the single most useful sanity check on a term-structure feed, and it costs one square root. Data that violates it is data, not an opportunity.
  • Forward variance can be very low without either quoted volatility being low, and that is the normal state of the term structure around a scheduled event rather than an anomaly.

Reference data. Reviewed 2026-08-27. Machine-readable: /volatility.json. Corpus manifest: /llms.txt.

Published and maintained by · [email protected]. A reference published by the wallstreet.wiki network. Every figure is stated as a formula and recomputed from it, every convention names the authority that sets it, and corrections are versioned and dated. About this reference.

Reference information only. Not investment advice, not a recommendation, and not a solicitation. Options involve substantial risk of loss. Contract terms, margin requirements, and exchange rules change; confirm against the current OCC and exchange rulebooks and your broker's house requirements before trading.