knobs
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-28, from iron-condor-screener-from-the-free-sql-api.
| credit_floor | tight_band | wide_band | as_of |
|---|---|---|---|
| 10% | 8 | 28 | Sep 24, 2026 |
| 20% | 8 | 23 | Sep 24, 2026 |
| 30% | 5 | 18 | Sep 24, 2026 |
| 40% | 3 | 11 | Sep 24, 2026 |
| 50% | 1 | 6 | Sep 24, 2026 |
- Rows × columns
- 5 × 4
- 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 |
|---|---|---|---|
credit_floor |
text | 5 distinct values (10%, 20%, 30%…) | |
tight_band |
number | 1 to 8 | |
wide_band |
number | 6 to 28 | |
as_of |
text | 1 distinct value (Sep 24, 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.
WITH
(
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
) AS snapshot,
(
SELECT expiration_date
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = snapshot
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 25 AND 45
GROUP BY expiration_date
ORDER BY sum(volume) DESC
LIMIT 1
) AS target_expiry,
chain AS
(
SELECT
toFloat64(strike_price) AS k,
if(toFloat64(delta) < 0, 'put', 'call') AS side,
avg(toFloat64(option_close)) AS px,
avg(toFloat64(delta)) AS d
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = snapshot
AND expiration_date = target_expiry
AND iv_converged = 1
AND volume > 0
AND toFloat64(option_close) > 0
AND toUInt32(round(toFloat64(strike_price) * 100)) % 500 = 0
GROUP BY k, side
),
put_spreads AS
(
SELECT s.d AS short_delta, s.px - l.px AS credit
FROM chain AS s
CROSS JOIN chain AS l
WHERE s.side = 'put' AND l.side = 'put'
AND s.d BETWEEN -0.25 AND -0.10
AND abs(l.k - (s.k - 5)) < 0.01
),
call_spreads AS
(
SELECT s.d AS short_delta, s.px - l.px AS credit
FROM chain AS s
CROSS JOIN chain AS l
WHERE s.side = 'call' AND l.side = 'call'
AND s.d BETWEEN 0.10 AND 0.25
AND abs(l.k - (s.k + 5)) < 0.01
)
SELECT
concat(toString(f.min_ratio), '%') AS credit_floor,
countIf(cand.credit_pct >= f.min_ratio AND cand.tight = 1) AS tight_band,
countIf(cand.credit_pct >= f.min_ratio) AS wide_band,
formatDateTime(snapshot, '%b %e, %Y') AS as_of
FROM
(
SELECT
round(100 * (p.credit + c.credit) / (5 - (p.credit + c.credit)), 1) AS credit_pct,
if((abs(p.short_delta) BETWEEN 0.12 AND 0.20)
AND (c.short_delta BETWEEN 0.12 AND 0.20), 1, 0) AS tight
FROM put_spreads AS p
CROSS JOIN call_spreads AS c
WHERE p.credit + c.credit BETWEEN 0.05 AND 4.0
) AS cand
CROSS JOIN
(
SELECT arrayJoin([10, 20, 30, 40, 50]) AS min_ratio
) AS f
GROUP BY f.min_ratio
ORDER BY f.min_ratio
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.