Put-Call Parity Explained, With Real Numbers
Call and put implied volatility near the money across AAPL monthly expirations, June 16 2026series ·
2026-08-05 · 7×6
Call and put implied volatility at matched AAPL strikes, Sep 18 2026 expiryranking ·
2026-08-05 · 15×4
Call and put implied volatility near the money across AAPL monthly expirations, June 16 2026
Call and put implied volatility near the money across AAPL monthly expirations, June 16 2026
| expiry_date | days_out | atm_strike_used | call_iv_pct | put_iv_pct | iv_gap_pct |
|---|---|---|---|---|---|
| 2026-07-17 | 31 | $300 | 21.9 | 20.5 | 1.4 |
| 2026-08-21 | 66 | $300 | 25.1 | 24.3 | 0.8 |
| 2026-09-18 | 94 | $300 | 25.2 | 24.5 | 0.7 |
| 2026-10-16 | 122 | $300 | 25.2 | 24.3 | 0.9 |
| 2026-11-20 | 157 | $295 | 26.8 | 26.3 | 0.5 |
| 2026-12-18 | 185 | $300 | 26 | 26.2 | -0.2 |
| 2027-01-15 | 213 | $300 | 26.4 | 26.2 | 0.3 |
the exact SQL behind every number
SELECT
expiry_date,
days_out,
concat('$', toString(argMin(strike, atm_gap))) AS atm_strike_used,
round(100 * argMin(call_iv, atm_gap), 1) AS call_iv_pct,
round(100 * argMin(put_iv, atm_gap), 1) AS put_iv_pct,
round(100 * (argMin(call_iv, atm_gap) - argMin(put_iv, atm_gap)), 1) AS iv_gap_pct
FROM
(
SELECT
expiry_date,
days_out,
strike,
call_iv,
put_iv,
abs(strike / spot_close - 1) AS atm_gap
FROM
(
SELECT
toString(expiration_date) AS expiry_date,
max(dateDiff('day', toDate(date), toDate(expiration_date))) AS days_out,
round(toFloat64(strike_price), 2) AS strike,
maxIf(toFloat64(implied_volatility), leg = 'C') AS call_iv,
maxIf(toFloat64(implied_volatility), leg = 'P') AS put_iv,
max(toFloat64(underlying_close)) AS spot_close
FROM
(
SELECT
date,
expiration_date,
strike_price,
implied_volatility,
underlying_close,
upper(substring(ticker, length(ticker) - 8, 1)) AS leg
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = '2026-06-16'
AND expiration_date BETWEEN '2026-07-01' AND '2027-01-31'
AND toDayOfWeek(toDate(expiration_date)) = 5
AND toDayOfMonth(toDate(expiration_date)) BETWEEN 15 AND 21
AND iv_converged = 1
AND volume > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.03
)
GROUP BY expiry_date, strike
HAVING countIf(leg = 'C') > 0
AND countIf(leg = 'P') > 0
)
)
GROUP BY expiry_date, days_out
ORDER BY expiry_date
More from this analysisPut-Call Parity Explained, With Real Numbers
Call and put implied volatility at matched AAPL strikes, Sep 18 2026 expiry
ranking 15×4
→
Annualised cost of a hypothetical 10 cent fill error on a ten point box
ranking 12×2
→
Net delta of a SPY box as the upper strike widens (June 1, 2026)
ranking 9×4
→
A ten point box valued at every level SPY closed at in June 2026
table 8×5
→
See all 2,173 queries →