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.
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%.
uv run scripts/volatility_modeling.py
The PEP 723 header resolves the numpy and scipy dependencies automatically. Alternatively run python3 scripts/volatility_modeling.py after pip install numpy scipy.
--verify re-runs the key computations and asserts the outputs match this skill's worked examples (prints PASS/FAIL, nonzero exit on mismatch).--help lists the available class and methods.The file is primarily meant to be imported as a module, e.g. from volatility_modeling import VolatilityModeling.
tools
Design, build, and optimize dashboards for RIA practice management with AUM tracking, revenue analytics, and KPI frameworks. Use when the user asks about tracking firm-level metrics, monitoring advisor productivity, measuring organic growth rate, analyzing client retention and attrition, building executive or branch manager views, setting up exception alerts for NIGO and operational items, benchmarking against industry peers, or designing role-based dashboard access. Also trigger when users mention 'how is the practice doing', 'revenue per advisor', 'client attrition', 'net new assets', 'effective fee rate', 'practice benchmarking', 'AUM growth decomposition', or 'advisor capacity'.
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
Maximizes after-tax returns through strategic asset location, gain/loss management, and withdrawal sequencing. Use when the user asks about asset location, 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', 'tax drag', 'Roth vs Traditional', 'RMD planning', 'bracket stuffing', 'HIFO vs FIFO', or ask how to minimize taxes on investments. For tax-loss harvesting execution and wash-sale mechanics, see the tax-loss-harvesting skill.
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.