Realized Volatility API
Range-based realized (historical) volatility estimators - Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang, and close-to-close - over 10/20/30-day windows. Range estimators exploit the daily high/low/open/close and are 5-8x more statistically efficient than close-to-close.
Endpoint
X-Api-Key)
Rate Limited: Yes
Alpha plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | - | Underlying symbol (coverage limited to ramped symbols in the historical archive) |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/volatility/realized/AAPL"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/volatility/realized/AAPL",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"Yang-Zhang 20d: {data['estimators']['yang_zhang']['rv20']}")
const resp = await fetch(
"https://lab.flashalpha.com/v1/volatility/realized/AAPL",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log("Yang-Zhang 20d: " + data.estimators.yang_zhang.rv20);
Response
{
"symbol": "AAPL",
"as_of": "2026-06-08T15:30:00Z",
"underlying_price": 201.50,
"estimators": {
"close_to_close": { "rv10": 18.40, "rv20": 21.20, "rv30": 22.70 },
"parkinson": { "rv10": 17.10, "rv20": 19.80, "rv30": 20.40 },
"garman_klass": { "rv10": 16.90, "rv20": 19.50, "rv30": 20.10 },
"rogers_satchell": { "rv10": 17.30, "rv20": 20.10, "rv30": 20.60 },
"yang_zhang": { "rv10": 17.00, "rv20": 19.70, "rv30": 20.30 }
}
}
Key Response Fields
| Field | Description |
|---|---|
underlying_price | Most-recent daily close from the archive. |
estimators.*.rv10 / rv20 / rv30 | Annualized realized volatility (percent) over a 10/20/30-bar window, or null when the window has too few bars (see thresholds below). |
estimators.close_to_close | Sample variance of log-returns - the classic estimator, included as a baseline. |
estimators.parkinson | High-low range estimator. Tighter than close-to-close but ignores opening jumps. |
estimators.garman_klass | OHLC estimator using both the range and the open-close move. |
estimators.rogers_satchell | Drift-independent OHLC estimator (handles trending series). |
estimators.yang_zhang | Overnight + open-close + Rogers-Satchell combination - the most statistically efficient of the set. |
Methodology
Each estimator produces a daily variance over N bars in the window; every window value is then annualized as rv = 100 * sqrt(252 * variance). Price history comes from the historical replay archive (the same OHLC series exposed at GET /v1/stock/{symbol}/prices on historical.flashalpha.com), so coverage is limited to ramped symbols.
| Estimator | Daily variance (O,H,L,C per bar; ln = natural log) |
|---|---|
close_to_close | Sample variance of log-returns ln(Cᵢ/Cᵢ₋₁) (denominator N-1) |
parkinson | 1 / (4·N·ln(2)) · Σ ln(Hᵢ/Lᵢ)² |
garman_klass | 1/N · Σ [ 0.5·ln(Hᵢ/Lᵢ)² - (2·ln(2)-1)·ln(Cᵢ/Oᵢ)² ] |
rogers_satchell | 1/N · Σ [ ln(Hᵢ/Cᵢ)·ln(Hᵢ/Oᵢ) + ln(Lᵢ/Cᵢ)·ln(Lᵢ/Oᵢ) ] |
yang_zhang | σ²ₒ + k·σ²_c + (1-k)·σ²_RS, with k = 0.34 / (1.34 + (N+1)/(N-1)) |
For Yang-Zhang, σ²ₒ is the overnight-return variance (ln(Oᵢ/Cᵢ₋₁), mean-removed), σ²_c the open-to-close variance, and σ²_RS the Rogers-Satchell variance above.
History thresholds (null vs 404)
- Fewer than 11 daily bars available →
404 insufficient_history(11 = enough for the 10-bar window plus Yang-Zhang's prior-close seed). - 11+ bars but not enough for a longer window → the request succeeds (
200) and the unavailable window(s) arenull(e.g. 12 bars ⇒rv10populated,rv20/rv30null).
Errors
| Status | Description |
|---|---|
403 | tier_restricted - requires Alpha plan or higher. |
404 | insufficient_history - genuine no-coverage (symbol not in the archive) or fewer than 11 daily bars. |
429 | rate_limit_exceeded - the historical archive is rate limiting; retry shortly. |
502 | upstream_error - the historical archive rejected the forwarded request. |
503 | upstream_unavailable - the historical archive is down or unreachable. |
About
Range estimators use the full daily bar (open, high, low, close) instead of just the close, which makes them 5-8x more statistically efficient than close-to-close at the same sample size - you get a stable vol read from fewer days. Yang-Zhang is generally the best single number: it is drift-independent and handles overnight gaps, which matters for single names that move on after-hours news.
Pair realized vol with implied vol from /v1/volatility or the VRP dashboard to read the volatility risk premium, and with /v1/volatility/forecast to compare a backward-looking estimate against a conditional forecast.
Common Use Cases
- Get a fast, stable vol read - use
estimators.yang_zhang.rv10for a clean realized-vol number from a short window, where the range estimators are 5-8x more efficient than close-to-close - Compute the realized-vs-implied spread - difference
yang_zhang.rv20against ATM IV to read the VRP without waiting 30 sessions for close-to-close to settle - Isolate overnight-gap risk - compare
yang_zhangversusparkinson; a wide gap flags vol that is driven by after-hours moves rather than intraday range - Detect a vol regime shift - watch
rv10cross above or belowrv30on the same estimator to time a contraction or expansion in realized risk - Calibrate position sizing and stops - feed annualized
rv20into a vol-target or stop-distance rule so exposure scales with current realized risk - Stress-test a drifting name - prefer
rogers_satchellfor trending series, where its drift-independence avoids the upward bias of close-to-close - Feed a multi-lookback model - supply robust
rv10 / rv20 / rv30inputs across estimators to a forecasting or risk model
Related
Related reading
- Realized vs implied volatility & the risk premium - pair these estimators with implied vol to read the VRP
- Yang-Zhang vs close-to-close realized volatility - why the range estimators are more efficient than the classic baseline
Complementary endpoints
- VRP - the realized-vs-implied spread computed for you
- Volatility - implied vol and ATM IV to difference against realized
- Volatility Forecast - compare this backward-looking estimate against a conditional forecast
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.