Implied Volatility Term Structure Features¶
Overview¶
The Term Structure feature block extracts time-dimension structure from ATM implied volatility across maturities. It operates on daily, canonical underlying data and uses only ATM implied volatility levels at different tenors. No option-level data, pricing models, or forward curves are required.
These features describe:
- Whether volatility is upward or downward sloping
- The relative steepness of the curve
- Simple curvature proxies
- Forward variance implied by adjacent maturities
Required Input Columns¶
The following columns must be present in the canonical underlying daily table:
| Column | Description |
|---|---|
iv_30_m100 |
30-day ATM implied volatility (100% moneyness) |
iv_60_m100 |
60-day ATM implied volatility (100% moneyness) |
If either column is missing, the feature block raises an error.
Tenor Conventions¶
Tenors are interpreted as calendar days, converted to year fractions:
| Tenor | Year Fraction |
|---|---|
| 30D | 30 / 365 |
| 60D | 60 / 365 |
All computations assume implied volatilities are expressed in decimal form.
Produced Feature Columns¶
Term Structure Shape¶
| Feature | Description |
|---|---|
iv_term_slope_30_60 |
Difference between 60D and 30D ATM IV |
iv_term_ratio_30_60 |
Ratio of 60D to 30D ATM IV |
These features indicate whether the volatility curve is: - Upward sloping (longer-dated IV > shorter-dated IV) - Inverted (short-term IV elevated relative to longer-term)
Curvature Proxy¶
| Feature | Description |
|---|---|
iv_term_curvature_30_60 |
Simple curvature proxy between 30D and 60D ATM IV |
This acts as a minimal curvature indicator when only two tenors are available.
Forward Variance¶
| Feature | Description |
|---|---|
iv_fwd_var_30_60 |
Implied forward variance between 30D and 60D |
Forward variance is computed by comparing the total variance implied by a longer-dated option with that implied by a shorter-dated option, after scaling each by its respective time to maturity. The implied volatilities at the money for the short and long maturities are combined with their year-fraction tenors to extract the portion of variance that lies strictly between the two maturities. In doing so, this measure isolates the incremental variance implied beyond the shorter horizon, providing a clean view of the market’s expectation of variance over the forward period rather than over the entire life of the longer-dated option.
Masking Rules¶
All term structure features are masked (null) when either source IV is missing:
iv_30_m100iv_60_m100
This prevents partial or invalid term structure signals.
How to Call This Feature Block¶
Recommended (Public API)¶
from ocf.features.api import term_structure_features
features = term_structure_features(
underlying_daily,
)
This validates the canonical schema and enforces a stable output contract.
Direct Builder Access (Advanced)¶
from ocf.features.term_structure import build_term_structure_features
features = build_term_structure_features(
underlying_daily,
)
This assumes canonical inputs and skips schema validation.
As Part of the Composite Feature Set¶
from ocf.features.api import underlying_features
features = underlying_features(
underlying_daily,
include=["term_structure"],
)
Or combined with other volatility features:
features = underlying_features(
underlying_daily,
include=["iv", "skew_smile", "term_structure"],
)
Notes¶
- Features are daily and fully causal
- No forward curve construction is assumed
- Only adjacent tenor information is used