STRASMORE/EXPLORE 2,595 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-25, from leaps-vs-margin-loan-financing-cost.

as of table 4×9read in context →
parity_ladder — 4 rows by 9 columns, computed from US exchange, SIP and OPRA data.
strikestock_pricecall_priceput_pricenet_debitamount_financedterm_labelexpiry_labelpriced_on
$250336.86107.57.5199.99236.87450 calendar daysDec 2027Sep 23, 2026
$300336.8671.9618.4853.48283.38450 calendar daysDec 2027Sep 23, 2026
$310336.8666.2721.544.77292.09450 calendar daysDec 2027Sep 23, 2026
$320336.866026.4533.55303.31450 calendar daysDec 2027Sep 23, 2026
Rows × columns
4 × 9
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
strike text 4 distinct values ($250, $300, $310…)
stock_price number every row is 336.86 US dollars
call_price number 60 to 107.5 US dollars
put_price number 7.51 to 26.45 US dollars
net_debit number 33.55 to 99.99
amount_financed number 236.87 to 303.31
term_label text 1 distinct value (450 calendar days)
expiry_label text 1 distinct value (Dec 2027)
priced_on text 1 distinct value (Sep 23, 2026)

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('$', toString(toUInt32(strike_price)))                          AS strike,
    round(avg(toFloat64(underlying_close)), 2)                             AS stock_price,
    round(avgIf(toFloat64(option_close), leg = 'call'), 2)                 AS call_price,
    round(avgIf(toFloat64(option_close), leg = 'put'), 2)                  AS put_price,
    round(avgIf(toFloat64(option_close), leg = 'call')
        - avgIf(toFloat64(option_close), leg = 'put'), 2)                  AS net_debit,
    round(avg(toFloat64(underlying_close))
        - avgIf(toFloat64(option_close), leg = 'call')
        + avgIf(toFloat64(option_close), leg = 'put'), 2)                  AS amount_financed,
    concat(toString(max(days_to_expiry)), ' calendar days')                AS term_label,
    formatDateTime(max(expiration_date), '%b %Y')                          AS expiry_label,
    formatDateTime(max(date), '%b %e, %Y')                                 AS priced_on
FROM
(
    SELECT
        strike_price,
        underlying_close,
        option_close,
        days_to_expiry,
        expiration_date,
        date,
        if(lower(toString(option_type)) LIKE 'c%', 'call', 'put') AS leg
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date = (
            SELECT max(date)
            FROM global_markets.options_greeks
            WHERE underlying_symbol = 'AAPL'
      )
      AND expiration_date = (
            SELECT expiration_date
            FROM global_markets.options_greeks
            WHERE underlying_symbol = 'AAPL'
              AND date = (
                    SELECT max(date)
                    FROM global_markets.options_greeks
                    WHERE underlying_symbol = 'AAPL'
              )
              AND days_to_expiry >= 200
              AND toDayOfWeek(expiration_date) = 5
            GROUP BY expiration_date
            ORDER BY abs(toInt32(max(days_to_expiry)) - 450) ASC
            LIMIT 1
      )
      AND toFloat64(option_close) > 0
      AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 0.50 AND 0.95
      AND modulo(toUInt32(strike_price), 10) = 0
)
GROUP BY strike_price
HAVING countIf(leg = 'call') > 0
   AND countIf(leg = 'put') > 0
ORDER BY strike_price
LIMIT 12
⌘/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 analysisleaps-vs-margin-loan-financing-cost
implied_financing_rate table 4×5 → rate_by_expiry ranking 9×4 → dividends_forgone series 4×3 → 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,595 queries →