volatility-modeling

Volatility estimation, forecasting, and regime classification using GARCH, EWMA, realized volatility, and volatility cones

7 stars

Best use case

volatility-modeling is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Volatility estimation, forecasting, and regime classification using GARCH, EWMA, realized volatility, and volatility cones

Teams using volatility-modeling should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/volatility-modeling/SKILL.md --create-dirs "https://raw.githubusercontent.com/agiprolabs/claude-trading-skills/main/skills/volatility-modeling/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/volatility-modeling/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How volatility-modeling Compares

Feature / Agentvolatility-modelingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Volatility estimation, forecasting, and regime classification using GARCH, EWMA, realized volatility, and volatility cones

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Volatility Modeling

Volatility — the magnitude of price fluctuations — is arguably the single most
important quantity in trading.  It drives position sizing, stop placement, option
pricing, and regime detection.  This skill covers estimation, forecasting, and
practical application of volatility in crypto markets.

## Why Volatility Matters

| Use Case | How Volatility Is Used |
|---|---|
| **Position sizing** | Scale position inversely with vol so each trade risks a consistent dollar amount |
| **Stop placement** | ATR-based stops widen in high-vol regimes, tighten in low-vol |
| **Strategy selection** | Mean-reversion works in low vol; momentum works in high vol |
| **Risk budgeting** | Vol-target portfolios maintain constant portfolio-level risk |
| **Regime detection** | Vol regime shifts signal changing market dynamics |
| **Option pricing** | Implied vs realized vol gap creates trading opportunities |

## Types of Volatility

### Historical (Realized) Volatility
Computed from observed past returns.  The most common and directly measurable
form.  Multiple estimators exist with different statistical efficiency.

### Implied Volatility
Derived from option prices via Black-Scholes or similar models.  Limited in
crypto DeFi where liquid options markets are sparse, but available on Deribit
for BTC/ETH.

### Forecast Volatility
Predicted future volatility from models like EWMA or GARCH.  Used for
forward-looking position sizing and risk budgets.

---

## Estimation Methods

### 1. Close-to-Close (Standard Deviation of Log Returns)

The simplest estimator.  Compute the standard deviation of log returns and
annualize.

```python
import numpy as np

log_returns = np.log(closes[1:] / closes[:-1])
vol_daily = np.std(log_returns, ddof=1)
vol_annual = vol_daily * np.sqrt(365)  # crypto trades 365 days
```

- **Pros**: Simple, widely understood.
- **Cons**: Uses only close prices — ignores intraday range.

### 2. Parkinson (High-Low Range)

Uses the daily high-low range, which is ~5x more statistically efficient than
close-to-close.

```python
hl_ratio = np.log(highs / lows)
vol_parkinson = np.sqrt(np.mean(hl_ratio**2) / (4 * np.log(2))) * np.sqrt(365)
```

- **Pros**: More efficient, captures intraday moves.
- **Cons**: Downward bias with discrete sampling; ignores close-to-close jumps.

### 3. Garman-Klass (OHLC)

The most efficient single-day OHLC estimator.

```python
hl = np.log(highs / lows)
co = np.log(closes / opens)
gk = np.mean(0.5 * hl**2 - (2 * np.log(2) - 1) * co**2)
vol_gk = np.sqrt(gk) * np.sqrt(365)
```

- **Pros**: Best efficiency among OHLC estimators.
- **Cons**: Assumes no drift; sensitive to opening gaps.

### 4. Yang-Zhang

Combines overnight (close-to-open) and open-to-close components.  Handles
gaps properly.  Less relevant for 24/7 crypto but useful for tokens with
sporadic trading.

### 5. EWMA (Exponentially Weighted Moving Average)

RiskMetrics approach — no parameters to estimate beyond λ.

```python
lam = 0.94  # RiskMetrics default for daily
ewma_var = np.zeros(len(returns))
ewma_var[0] = returns[0] ** 2
for t in range(1, len(returns)):
    ewma_var[t] = lam * ewma_var[t - 1] + (1 - lam) * returns[t - 1] ** 2
vol_ewma = np.sqrt(ewma_var) * np.sqrt(365)
```

- λ = 0.94 for daily data (RiskMetrics).
- λ = 0.97 for weekly data.
- Higher λ → smoother, slower reaction to new information.

### 6. GARCH(1,1)

The workhorse autoregressive volatility model.  Captures volatility clustering.

```
σ²_t = ω + α · r²_{t-1} + β · σ²_{t-1}
```

- **ω**: long-run variance weight.
- **α**: reaction to recent shock (typically 0.05–0.15 for crypto).
- **β**: persistence (typically 0.80–0.90 for crypto).
- **α + β < 1**: stationarity constraint.
- **Long-run variance**: ω / (1 − α − β).

Estimated via maximum likelihood.  See `references/estimators.md` for details.

---

## Volatility Cones

Volatility cones show the percentile distribution of realized volatility at
different lookback windows, revealing whether current vol is historically
high or low.

### Construction
1. Get 1+ years of daily data.
2. For each lookback window (5, 10, 20, 60, 120 days):
   - Compute rolling realized volatility.
   - Extract percentiles: 5th, 25th, 50th, 75th, 95th.
3. Plot percentiles vs window length — the "cone" shape.
4. Overlay current realized vol at each window.

### Interpretation
- **Current vol > 75th percentile**: historically elevated — expect mean reversion.
- **Current vol < 25th percentile**: historically compressed — expect expansion.
- **Cone narrowing at longer windows**: vol mean-reverts over longer horizons.

