Implied Volatility Skew & Smile Features¶
Overview¶
The Skew & Smile feature block extracts cross-sectional shape information from implied volatility surfaces expressed in moneyness space. It operates on daily canonical underlying data containing implied volatility smiles at fixed tenors (e.g. 30D, 60D), and summarizes:
- ATM implied volatility
- Put and call wing skew
- Risk reversals and butterflies
- Smile slope and curvature
No option-level data, delta surfaces, or pricing models are required.
Required Input Columns¶
This block requires moneyness-based implied volatility columns using the following naming convention:
iv_<TENOR>_m<MONEYNESS>
Where:
- <TENOR> is in calendar days (e.g. 30, 60)
- <MONEYNESS> is expressed as a percentage of spot
Example Required Columns¶
For a 30-day surface:
- iv_30_m90 → 90% moneyness IV
- iv_30_m95
- iv_30_m100
- iv_30_m105
- iv_30_m110
For a 60-day surface:
- iv_60_m90
- iv_60_m95
- iv_60_m100
- iv_60_m105
- iv_60_m110
At least three moneyness points per tenor are required to compute smile geometry.
Moneyness Interpretation¶
Moneyness is defined as:
Moneyness = K/S
Where: - K is the strike - S is the spot price
- Moneyness < 1.0 → put wing
- Moneyness = 1.0 → ATM
- Moneyness > 1.0 → call wing
Produced Feature Columns¶
All features are computed per tenor (currently 30D and 60D).
ATM Implied Volatility¶
| Feature | Description |
|---|---|
iv_<tenor>_atm |
Implied volatility closest to ATM (moneyness ≈ 1.0) |
Wing Skew¶
| Feature | Description |
|---|---|
iv_<tenor>_put_skew |
Mean put-wing IV − ATM IV |
iv_<tenor>_call_skew |
Mean call-wing IV − ATM IV |
These measure asymmetry of implied volatility around ATM.
Risk Reversal & Butterfly¶
| Feature | Description |
|---|---|
iv_<tenor>_rr |
Call-wing IV − Put-wing IV |
iv_<tenor>_bf |
Butterfly: ½(call + put) − ATM |
Interpretation: - Risk reversal captures directional skew - Butterfly captures smile convexity around ATM
Smile Geometry¶
| Feature | Description |
|---|---|
iv_<tenor>_smile_slope |
Linear slope of IV vs moneyness |
iv_<tenor>_smile_curvature |
Quadratic curvature of IV vs moneyness |
These are estimated via polynomial fits:
- Slope: first-order fit
- Curvature: second-order coefficient
They provide a model-free geometric summary of the smile.
Masking Rules¶
For a given tenor, all features are null if fewer than three valid moneyness IVs are available. Individual components (RR, BF) are masked if either wing is missing.
This ensures stability and avoids extrapolation.
How to Call This Feature Block¶
Recommended (Public API)¶
from ocf.features.api import skew_smile_features
features = skew_smile_features(
underlying_daily,
)
This validates the canonical schema and ensures stable outputs.
Direct Builder Access (Advanced)¶
from ocf.features.skew_smile import build_skew_smile_features
features = build_skew_smile_features(
underlying_daily,
)
This assumes inputs are already canonical.
As Part of the Composite Feature Set¶
from ocf.features.api import underlying_features
features = underlying_features(
underlying_daily,
include=["skew_smile"],
)
Or combined with other volatility features:
features = underlying_features(
underlying_daily,
include=["iv", "skew_smile", "term_structure"],
)
Notes¶
- Features are computed independently per day
- No interpolation or smoothing is applied
- Smile geometry is purely cross-sectional