plugins/wealth-management/skills/volatility-modeling/SKILL.md
Model, forecast, and interpret volatility using time-series models and options-implied measures. Use when the user asks about EWMA, GARCH models, implied volatility, volatility surfaces, volatility term structure, or the VIX. Also trigger when users mention 'volatility smile', 'volatility skew', 'realized vs implied vol', 'volatility risk premium', 'vol clustering', 'mean-reverting volatility', 'options pricing inputs', 'RiskMetrics', 'decay factor', or ask how to forecast future volatility for risk management.
npx skillsauth add joellewis/finance_skills volatility-modelingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Model, forecast, and interpret volatility using time-series models and options-implied measures. This skill covers EWMA and GARCH(1,1) for volatility forecasting, implied volatility extraction, volatility smile/skew/surface construction, the volatility term structure, the realized-vs-implied volatility gap (volatility risk premium), and the VIX index. These tools are foundational for options pricing, risk management, and trading strategy development.
1b — Forward-Looking Risk
Prospective
A simple volatility model that gives more weight to recent observations. RiskMetrics popularized this approach with a standard decay factor.
sigma^2_t = lambda * sigma^2_{t-1} + (1 - lambda) * r^2_{t-1}
where:
Properties:
The Generalized Autoregressive Conditional Heteroskedasticity model adds a constant term that induces mean reversion in volatility.
sigma^2_t = omega + alpha * r^2_{t-1} + beta * sigma^2_{t-1}
where:
Stationarity condition: alpha + beta < 1. This ensures the process is covariance-stationary and mean-reverting.
Long-run (unconditional) variance:
V_L = omega / (1 - alpha - beta)
Long-run annualized volatility: sigma_L = sqrt(V_L * 252).
Persistence: The quantity alpha + beta measures how quickly volatility reverts to its long-run level. Higher persistence means slower mean reversion.
Half-life of volatility shocks: The number of periods for a volatility shock to decay by half:
h = -ln(2) / ln(alpha + beta)
Since alpha + beta < 1, ln(alpha + beta) < 0, and h is positive.
Multi-step forecasts: The h-step-ahead GARCH(1,1) forecast:
E[sigma^2_{t+h}] = V_L + (alpha + beta)^h * (sigma^2_t - V_L)
The forecast converges to V_L as h approaches infinity.
The volatility value that, when plugged into an option pricing model (typically Black-Scholes), produces a theoretical price equal to the observed market price.
For a European call under Black-Scholes:
C = S * N(d1) - K * exp(-rT) * N(d2)
d1 = [ln(S/K) + (r + sigma^2/2) * T] / (sigma * sqrt(T))
d2 = d1 - sigma * sqrt(T)
Implied volatility is the sigma that solves C_model(sigma) = C_market. There is no closed-form solution; it must be found numerically (e.g., Newton-Raphson, bisection).
In practice, implied volatility varies by strike price, contradicting the constant-volatility assumption of Black-Scholes.
Implied volatility varies across option expiration dates.
The two-dimensional surface of implied volatility across both strike (or delta/moneyness) and maturity. The volatility surface is the most complete representation of the options market's view of future uncertainty.
Practitioners interpolate the surface to price options at arbitrary strike/maturity combinations. Surface dynamics (how the surface shifts, tilts, and bends) are critical for options portfolio risk management.
Implied volatility systematically exceeds subsequent realized volatility on average. This gap is the volatility risk premium (VRP).
VRP = IV - RV_subsequent
The VRP exists because investors are willing to pay a premium for options (insurance), and option sellers demand compensation for bearing tail risk. The VRP is typically positive and has been a persistent source of return for volatility sellers.
Key considerations:
The CBOE Volatility Index measures the market's expectation of 30-day forward volatility, derived from S&P 500 option prices.
| Formula | Expression | Use Case | |---------|-----------|----------| | EWMA Variance | sigma^2_t = lambda * sigma^2_{t-1} + (1-lambda) * r^2_{t-1} | Simple volatility forecast | | GARCH(1,1) Variance | sigma^2_t = omega + alpha * r^2_{t-1} + beta * sigma^2_{t-1} | Mean-reverting vol forecast | | GARCH Long-Run Variance | V_L = omega / (1 - alpha - beta) | Unconditional variance level | | GARCH Half-Life | h = -ln(2) / ln(alpha + beta) | Speed of mean reversion | | GARCH h-Step Forecast | V_L + (alpha+beta)^h * (sigma^2_t - V_L) | Multi-period vol forecast | | Black-Scholes Call | S * N(d1) - K * exp(-rT) * N(d2) | Option pricing (IV extraction) | | Volatility Risk Premium | IV - RV_subsequent | Premium earned by vol sellers | | EWMA Effective Window | approximately 1 / (1 - lambda) | Implicit lookback period |
Given: Yesterday's variance estimate sigma^2_{t-1} = 0.0004 (daily vol = 2%), yesterday's return r_{t-1} = -3% (i.e., r = -0.03), and lambda = 0.94.
Calculate: Today's EWMA variance estimate and daily volatility.
Solution:
sigma^2_t = 0.94 * 0.0004 + (1 - 0.94) * (-0.03)^2
= 0.94 * 0.0004 + 0.06 * 0.0009
= 0.000376 + 0.000054
= 0.000430
Daily volatility:
sigma_t = sqrt(0.000430) = 0.02074 = 2.074%
The large negative return (-3%) caused the volatility estimate to increase from 2.0% to 2.074%. The EWMA responded to the shock, but the high lambda (0.94) dampened the reaction.
Given: GARCH(1,1) parameters estimated from daily S&P 500 returns: omega = 0.000002, alpha = 0.08, beta = 0.91.
Calculate: Long-run daily variance, long-run annualized volatility, and half-life of volatility shocks.
Solution:
Stationarity check: alpha + beta = 0.08 + 0.91 = 0.99 < 1 (stationary, but highly persistent).
Long-run variance:
V_L = 0.000002 / (1 - 0.99) = 0.000002 / 0.01 = 0.0002
Long-run daily volatility:
sigma_L = sqrt(0.0002) = 0.01414 = 1.414%
Annualized:
sigma_annual = 0.01414 * sqrt(252) = 22.45%
Half-life:
h = -ln(2) / ln(0.99) = -0.6931 / (-0.01005) = 68.97 ~ 69 trading days
Interpretation: After a volatility shock, it takes approximately 69 trading days (about 3 months) for the excess volatility to decay by half. This high persistence (alpha + beta = 0.99) is typical for equity index returns.
Given: A stock trades at $100. A 3-month ATM call (K = $100) trades at $6.50. The risk-free rate is 5%. Using Black-Scholes, the implied volatility is determined (via numerical solver) to be 30%.
Calculate: What does this tell us, and how does it compare to realized vol of 22%?
Solution:
The implied volatility of 30% represents the market's consensus forecast of annualized volatility over the next 3 months, as embedded in option prices.
Comparing to realized (historical) volatility of 22%:
VRP = IV - RV = 30% - 22% = 8%
The positive 8-percentage-point gap is the volatility risk premium. Possible interpretations:
A systematic vol-selling strategy would sell this option, expecting to profit from the VRP if realized vol remains near 22%. However, the seller bears the risk that realized vol could exceed 30%.
See scripts/volatility_modeling.py for computational helpers.
testing
Execute a complete tax-loss harvesting workflow from candidate identification through post-harvest monitoring. Use when the user asks about finding TLH candidates, gain/loss budgeting, replacement security selection, wash-sale compliance, or harvest execution planning. Also trigger when users mention 'unrealized losses in my portfolio', 'swap ETFs for tax purposes', 'harvest losses before year-end', 'substantially identical security', 'wash-sale window', 'NIIT offset', 'loss carryforward', or ask how much tax they can save by harvesting.
testing
Maximize after-tax returns through strategic asset location, tax-loss harvesting, gain/loss management, and withdrawal sequencing. Use when the user asks about asset location, tax-loss harvesting, Roth conversions, tax-efficient withdrawals, tax lot selection, or charitable giving with appreciated securities. Also trigger when users mention 'which account should I hold bonds in', 'wash-sale rule', 'tax drag', 'Roth vs Traditional', 'RMD planning', 'bracket stuffing', 'HIFO vs FIFO', or ask how to minimize taxes on investments.
development
Plan and track savings for specific financial goals including retirement, education, and home purchase. Use when the user asks about required savings rates, 529 plans, retirement accumulation targets, down payment planning, or goal prioritization. Also trigger when users mention 'how much do I need to save each month', 'am I on track for retirement', 'college savings', 'safe withdrawal rate', '4% rule', 'FIRE savings rate', 'catch-up contributions', 'employer match', or ask how to balance competing savings goals.
testing
Maintain portfolio allocations over time using calendar-based, threshold-based, and tax-efficient rebalancing strategies. Use when the user asks about when to rebalance, rebalancing bands, transaction cost trade-offs, tax-efficient rebalancing, or the rebalancing premium. Also trigger when users mention 'my portfolio drifted', 'how often should I rebalance', 'rebalancing across taxable and IRA accounts', 'volatility harvesting', 'buy low sell high automatically', or ask whether to use cash flows to rebalance.