See `references/volatility_cones.md` for full methodology and worked examples.

---

## Crypto Volatility Characteristics

Crypto vol differs from traditional assets in important ways:

| Characteristic | Detail |
|---|---|
| **Level** | 50–150% annualized is typical; TradFi equities are 15–25% |
| **Clustering** | Strong — high-vol days cluster together |
| **Weekday patterns** | Weekend vol often lower but weekend gaps can be large |
| **Volume correlation** | Vol and volume are positively correlated |
| **Regime dependence** | Bull market vol ≠ bear market vol; ranges are different |
| **Mean reversion** | Vol mean-reverts more reliably than price |
| **Tail risk** | Fat tails — more extreme moves than normal distribution predicts |

### Regime Classification by Volatility

| Regime | Annualized Vol Range | Characteristics |
|---|---|---|
| Low vol | < 40% | Range-bound, mean reversion works |
| Normal vol | 40–80% | Trending possible, balanced strategies |
| High vol | 80–120% | Strong trends or sharp reversals |
| Crisis vol | > 120% | Liquidation cascades, reduced position size |

---

## Volatility Forecasting

### EWMA Forecast
Simple and effective.  The current EWMA variance estimate *is* the 1-step
forecast.  Multi-step forecasts are flat (same as 1-step).

### GARCH Forecast
GARCH produces a term structure of variance forecasts:

```
σ²_{t+h} = V_L + (α + β)^h · (σ²_t − V_L)
```

Where V_L = ω / (1 − α − β) is the long-run variance.

- Short-horizon forecasts reflect current conditions.
- Long-horizon forecasts converge to long-run variance.
- The speed of convergence depends on α + β (persistence).

See `scripts/vol_forecast.py` for a working implementation.

---

## Practical Applications

### Position Sizing with Volatility
```python
# Vol-target position sizing
target_vol = 0.02  # 2% daily portfolio vol target
current_vol = 0.05  # 5% daily asset vol (annualized ~95%)
weight = target_vol / current_vol  # = 0.40 → 40% allocation
```

See the `position-sizing` skill for complete integration.

### ATR-Based Stop Placement
```python
atr_14 = talib.ATR(highs, lows, closes, timeperiod=14)
stop_distance = 2.0 * atr_14[-1]  # 2x ATR stop
stop_price = entry_price - stop_distance  # for longs
```

### Vol-Regime Strategy Selection
```python
vol_percentile = current_vol_percentile(token, window=30)
if vol_percentile < 25:
    strategy = "mean_reversion"
elif vol_percentile > 75:
    strategy = "momentum_breakout"
else:
    strategy = "balanced"
```

---

## Files

### References
| File | Description |
|---|---|
| `references/estimators.md` | Full derivations and details for all volatility estimators |
| `references/volatility_cones.md` | Cone construction methodology and interpretation guide |

### Scripts
| File | Description |
|---|---|
| `scripts/estimate_volatility.py` | Multi-estimator volatility computation with cone analysis |
| `scripts/vol_forecast.py` | EWMA and GARCH forecasting with term structure output |

---

## Related Skills

- **`regime-detection`** — Classify market regimes using volatility as a key input.
- **`position-sizing`** — Scale positions inversely with volatility.
- **`risk-management`** — Portfolio-level vol targeting and risk budgets.
- **`pandas-ta`** — ATR and Bollinger Bands are volatility-based indicators.
- **`custom-indicators`** — Build crypto-specific volatility indicators.

---

## Dependencies

```bash
uv pip install pandas numpy scipy
```

Optional for live data:
```bash
uv pip install httpx
```

Related Skills

slippage-modeling

7
from agiprolabs/claude-trading-skills

Execution cost estimation, slippage curve modeling, and optimal trade sizing based on AMM liquidity depth

yield-analysis

7
from agiprolabs/claude-trading-skills

DeFi yield evaluation including fee APR, real vs nominal yield, net APY after costs, and yield sustainability analysis

yellowstone-grpc

7
from agiprolabs/claude-trading-skills

Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)

whale-tracking

7
from agiprolabs/claude-trading-skills

Large wallet monitoring, accumulation and distribution detection, and smart money signal generation for Solana tokens

wash-sale-detection

7
from agiprolabs/claude-trading-skills

Wash sale detection under 2025 US crypto rules with 61-day window monitoring, disallowed loss tracking, and safe re-entry countdown

wallet-profiling

7
from agiprolabs/claude-trading-skills

Behavioral classification, performance analysis, and trading style detection for Solana wallets

walk-forward-validation

7
from agiprolabs/claude-trading-skills

Walk-forward validation framework for trading strategies and ML models with time-series-aware splits, overfit detection, and regime-aware validation

vectorbt

7
from agiprolabs/claude-trading-skills

High-performance vectorized backtesting with parameter optimization, portfolio simulation, and rich performance metrics

trading-visualization

7
from agiprolabs/claude-trading-skills

Professional trading charts including candlesticks, equity curves, drawdowns, correlation heatmaps, and return distributions

trade-journal

7
from agiprolabs/claude-trading-skills

Structured trade logging, performance review, behavioral pattern detection, and strategy attribution for systematic improvement

trade-accounting

7
from agiprolabs/claude-trading-skills

Double-entry bookkeeping for trading operations with ledger management, P&L statements, balance sheets, and cash flow reporting

token-holder-analysis

7
from agiprolabs/claude-trading-skills

Token holder distribution, concentration metrics, insider detection, and supply analysis for Solana tokens