Help us double down on what's working, instead of guessing. Takes 5 seconds, totally optional.
vrp · 18 min read
Volatility Risk Premium Trading: Measurement, Strategy Research and Risk
A practical guide to interpreting volatility risk premium data before strategy research: trailing IV-RV spreads, z-scores, directional measures, dealer-positioning estimates and suitability scores. Distinguishes measured spreads from forecasts, validated rules and implemented returns.
Each session, sell-window says sell or skip for four expiries on SPY, QQQ and IWM, so you can stay out on the rough days. As a bonus, on a sell day it suggests positions, with strikes and exit rules. More than 5 million backtests led to it.
Following it from 2018 to 2026, the deepest drawdown was $255,105, against $958,924 for the same trades sold every day.
Available from Basic this month and from Growth from December 1. Backtesting from Alpha.
What Is the Volatility Risk Premium (and Why Does It Exist)
The forward volatility premium is implied volatility minus the realized volatility that follows over the same horizon. A trailing IV-minus-RV spread is observable today, but it uses a different information set. IV also reflects risk pricing, so it is not an unbiased forecast of the movement that will occur.
If SPY's ATM implied volatility is 20% and trailing 20-session realized volatility is 16%, the trailing spread is 4 volatility points. Both inputs are annualized, but the difference is not a 4% annual return, premium collected per contract, or a forecast of the next month's spread. Option profit depends on strikes, expiry, the price path, hedging, transaction costs and capital employed.
Start with the measurement. The VRP formula, calculation and evidence guide distinguishes four definitions, reproduces a historical SPY example and evaluates a trailing-spread specification on 11 symbols. Its results do not validate the illustrative filters below or rule out every possible VRP strategy.
Keep four steps separate: a measured spread, a forecast of future volatility, a tested trading rule, and the return achieved after implementation. A positive reading establishes the first step. Each later step needs its own evidence; this page does not supply a validated sizing rule.
Why Does This Premium Exist?
Demand for downside protection and compensation for bearing volatility and jump risk are economic explanations for variance risk premia. They do not imply that every option is overpriced or that an ATM trailing spread measures the price of that risk without error. Academic studies often use an option-strip-implied variance measure, rather than squared ATM IV; see variance versus volatility premium.
What the Spread Does and Does Not Establish
A short option can lose on direction, jumps, changing IV, execution costs or margin pressure even when a measured volatility spread is positive. Covered calls, credit spreads and delta-hedged straddles have different exposures. Their returns cannot be inferred from the sign of one dashboard field.
The formula guide's signal test evaluates a particular historical tercile rule, not the z-score, directional or dealer-risk rules that could be built from this page. A rule needs a stated sample, entry and exit mechanics, realistic costs, capital requirements and out-of-sample evaluation before making a profit or sizing claim. The separately linked sell-window backtest above has its own protocol and should be assessed on that basis.
Illustration: A Negative Trailing Spread Is Context, Not a Trade Verdict
Suppose 30-day ATM IV is 19.8% and trailing 20-session RV is 23.1%. The trailing spread is −3.3 volatility points. That says implied volatility is below this historical estimate; it does not establish that options are below fair value, that realized volatility will remain high, or that buying volatility will be profitable.
A positive spread after the next market move is equally limited. Before using either reading as a filter, test whether it improves the specified strategy against a suitable benchmark. This is a hypothetical arithmetic illustration, not a historical trade or a backtested recommendation.
Measuring VRP - The Four Windows
The FlashAlpha VRP endpoint subtracts four trailing RV lookbacks from its ATM IV reading. These fields change the historical comparison window, not the option expiry used by atm_iv. That field uses the first expiry at least seven days out; use the term_vrp buckets to inspect expiry-specific IV and document the RV window separately. Thirty calendar days and 30 trading sessions are different horizons.
Window
Calculation
Character
Historical context
5-day VRP
ATM IV - RV5
Short lookback, sensitive to recent daily returns
Recent movement; does not measure 0DTE fair value
10-day VRP
ATM IV - RV10
Intermediate trailing lookback
Compare recent and longer-run movement
20-day VRP
ATM IV - RV20
Roughly one month of trading sessions
Common trailing-RV comparison
30-day VRP
ATM IV - RV30
Longer trailing lookback
Historical movement over 30 sessions
Here's how to pull all four VRP spreads for any symbol:
A positive expected return or an appropriate position size.
Near zero
The two annualized readings are similar.
That the option is fairly priced after skew, events and costs.
Negative
ATM IV is below the selected trailing RV estimate.
That future RV will exceed IV or that buying options is profitable.
There is no universal spread threshold at which a short-option strategy becomes attractive. A 1.5-point and a 4-point spread must be evaluated with their own tenor, estimator, event exposure and implementation.
Check SPY's VRP right now
See the live VRP spread, z-score, and regime for SPY - updated every 15 minutes during market hours.
Z-Score and Percentile - Is VRP Rich or Cheap Right Now?
Raw VRP tells you the spread between IV and RV. But "4 volatility points" means something very different in a low-vol regime (where four points is unusually wide) versus a high-vol regime (where four points might be compressed). You need context.
That's what the z-score and percentile provide. The VRP endpoint returns both, calculated against up to 252 trailing days of history (and null when history is insufficient):
The z-score tells you how many standard deviations today's VRP is from its trailing mean. The percentile tells you where today's VRP falls in the endpoint's available trailing history.
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/vrp/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
z = data["vrp"]["z_score"]
pct = data["vrp"]["percentile"]
vrp_20d = data["vrp"]["vrp_20d"]
print(f"VRP (20d): {vrp_20d:+.2f} vol points")
print(f"Z-score: {z}")
print(f"Percentile: {pct}")
# Descriptive output only; these are not validated trade filters.
if z is None:
print("Insufficient history for a z-score.")
elif z > 1.5:
print("Trailing spread is unusually high relative to this lookback.")
elif z < -1.0:
print("Trailing spread is unusually low relative to this lookback.")
else:
print("Inspect the returned percentile and the underlying IV/RV inputs.")
Z-Scores Describe History
The cutoffs in this code are unvalidated display categories. A high z-score does not imply a positive spread, a profitable entry or permission to increase size. Likewise, a low z-score does not prove that the spread is negative. The endpoint's empirical percentile is separate from the z-score; mapping between them requires a distributional assumption.
For example, a positive spread with a z-score of −0.8 is below its recent mean. Whether that observation predicts returns is a separate test. See the trailing-versus-forward analysis before treating a historical comparison as a forecast.
Directional VRP - The Put Side vs Call Side
The FlashAlpha VRP endpoint provides put-side and call-side measures. These describe asymmetry in the selected implied and realized inputs. They are not expected returns on puts and calls, and their difference does not determine the best option structure.
Why Directional VRP Matters
Downside hedging demand can make put IV higher than call IV. A larger downside reading may reflect a different payoff distribution and jump risk, rather than a larger exploitable profit. If put-side VRP is 5.2 points and call-side VRP is 1.1 points, that is a comparison of volatility measures, not evidence that selling puts earns five times as much.
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/vrp/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
directional = data["directional"]
put_vrp = directional["downside_vrp"]
call_vrp = directional["upside_vrp"]
skew_spread = put_vrp - call_vrp
print(f"Put-side VRP: {put_vrp:+.2f} vol points")
print(f"Call-side VRP: {call_vrp:+.2f} vol points")
print(f"Skew spread: {skew_spread:+.2f} vol points")
# Inspect the decomposition; no structure or size is prescribed.
print("Compare these measures with actual quotes, event risk and tested payoffs.")
From Directional Measures to a Strategy Test
Call-side readings can exceed put-side readings, including around upside events. Choosing a call spread, put spread or iron condor still requires quoted credits, strikes, expiry, margin and loss scenarios. An iron condor does not require equal put-side and call-side VRP; its suitability cannot be decided by their ratio alone.
Under a delta-hedging model, positive dealer gamma is associated with buying declines and selling rallies; negative gamma reverses that hedge response. The endpoint's regime and gamma-flip levels are estimates based on its positioning assumptions. They do not identify all dealer trades or guarantee that prices will mean-revert or trend.
The regime object includes gamma regime, gamma flip and net GEX. The vanna_conditioned object adds a vanna outlook. These are potential explanatory inputs for a strategy test. A high VRP z-score together with positive gamma is not, by itself, a validated selling window.
# Continue from the response above: display context, not orders.
regime = data["regime"]
print(f"Gamma regime: {regime['gamma']}")
print(f"Gamma flip: {regime['gamma_flip']}")
print(f"Net GEX: {regime['net_gex']}")
vanna_outlook = (data.get("vanna_conditioned") or {}).get("outlook")
print(f"Vanna outlook: {vanna_outlook}")
Testing a Regime Filter
Specify the regime timestamp, the proposed entry or exit rule, turnover and costs before testing. A gamma-flip crossing is a candidate event to evaluate, not an instruction to close a fixed fraction of a portfolio. Vanna and charm describe sensitivities; their realized flow impact depends on inventory, hedging and market conditions.
See the VRP API documentation for field definitions and the formula guide for the boundary between a measured spread and a tested signal.
Strategy Suitability Scores
A positive spread and a dealer-regime estimate do not answer whether to sell premium. A short strangle and an iron condor also have different payoff and margin profiles, which a single spread cannot capture.
The VRP endpoint returns strategy suitability scores (0-100) for four common structures, computed from the current VRP level, directional skew, GEX regime, realized vol, and term structure. These scores are not backtested performance predictions - they're suitability assessments based on current market conditions.
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/vrp/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
scores = data["strategy_scores"]
print("=== Strategy Suitability Scores (0-100) ===")
for strategy, score in sorted(scores.items(), key=lambda x: -x[1]):
bar = "#" * (score // 5)
print(f"{strategy:20s} {score:3d} {bar}")
What Each Score Means
Strategy
Inputs considered
Score Drivers
Short strangle
VRP is moderate-to-high, regime is positive gamma
Heuristic assessment of these inputs; no score cutoff is a validated entry rule.
Iron condor
VRP is moderate, you need defined risk, skew is symmetric
Favored when VRP is positive but not extreme, and when put/call VRP are similar. The defined-risk payoff still requires instrument-level evaluation.
Put credit spread
Put VRP >> call VRP, put skew is steep
Scores highest when the directional VRP is heavily skewed to puts. The score describes the input configuration, not the expected profit.
Calendar spread
VRP term structure is steep (front-month richest)
Scores highest when front-month IV is significantly elevated relative to back-month - it compares different expiries, not equivalent contracts or expected returns.
Using Scores in Practice
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/vrp/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
scores = data["strategy_scores"]
vrp = data["vrp"]["vrp_20d"]
z = data["vrp"]["z_score"]
regime = data["regime"]["gamma"]
# Find the highest-scoring strategy
best = max(scores, key=scores.get)
best_score = scores[best]
print(f"VRP: {vrp:+.2f} vol points | Z: {z:+.2f} | Regime: {regime}")
print(f"Best strategy: {best} (score: {best_score})")
print("Highest heuristic score is not a return forecast or sizing instruction.")
A score of 82 is not an 82% win probability. Comparing a put spread score of 82 with an iron condor score of 41 can organize research, but it does not establish which trade has greater expected profit. Validate any score-based strategy against its actual instruments and costs.
Try the VRP endpoint in your browser
The Playground lets you call the VRP endpoint with your API key and see the full response - spreads, z-score, directional VRP, strategy scores, and dealer context.
The dealer_flow_risk field is a 0–100 model score. It summarizes estimated dealer-positioning conditions; it is not a calibrated loss probability, a tail-width estimate or a position-size multiplier. Negative-gamma hedge feedback is a possible source of risk, but the field does not quantify how far the underlying will move.
The example below records potential research inputs. It does not issue orders, select an entry or calculate a position size. Keep measurements separate from forecasts and from any rule later tested on those forecasts.
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://lab.flashalpha.com"
for symbol in ["SPY", "QQQ", "IWM", "AAPL", "TSLA"]:
response = requests.get(
f"{BASE}/v1/vrp/{symbol}",
headers={"X-Api-Key": API_KEY},
timeout=30,
)
response.raise_for_status()
data = response.json()
observation = {
"symbol": symbol,
"trailing_spread_vol_points": data["vrp"]["vrp_20d"],
"z_score": data["vrp"]["z_score"],
"percentile": data["vrp"]["percentile"],
"gamma_regime": data["regime"]["gamma"],
"dealer_flow_risk_score": data["dealer_flow_risk"],
"strategy_scores": data["strategy_scores"],
}
print(observation) # Research inputs; no validated size or trade signal.
VRP History for Backtesting
The /v1/vrp/{symbol}/history endpoint returns a daily time series (up to 365 days) with per-day VRP spreads, realized vol windows, ATM IV, and straddle prices. Call it once to pull the full lookback needed for regime analysis or backtesting. If you want to archive snapshots incrementally, a nightly cron job against the live endpoint works too - both approaches give you the same history.
Risk Controls Need Their Own Design
A spread or z-score cannot set a universal portfolio allocation, stop-loss multiple or event-day size. Define loss budgets using the instrument's payoff, margin, liquidity and correlated exposures. Stress price gaps and IV changes jointly. Stops on undefined-risk positions do not cap losses when markets gap or execution is unavailable.
If a strategy uses dealer-regime exits, earnings exclusions or score-dependent sizing, document those rules and test them separately. Choosing thresholds after observing performance creates a selection problem; a descriptive VRP study does not validate them.
Common Interpretation Mistakes
1. Treating Negative Trailing VRP as a Forecast
A negative trailing spread says IV is below a historical RV estimate. It does not prove that the next month's RV will exceed IV or that selling options has negative expected value. Test any exclusion rule instead of assuming that the sign identifies profitable trades.
2. Treating Dealer Estimates as Observed Flows
Gamma regime and dealer-risk scores are model outputs. Their incremental predictive value and any resulting trade-size adjustment need evidence for the stated instruments and period.
3. Confusing RV Lookbacks With Option Tenors
vrp_5d and vrp_30d change the trailing RV lookback against the same atm_iv. Their difference is not a forward-IV term structure. Inspect term_vrp for tenor-specific comparisons and state whether the RV input is historical or forecast.
4. Treating a High Z-Score as a Risk Budget
A historical rank does not measure maximum loss. Volatility spikes, jumps and dependence across positions can dominate a short-option portfolio. A favorable reading does not justify larger exposure without a tested sizing rule and a separate risk budget.
5. Inferring Strategy Profit From Directional Spreads
A larger put-side volatility measure is not a multiple of the call-side cash premium. Evaluate each leg's quotes and payoff. Directional measurements alone cannot establish that a put spread dominates an iron condor.
Read the full VRP API documentation
Every field, every response object, every parameter - documented with examples. Understand exactly what the endpoint returns before you build on it.
IV rank locates IV within its historical high-low range; IV percentile ranks IV among historical observations. They are not interchangeable. A VRP z-score instead standardizes an IV-minus-RV spread. None of the three is a return forecast without a supporting test.
Earnings and Other Scheduled Events
Trailing RV excludes an event that has not happened yet, while option prices can include its expected jump risk. A large positive spread before earnings can therefore reflect a horizon or event mismatch. A post-earnings reading is not automatically a profitable opportunity either. Test event exclusions and any index-to-single-stock filter explicitly.
IV Can Rise Before Expiry
A short option can lose mark-to-market when IV rises even if subsequent RV finishes below entry IV. Stress price, IV, skew, liquidity and margin together. Neither a z-score band nor an absolute VIX level determines an appropriate size or establishes vega per dollar of option premium.
Dealer Levels Are Estimates
Strike-level GEX can describe concentrated option exposure under the model's inventory assumptions. It cannot guarantee a price floor, ceiling or pin. Any strike-selection rule or exit based on a gamma wall needs its own execution-aware test.
Realized-Volatility Estimators Measure Different Features
Close-to-close returns include overnight gaps but cannot separately resolve movement inside a session. Yang-Zhang combines overnight, open-to-close and intraday range components. Neither estimator is guaranteed to be higher in a given regime; statistical efficiency under assumptions is also different from forecasting accuracy.
FlashAlpha's main VRP fields use close-to-close log returns, sample standard deviation and annualization by √252. Range-based estimators are available on /v1/volatility/realized/{symbol}. State the estimator, window and information timestamp when comparing readings. See Yang-Zhang versus close-to-close for the calculations and the VRP measurement comparisons for their effect on the spread.
Persistent Trends Change the Payoff
Unhedged short straddles, strangles and directional spreads respond differently to a sustained trend. A high trailing spread does not neutralize delta, gamma or jump risk. Regime persistence, trend filters and exit triggers are candidate rule components; this guide does not validate a universal number of days or a gamma-flip condition for trading them.
Tooling - Endpoints and MCP Connector
The measurements discussed in this guide are available through four FlashAlpha endpoints:
Daily pre-trade assessment. Research inputs for a separately tested entry and sizing policy.
GET /v1/vrp/{symbol}/history
Daily time series (up to 365 days): per-day VRP spreads, RV windows, ATM IV, straddle price - populated nightly after market close
Backtesting, regime analysis, trend identification across VRP z-score history.
GET /v1/volatility/{symbol}
Realized vol windows, IV-RV spreads, skew profiles, term structure, ATM IV per tenor, GEX by DTE, theta decay, liquidity analysis
Strike selection, vega sizing, term structure comparison for calendar spreads.
GET /v1/exposure/gex/{symbol}
Gamma exposure by strike: call/put GEX, OI, volume, day-over-day OI changes, gamma flip, net GEX label
Strike selection around GEX walls, trade management near negative-GEX zones.
All four are available on the Alpha plan. Authenticate with an X-Api-Key header. Base URL: https://lab.flashalpha.com.
MCP Connector - Premium Seller Persona for AI Workflows
If you're building with an AI assistant or running automated analysis, FlashAlpha exposes an MCP (Model Context Protocol) connector scoped to the premium-seller toolset. This gives any MCP-compatible AI agent - Claude, Cursor, VS Code Copilot, or a custom agent - direct access to live VRP data, volatility surface data, and historical context through natural language.
API Key:https://lab.flashalpha.com/mcp/premium (send X-Api-Key header)
The OAuth endpoint is the standard path for customer-facing integrations. Use the API Key path for server-side scripts and automation where you control the credential.
With the MCP connector loaded, you can ask an AI assistant questions like "Show SPY IV, trailing RV and their information timestamps," or "Compare VRP z-scores across SPY, QQQ, and IWM," or "Pull SPY VRP history for the last 30 days and flag any regime changes." The AI calls the FlashAlpha endpoints live, interprets the response, and summarizes the current measurements without you needing to write a single line of code.
This is particularly useful for the signal-to-execution workflow - the MCP connector can retrieve VRP spread, z-score, regime and strategy scores for a watchlist. Interpreting them as entry or sizing filters still requires a tested policy.
Need MCP access or a plan upgrade?
The MCP premium-seller connector and the VRP endpoints require the Alpha plan. One call returns VRP spreads, regime, strategy scores, and historical context - no pipeline needed.
Daily history - pull up to 365 days of per-day VRP spreads, realized vol, ATM IV, and straddle prices via /v1/vrp/{symbol}/history; or archive incrementally with a nightly cron against the live endpoint
Use it every day. Rich premium still leaves the question of which days to sell. sell-window says sell or skip each session on SPY, QQQ and IWM, so you can stay out on the rough days that drive drawdowns, and suggests positions on sell days. See the backtest or read the docs.
Frequently Asked Questions
What is the volatility risk premium?
The forward volatility premium is implied volatility minus realized volatility over the subsequent matching horizon. A dashboard usually shows a trailing IV-minus-RV comparison instead. Neither difference is an option-strategy return.
How do you trade VRP?
Measure and timestamp the inputs, specify a forecast and a trading rule, then evaluate that rule with actual instruments, costs, margin and risk controls. A positive trailing spread or a high z-score does not by itself validate an entry or position size.
Is selling options profitable long-term?
Profitability depends on the instrument, strategy rules, sample, hedging, execution costs and capital used. A descriptive IV-minus-RV study cannot establish a universal Sharpe ratio or validate the illustrative filters in this guide. Assess a separately specified trading backtest.
What is a VRP z-score?
A VRP z-score measures the trailing spread relative to its historical mean and standard deviation. The endpoint uses up to 252 trailing days of history. A z-score is not a profit forecast, a probability or a position-sizing rule; inspect the separately returned empirical percentile.
How does dealer positioning affect VRP trading?
Under a delta-hedging model, positive dealer gamma implies hedging against price moves, while negative gamma implies hedging with them. The endpoint provides estimated positioning context, not observed future flows or a guaranteed return. Any regime-based entry, exit or sizing rule needs its own test.
VRP data can make a strategy's inputs explicit: the implied measure, the trailing or forward RV window, their units and the information available at the decision time. Z-scores, directional measures and dealer estimates add context, but none establishes profit or an appropriate position size on its own.
Keep the progression visible: measurement, forecast, tested rule, implemented return. Use the formula and evidence guide to verify the measurement, and evaluate any trading rule with its own sample, costs, margin and risk controls.