Volatility Skew
Calculate the volatility skew of every expiry from the 25-delta options, the standard way to compare skew across underlyings and dates:
\[\text{25-Delta} \;\text{Risk Reversal} = \operatorname{IV}(\text{25-delta} \;\text{call}) - \operatorname{IV}(\text{25-delta} \;\text{put})\] \[\text{25-Delta} \;\text{Butterfly} = (\operatorname{IV}(\text{25-delta} \;\text{call}) + \operatorname{IV}(\text{25-delta} \;\text{put})) / 2 - \text{ATM IV}\]For equities the risk reversal is usually negative: out-of-the-money puts are dearer than calls because investors pay for crash protection. A more negative risk reversal means more fear of a fall; the butterfly measures how much both tails cost relative to the centre. The deltas follow from each option’s implied volatility, and the volatility at exactly 25 delta is interpolated.
For more information, see the following book:
- Gatheral, J. (2006). “The Volatility Surface: A Practitioner’s Guide.” Wiley.
Also known as: risk reversal, volatility smile, skew, butterfly spread volatility.
Volatility Skew in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_volatility_skew as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(["QQQ", "AAPL"], api_key="FINANCIAL_MODELING_PREP_KEY")
toolkit.options.get_volatility_skew(number_of_expirations=3)
Or, after setting up the Finance Toolkit MCP, ask:
What is the 25-delta volatility skew, risk reversal and butterfly of QQQ and Apple options for their next three expirations?
Which returns:
| Days to Expiration | 25-Delta Put Volatility | At-the-Money Volatility | 25-Delta Call Volatility | 25-Delta Risk Reversal | 25-Delta Butterfly | |
|---|---|---|---|---|---|---|
| (‘QQQ’, ‘2026-10-26’) | 2 | 0.1908 | 0.1938 | 0.1855 | -0.0052 | -0.0056 |
| (‘QQQ’, ‘2026-10-27’) | 3 | 0.2287 | 0.2253 | 0.213 | -0.0157 | -0.0044 |
| (‘QQQ’, ‘2026-10-28’) | 4 | 0.2629 | 0.2545 | 0.2396 | -0.0233 | -0.0033 |
| (‘AAPL’, ‘2026-10-26’) | 2 | 0.1716 | 0.1637 | 0.1555 | -0.0161 | -0.0002 |
| (‘AAPL’, ‘2026-10-28’) | 4 | 0.2238 | 0.2136 | 0.2031 | -0.0207 | -0.0002 |
| (‘AAPL’, ‘2026-10-30’) | 6 | 0.2349 | 0.2273 | 0.215 | -0.0199 | -0.0023 |
Parameters
get_volatility_skew accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
expiration_dates | list[str] | None | The expiries to use. Defaults to None, the nearest number_of_expirations expiries. | ["2027-12-17", "2028-01-21"] |
number_of_expirations | int | The number of nearest expiries to use when no dates are given. Defaults to 6. | 4 |
rounding | int | None | The number of decimals to round the results to. Defaults to None, which uses the Toolkit’s rounding. | 2 |