STRASMORE/EXPLORE 2,549 QUERIES

parity_check

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-24, from market-making-in-prediction-markets.

as of table 11×5read in context →
parity_check — 11 rows by 5 columns, computed from US exchange, SIP and OPRA data.
strike_vs_spotcall_deltaput_delta_absdelta_sumcontract_count
-5%0.8360.1761.0121391
-4%0.8080.2061.0142864
-3%0.7580.2541.0113087
-2%0.6990.3121.0113387
-1%0.6230.3821.0053510
+0%0.5370.4631.0013678
+1%0.4420.5520.9943282
+2%0.3430.6430.9862739
+3%0.2450.7250.972263
+4%0.1650.7930.9581919
+5%0.1150.8220.937817
Rows × columns
11 × 5
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_check, derived from the stored result.
ColumnTypeRangeNotes
strike_vs_spot text 11 distinct values (+0%, +1%, +2%…)
call_delta number 0.115 to 0.836
put_delta_abs number 0.176 to 0.822
delta_sum number 0.937 to 1.014
contract_count number 817 to 3,678 count

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.

SELECT
    concat(if(strike_pct >= 0, '+', ''), toString(strike_pct), '%') AS strike_vs_spot,
    round(avgIf(d, is_call), 3)                                     AS call_delta,
    round(-avgIf(d, NOT is_call), 3)                                AS put_delta_abs,
    round(avgIf(d, is_call) - avgIf(d, NOT is_call), 3)             AS delta_sum,
    count()                                                         AS contract_count
FROM
(
    SELECT
        toFloat64(delta)                    AS d,
        startsWith(lower(option_type), 'c') AS is_call,
        toInt32(round(100 * (toFloat64(strike_price) / toFloat64(underlying_close) - 1))) AS strike_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= '2026-04-01'
      AND date <= '2026-06-30'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry >= 20
      AND days_to_expiry <= 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.05
)
GROUP BY strike_pct
HAVING countIf(is_call) > 0 AND countIf(NOT is_call) > 0
ORDER BY strike_pct
⌘/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 analysismarket-making-in-prediction-markets
quote_cost_and_depth series 32×3 → outcome_polarization series 31×5 → near_expiry_risk ranking 6×4 → 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,549 queries →