You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Smile-aware Greek conventions: sticky='strike' / sticky='delta' on VolSurface Greeks #35
Split out of #11, whose proposal listed smile-aware Greeks as an option
(sticky="strike" vs sticky="delta"); the shipped v0.9.0 layer took
the documented minimum -- sticky-strike only -- and #11 closes with the
v0.9.0 release, so the option gets its own issue here.
Context
These are smile-dynamics conventions, not calibration objectives: they
change what delta/gamma/theta MEAN, not how the surface is fitted, so
the work lands in the VolSurface Greeks layer, untouched by the
calibration controls.
Background: Derman's regimes of volatility
The taxonomy comes from Derman (1999), who observed that S&P 500
implied vols move with the index according to (at least) three distinct
rules, each appropriate to a market regime, each implying a different
hedge ratio. With a negatively sloped skew sigma(K) ~ sigma0 - b*K:
regime
rule of thumb
when
consequence
sticky strike
sigma(K) fixed as S moves
range-bound, trendless
Black-Scholes delta is the right hedge; ATM vol drifts down as S rises (the ATM strike slides along the fixed skew)
sticky delta / moneyness
sigma(K/S) fixed -- the smile floats with spot
stable trending market
ATM vol constant in S; call delta > sticky-strike delta by the smile-slope (vega) correction
sticky implied tree (local vol)
the local-vol surface fixed; per-strike vols fall as S rises
jumpy, fearful, post-crash
ATM vol falls at ~twice the skew slope; delta < sticky-strike delta
Three consequences for this issue:
The convention is a per-call choice, not a surface property.
Which rule is the right hedge ratio is an empirical, regime-dependent
question -- exactly why 'sticky=' belongs on the Greek calls rather
than baked into the fit.
The taxonomy is three-valued, not two. The implied-tree /
local-vol regime is deliberately OUT OF SCOPE here: a proper
local-vol delta needs the Dupire surface, i.e. dw/dT everywhere
(available since interp_method="monotone_cubic", Differentiability contract and C1 maturity interpolation #22) plus a
local-vol layer that does not exist yet (filed as Dupire local volatility layer: surface.local_vol on C1 surfaces #36). The 'sticky=' parameter
should be designed so 'local_vol' can be added later without
breaking the API; the docs table should present all three regimes
and say explicitly which two are implemented.
Derman's rules give free test oracles. With a negative skew the
deltas must order as local-vol < sticky-strike < sticky-delta, and
under sticky-delta the ATM vol must be invariant to a spot bump that
drags the smile in moneyness. Both are cheap, regime-grounded
assertions to add alongside the finite-difference checks.
Sticky strike (current behaviour): differentiate holding sigma(K)
fixed -- the vol at a given strike stays put as the forward moves.
Sticky delta / sticky moneyness: sigma is held fixed per
moneyness (or delta) level, so a spot move drags the smile along.
Delta picks up the smile-slope correction delta_sd = delta_ss + vega * dsigma/dK * dK/dF-type terms
(equivalently: differentiate through sigma(k) with k = ln(K/F)
fixed); gamma and theta adjust correspondingly. The surface already
exposes everything needed: dw_dk gives dsigma/dk analytically for
the SVI family.
sticky="strike" remains the default -- existing behaviour and
serialized surfaces are untouched.
sticky="delta" computes the smile-slope-corrected Greeks from the
model's analytic dw/dk (finite-difference fallback for SABR /
DirectSVI, as elsewhere).
price and vega are convention-independent and take no parameter.
Document the two conventions side by side, with the standard guidance
on when each is the right hedge ratio (index vs FX-style smiles).
Acceptance criteria
Sticky-delta Greeks verified against finite differences of the price
under the corresponding smile shift (bump F, move the smile in k)
sticky="strike" bitwise-identical to today's output
Sticky-delta call delta exceeds sticky-strike delta on a
negative-skew fixture (Derman's regime ordering)
Both conventions demonstrated in the examples and documented on the
surface page (per the maintenance policy), with the three-regime
table and the regime guidance on when each is the right hedge ratio
Split out of #11, whose proposal listed smile-aware Greeks as an option
(
sticky="strike"vssticky="delta"); the shipped v0.9.0 layer tookthe documented minimum -- sticky-strike only -- and #11 closes with the
v0.9.0 release, so the option gets its own issue here.
Context
These are smile-dynamics conventions, not calibration objectives: they
change what delta/gamma/theta MEAN, not how the surface is fitted, so
the work lands in the VolSurface Greeks layer, untouched by the
calibration controls.
Background: Derman's regimes of volatility
The taxonomy comes from Derman (1999), who observed that S&P 500
implied vols move with the index according to (at least) three distinct
rules, each appropriate to a market regime, each implying a different
hedge ratio. With a negatively sloped skew sigma(K) ~ sigma0 - b*K:
Three consequences for this issue:
Which rule is the right hedge ratio is an empirical, regime-dependent
question -- exactly why 'sticky=' belongs on the Greek calls rather
than baked into the fit.
local-vol regime is deliberately OUT OF SCOPE here: a proper
local-vol delta needs the Dupire surface, i.e. dw/dT everywhere
(available since interp_method="monotone_cubic", Differentiability contract and C1 maturity interpolation #22) plus a
local-vol layer that does not exist yet (filed as Dupire local volatility layer: surface.local_vol on C1 surfaces #36). The 'sticky=' parameter
should be designed so 'local_vol' can be added later without
breaking the API; the docs table should present all three regimes
and say explicitly which two are implemented.
deltas must order as local-vol < sticky-strike < sticky-delta, and
under sticky-delta the ATM vol must be invariant to a spot bump that
drags the smile in moneyness. Both are cheap, regime-grounded
assertions to add alongside the finite-difference checks.
fixed -- the vol at a given strike stays put as the forward moves.
moneyness (or delta) level, so a spot move drags the smile along.
Delta picks up the smile-slope correction
delta_sd = delta_ss + vega * dsigma/dK * dK/dF-type terms(equivalently: differentiate through sigma(k) with k = ln(K/F)
fixed); gamma and theta adjust correspondingly. The surface already
exposes everything needed:
dw_dkgives dsigma/dk analytically forthe SVI family.
Proposal
sticky="strike"remains the default -- existing behaviour andserialized surfaces are untouched.
sticky="delta"computes the smile-slope-corrected Greeks from themodel's analytic dw/dk (finite-difference fallback for SABR /
DirectSVI, as elsewhere).
on when each is the right hedge ratio (index vs FX-style smiles).
Acceptance criteria
under the corresponding smile shift (bump F, move the smile in k)
negative-skew fixture (Derman's regime ordering)
surface page (per the maintenance policy), with the three-regime
table and the regime guidance on when each is the right hedge ratio
Reference
Derman, E. (1999). "Regimes of Volatility: Some Observations on the
Variation of S&P 500 Implied Volatilities." Goldman Sachs Quantitative
Strategies Research Notes (also summarized in Risk, April 1999).
Author's page: https://emanuelderman.com/regimes-of-volatility-risk-april-1999/
(the GS QSRN series, this note included, is collected at
https://github.com/s0ap/gs-quantitative-strategies-research-notes).