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-18, from how-much-money-do-you-need-to-trade-options.
| spread | max_loss_usd | max_profit_usd |
|---|---|---|
| 210/215 | 227 | 273 |
| 212.5/217.5 | 190 | 310 |
| 215/220 | 152 | 348 |
| 217.5/222.5 | 135 | 365 |
| 220/225 | 110 | 390 |
| 222.5/227.5 | 79 | 421 |
| 225/230 | 57 | 443 |
| 227.5/232.5 | 42 | 458 |
- Rows × columns
- 8 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
spread |
text | 8 distinct values (210/215, 212.5/217.5, 215/220…) | |
max_loss_usd |
number | 42 to 227 | US dollars |
max_profit_usd |
number | 273 to 458 | US dollars |
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
concat(toString(a.strike), '/', toString(b.strike)) AS spread,
toUInt32(round((a.px - b.px) * 100)) AS max_loss_usd,
toUInt32(round((5 - (a.px - b.px)) * 100)) AS max_profit_usd
FROM
(
SELECT
toFloat64(strike_price) AS strike,
toInt32(round(toFloat64(strike_price) * 100) + 500) AS k_plus_5,
toFloat64(max(option_close)) AS px,
toFloat64(max(underlying_close)) AS spot
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND toDate(date) = '2025-05-19'
AND toDate(expiration_date) = '2025-06-20'
AND lower(toString(option_type)) IN ('c', 'call')
AND iv_converged = 1
AND volume > 0
GROUP BY strike_price
) AS a
INNER JOIN
(
SELECT
toFloat64(strike_price) AS strike,
toInt32(round(toFloat64(strike_price) * 100)) AS k,
toFloat64(max(option_close)) AS px
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND toDate(date) = '2025-05-19'
AND toDate(expiration_date) = '2025-06-20'
AND lower(toString(option_type)) IN ('c', 'call')
AND iv_converged = 1
AND volume > 0
GROUP BY strike_price
) AS b ON a.k_plus_5 = b.k
WHERE a.strike >= a.spot
AND a.px > b.px
AND a.px - b.px < 5
ORDER BY a.strike
LIMIT 8
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-much-money-do-you-need-to-trade-options
put_trace
series 31×5
→
put_ladder
table 8×5
→
call_ladder
table 8×5
→
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
→
SPY options median spread by expiration date, near-the-money strikes only
ranking 25×4
→
See all 2,358 queries →