Volatility Risk Premium (VRP)

Canonical definition, formula, assessment labels, and live API reference for the implied-vs-realized volatility spread.

Definition

The spread between implied volatility and realized volatility. When positive, options are priced higher than the underlying's actual movement — the structural edge for premium sellers.

Formula
VRP = σ_IV - σ_RV,n

Where σ_IV is ATM implied volatility, σ_RV,n is n-day annualized realized volatility, and n is the lookback window (5, 10, 20, or 30 days).

Inputs
ATM implied volatility realized volatility (5d/10d/20d/30d)
Output
vrp_5d vrp_10d vrp_20d vrp_30d assessment label
Interpretation
  • Positive VRP: IV exceeds RV. Options are overpriced relative to actual movement — edge for premium sellers (credit spreads, iron condors, strangles).
  • Negative VRP: RV exceeds IV. Options are underpriced — danger zone for sellers, edge for premium buyers (straddles, debit spreads).
  • Assessment labels: very_high_premium, healthy_premium, moderate_premium, thin_premium, negative_spread, danger_zone.

Live Example: SPY

Live SPY VRP data temporarily unavailable. See /stock/spy/vol-surface for current values.

Get VRP via API

Endpoint
GET /v1/volatility/{symbol}
Tier
Growth+
Parameters
  • symbol (path, required) — underlying ticker, e.g. SPY
Response shape (iv_rv_spreads section)
{
  "symbol": "SPY",
  "underlying_price": number,
  "atm_iv": number,
  "realized_vol_5d": number,
  "realized_vol_10d": number,
  "realized_vol_20d": number,
  "realized_vol_30d": number,
  "iv_rv_spreads": {
    "vrp_5d": number,
    "vrp_10d": number,
    "vrp_20d": number,
    "vrp_30d": number,
    "assessment": "very_high_premium" | "healthy_premium" |
                  "moderate_premium" | "thin_premium" |
                  "negative_spread" | "danger_zone"
  }
}
curl -H "X-Api-Key: YOUR_KEY" \
  https://lab.flashalpha.com/v1/volatility/SPY
import requests
r = requests.get(
    "https://lab.flashalpha.com/v1/volatility/SPY",
    headers={"X-Api-Key": "YOUR_KEY"}
)
d = r.json()
spreads = d["iv_rv_spreads"]
print(f"VRP (20d): {spreads['vrp_20d']:.1f}%  Assessment: {spreads['assessment']}")
const r = await fetch(
  "https://lab.flashalpha.com/v1/volatility/SPY",
  { headers: { "X-Api-Key": "YOUR_KEY" } }
);
const d = await r.json();
const s = d.iv_rv_spreads;
console.log(`VRP (20d): ${s.vrp_20d}%  Assessment: ${s.assessment}`);

Why VRP Matters for Trading

TL;DR

VRP = IV − RV. Positive and healthy = premium selling works. Negative or collapsing = time to buy vol, not sell it.

What it measures
Volatility Risk Premium: implied volatility minus realised volatility over a matched window.
What it signals
Whether option buyers or sellers have the structural edge right now.
Why we measure it
The single most persistent edge in options is that sellers of insurance tend to collect a premium. VRP measures how much that premium is worth today.
Who uses it
Systematic vol sellers, premium harvesters, risk-parity desks, long-vol hedgers.

How to read VRP

Healthy positive VRP
  • IV meaningfully above RV
  • Short premium strategies harvest
  • Iron condors, strangles, covered calls
  • Fits positive gamma regimes
Good for: premium selling, harvest-score plays
Negative / collapsing VRP
  • RV above IV — vol under-priced
  • Short vol strategies blow up
  • Long straddles and VIX calls work
  • Classic danger zone
Bad for: short vol — good for: long vol, hedges
Thin VRP (near 0)
  • Options priced ~ fairly
  • No structural edge
  • Trade direction, not vol
  • Mid-cycle reading
Skip premium

Rules of thumb

  • Use multiple windows. VRP looks different at 5d, 20d, 30d. Short windows are reactive; long windows are structural.
  • Pair with IV-RV spread. Per-window VRP is the same decomposition.
  • Watch for collapse. A healthy VRP collapsing toward zero is an early warning that short-vol is getting crowded.
  • Confirm with harvest score. Harvest = VRP + dealer flow + regime, all-in-one.
  • Event days distort VRP. Earnings bake a short-term vol premium in. Back it out before cross-name comparisons.

How to Read VRP

Start with the sign. Positive VRP means implied volatility exceeds realized volatility — the options market is pricing in more movement than the underlying is actually delivering. This is the normal state for most equities because option buyers pay a risk premium for asymmetric payoff. When VRP is positive, premium sellers (credit spreads, iron condors, short strangles) have a statistical edge because they are harvesting the gap between what the market fears and what actually happens.

Negative VRP means realized volatility exceeds implied — the underlying is moving more than the options market expects. This typically occurs during fast selloffs, gap events, or regime shifts. In a negative VRP environment, selling premium is structurally unprofitable because you collect less than the underlying's actual movement costs you. This is the danger zone. Consider switching to debit strategies or reducing position size.

FlashAlpha computes VRP across four lookback windows (5d, 10d, 20d, 30d) because different strategies care about different horizons. A 0DTE iron condor cares about 5d realised vol; a monthly credit spread cares about 20d or 30d. Check all four windows — if VRP is positive across all of them, the signal is strong. If short-window VRP is negative but long-window is positive, the underlying may be experiencing a transient spike that options haven't fully priced in yet.

Ship faster

Live for 6,000+ US symbols. One API call, sub-200ms.

Stop scraping chains and coding Black—Scholes from scratch. FlashAlpha computes GEX, DEX, VEX, CHEX, 15 BSM Greeks, SVI surfaces, max pain, VRP and more — fresh every 30s, cached at the edge. Free tier, no credit card, no rate-limit games.

Free · 5/day
GEX, regime, gamma flip, max pain preview. No card.
Basic · 100/day
DEX, VEX, CHEX, full max pain, VRP, IV rank.
Alpha · higher limits
SVI surfaces, fair-vol, harvest scores, directional VRP.