STRASMORE/EXPLORE 2,830 QUERIES

parity_ladder

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-30, from buying-puts-vs-buying-calls.

as of ranking 6×4read in context →
parity_ladder — 6 rows by 4 columns, computed from US exchange, SIP and OPRA data.
tickerput_pct_of_spotcall_pct_of_spotput_minus_call_pct_of_spot
XOM3.6913.5060.185
KO2.342.503-0.162
SPY1.6011.891-0.291
NVDA4.6344.983-0.349
MSFT4.0254.39-0.366
AAPL2.993.431-0.441
Rows × columns
6 × 4
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for parity_ladder, derived from the stored result.
ColumnTypeRangeNotes
ticker text 6 distinct values (AAPL, KO, MSFT…)
put_pct_of_spot number 1.601 to 4.634 percent
call_pct_of_spot number 1.891 to 4.983 percent
put_minus_call_pct_of_spot number -0.441 to 0.185 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.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH
puts AS
(
    SELECT
        underlying_symbol,
        date,
        strike_price,
        expiration_date,
        toFloat64(option_close)                                     AS put_close,
        toFloat64(underlying_close)                                 AS spot
    FROM global_markets.options_greeks
    WHERE lower(option_type) LIKE 'p%'
      AND underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND date >= '2026-06-01'
      AND date <  '2026-09-01'
      AND volume > 0
      AND days_to_expiry BETWEEN 25 AND 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.005
),
calls AS
(
    SELECT
        underlying_symbol,
        date,
        strike_price,
        expiration_date,
        toFloat64(option_close)                                     AS call_close
    FROM global_markets.options_greeks
    WHERE lower(option_type) NOT LIKE 'p%'
      AND underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
      AND date >= '2026-06-01'
      AND date <  '2026-09-01'
      AND volume > 0
      AND days_to_expiry BETWEEN 25 AND 45
)
SELECT
    p.underlying_symbol                                             AS ticker,
    round(avg(p.put_close / p.spot) * 100, 3)                       AS put_pct_of_spot,
    round(avg(c.call_close / p.spot) * 100, 3)                      AS call_pct_of_spot,
    round(avg((p.put_close - c.call_close) / p.spot) * 100, 3)      AS put_minus_call_pct_of_spot
FROM puts AS p
INNER JOIN calls AS c
    ON  p.underlying_symbol = c.underlying_symbol
    AND p.date              = c.date
    AND p.strike_price      = c.strike_price
    AND p.expiration_date   = c.expiration_date
GROUP BY ticker
ORDER BY put_minus_call_pct_of_spot DESC
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisbuying-puts-vs-buying-calls
skew_curve ranking 6×4 → realised_vol_by_month ranking 4×3 → breakeven_by_dte ranking 4×4 → skew_persistence series 24×4 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → See all 2,830 queries →