desk_rr
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-19, from what-is-a-risk-reversal.
| symbol | priced_on | expiry | put_25d_iv_pct | call_25d_iv_pct | risk_reversal_pct |
|---|---|---|---|---|---|
| SPY | September 17, 2026 | October 16, 2026 | 15.31 | 10.32 | 4.99 |
| AAPL | September 17, 2026 | October 16, 2026 | 24.06 | 23.39 | 0.67 |
| TSLA | September 17, 2026 | October 16, 2026 | 40.92 | 42.12 | -1.2 |
- Rows × columns
- 3 × 6
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
symbol |
text | 3 distinct values (AAPL, SPY, TSLA) | |
priced_on |
text | 1 distinct value (September 17, 2026) | |
expiry |
text | 1 distinct value (October 16, 2026) | |
put_25d_iv_pct |
number | 15.31 to 40.92 | percent |
call_25d_iv_pct |
number | 10.32 to 42.12 | percent |
risk_reversal_pct |
number | -1.2 to 4.99 | percent |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
the exact SQL behind every number
SELECT
symbol,
priced_on,
expiry,
round(100 * put_iv_25d, 2) AS put_25d_iv_pct,
round(100 * call_iv_25d, 2) AS call_25d_iv_pct,
round(100 * (put_iv_25d - call_iv_25d), 2) AS risk_reversal_pct
FROM
(
SELECT
underlying_symbol AS symbol,
concat(monthName(any(date)), ' ', toString(toDayOfMonth(any(date))), ', ',
toString(toYear(any(date)))) AS priced_on,
concat(monthName(expiration_date), ' ', toString(toDayOfMonth(expiration_date)), ', ',
toString(toYear(expiration_date))) AS expiry,
any(days_to_expiry) AS dte,
maxIf(-delta, delta < 0 AND -delta <= 0.25) AS p_lo_d,
argMaxIf(implied_volatility, -delta, delta < 0 AND -delta <= 0.25) AS p_lo_iv,
minIf(-delta, delta < 0 AND -delta >= 0.25) AS p_hi_d,
argMinIf(implied_volatility, -delta, delta < 0 AND -delta >= 0.25) AS p_hi_iv,
maxIf(delta, delta > 0 AND delta <= 0.25) AS c_lo_d,
argMaxIf(implied_volatility, delta, delta > 0 AND delta <= 0.25) AS c_lo_iv,
minIf(delta, delta > 0 AND delta >= 0.25) AS c_hi_d,
argMinIf(implied_volatility, delta, delta > 0 AND delta >= 0.25) AS c_hi_iv,
if(p_hi_d = p_lo_d, p_lo_iv,
p_lo_iv + (p_hi_iv - p_lo_iv) * (0.25 - p_lo_d) / (p_hi_d - p_lo_d)) AS put_iv_25d,
if(c_hi_d = c_lo_d, c_lo_iv,
c_lo_iv + (c_hi_iv - c_lo_iv) * (0.25 - c_lo_d) / (c_hi_d - c_lo_d)) AS call_iv_25d
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'TSLA')
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= today() - 14
)
AND iv_converged = 1
AND volume > 0
AND abs(delta) BETWEEN 0.05 AND 0.5
GROUP BY underlying_symbol, expiration_date
HAVING countIf(delta < 0 AND -delta <= 0.25) > 0
AND countIf(delta < 0 AND -delta >= 0.25) > 0
AND countIf(delta > 0 AND delta <= 0.25) > 0
AND countIf(delta > 0 AND delta >= 0.25) > 0
AND dte BETWEEN 20 AND 45
ORDER BY symbol, abs(dte - 30)
LIMIT 1 BY symbol
)
ORDER BY indexOf(['SPY', 'AAPL', 'TSLA'], symbol)
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysiswhat-is-a-risk-reversal
chain
table 28×5
→
payoff
table 11×5
→
structure
table 3×6
→
The 2s10s spread, every print of the half
table 124×2
→
The 2s10s spread, every print of the half
table 124×2
→
Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s print
table 100×7
→
See all 2,401 queries →