STRASMORE/EXPLORE 2,309 QUERIES

margin_spread_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-17, from how-to-get-approved-for-options-trading.

as of table 9×9read in context →
margin_spread_ladder — 9 rows by 9 columns, computed from US exchange, SIP and OPRA data.
short_strikelong_strikeshort_put_pricelong_put_pricenet_credit_dollarsmargin_requirement_dollarscredit_pct_of_requirementcash_vs_margin_ratiospy_close
74073512.3710.617732354.8229.1742.45
73573010.68.9616433648.8218.8742.45
7307258.967.7112537533.3194.7742.45
7257207.716.5811338729.2187.3742.45
7207156.585.728641420.8173.9742.45
7157105.724.878541520.5172.3742.45
7107054.874.196843215.7164.4742.45
7057004.193.596044013.6160.2742.45
7006953.593.18414598.9152.5742.45
Rows × columns
9 × 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 margin_spread_ladder, derived from the stored result.
ColumnTypeRangeNotes
short_strike number 700 to 740 US dollars
long_strike number 695 to 735 US dollars
short_put_price number 3.59 to 12.37 US dollars
long_put_price number 3.18 to 10.6 US dollars
net_credit_dollars number 41 to 177
margin_requirement_dollars number 323 to 459
credit_pct_of_requirement number 8.9 to 54.8 percent
cash_vs_margin_ratio number 152.5 to 229.1 ratio or rate
spy_close text 1 distinct value (742.45)

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
    s.strike                                                          AS short_strike,
    l.strike                                                          AS long_strike,
    s.put_price                                                       AS short_put_price,
    l.put_price                                                       AS long_put_price,
    toInt32(round((s.put_price - l.put_price) * 100))                 AS net_credit_dollars,
    toInt32(round((s.strike - l.strike) * 100)) - net_credit_dollars  AS margin_requirement_dollars,
    round(net_credit_dollars / margin_requirement_dollars * 100, 1)   AS credit_pct_of_requirement,
    round(s.strike * 100 / margin_requirement_dollars, 1)             AS cash_vs_margin_ratio,
    s.spy_close                                                       AS spy_close
FROM
(
    SELECT
        toInt32(round(toFloat64(strike_price)))               AS strike,
        strike - 5                                            AS long_strike,
        round(any(toFloat64(option_close)), 2)                AS put_price,
        toString(round(any(toFloat64(underlying_close)), 2))  AS spy_close
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND toDate(date) = toDate('2026-06-12')
      AND toDate(expiration_date) = toDate('2026-07-17')
      AND lower(toString(option_type)) LIKE 'p%'
      AND iv_converged = 1
      AND volume > 0
      AND toFloat64(underlying_close) > 0
      AND toFloat64(strike_price) < toFloat64(underlying_close)
      AND toFloat64(strike_price) >= toFloat64(underlying_close) * 0.94
      AND toInt32(round(toFloat64(strike_price))) % 5 = 0
      AND abs(toFloat64(strike_price) - round(toFloat64(strike_price))) < 0.001
    GROUP BY strike_price
) AS s
INNER JOIN
(
    SELECT
        toInt32(round(toFloat64(strike_price)))               AS strike,
        round(any(toFloat64(option_close)), 2)                AS put_price
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND toDate(date) = toDate('2026-06-12')
      AND toDate(expiration_date) = toDate('2026-07-17')
      AND lower(toString(option_type)) LIKE 'p%'
      AND iv_converged = 1
      AND volume > 0
      AND toFloat64(underlying_close) > 0
      AND toFloat64(strike_price) < toFloat64(underlying_close)
      AND toFloat64(strike_price) >= toFloat64(underlying_close) * 0.90
      AND toInt32(round(toFloat64(strike_price))) % 5 = 0
      AND abs(toFloat64(strike_price) - round(toFloat64(strike_price))) < 0.001
    GROUP BY strike_price
) AS l ON l.strike = s.long_strike
ORDER BY short_strike DESC

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 analysishow-to-get-approved-for-options-trading
cash_account_ladder table 9×5 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 SPY at one-minute resolution, 2:00–3:30 pm ET on May 6, 2010 table 90×4 Executed volume by price level: the traded ladder (KO, 30 minutes) table 63×3 See all 2,309 queries →