STRASMORE/EXPLORE 2,749 QUERIES

persistence

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.

as of series 11×5read in context →
persistence — 11 rows by 5 columns, computed from US exchange, SIP and OPRA data.
weekweek_ofcandidatesstill_clearingsurvival_pct
2026-07-06Jul 61500
2026-07-13Jul 133200
2026-07-20Jul 202229
2026-07-27Jul 272400
2026-08-03Aug 314214
2026-08-10Aug 101400
2026-08-17Aug 1722627
2026-08-24Aug 2419421
2026-08-31Aug 311600
2026-09-07Sep 722314
2026-09-14Sep 1417953
Rows × columns
11 × 5
Period covered
to
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 persistence, derived from the stored result.
ColumnTypeRangeNotes
week date 2026-07-06 to 2026-09-14
week_of text 11 distinct values (Aug 10, Aug 17, Aug 24…)
candidates number 14 to 32
still_clearing number 0 to 9
survival_pct number 0 to 53 percent

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
    weeks AS
    (
        SELECT toMonday(date) AS wk, max(date) AS session
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date >= today() - 84
        GROUP BY wk
    ),
    legs AS
    (
        SELECT
            toMonday(g.date)                          AS wk,
            g.expiration_date                         AS expiration_date,
            toFloat64(g.strike_price)                 AS k,
            if(toFloat64(g.delta) < 0, 'put', 'call') AS side,
            max(g.days_to_expiry)                     AS dte,
            avg(toFloat64(g.option_close))            AS px,
            avg(toFloat64(g.delta))                   AS d
        FROM global_markets.options_greeks AS g
        INNER JOIN weeks AS w ON g.date = w.session
        WHERE g.underlying_symbol = 'SPY'
          AND g.date >= today() - 84
          AND g.iv_converged = 1
          AND g.volume > 0
          AND toFloat64(g.option_close) > 0
          AND toUInt32(round(toFloat64(g.strike_price) * 100)) % 500 = 0
        GROUP BY wk, expiration_date, k, side
    ),
    verticals AS
    (
        SELECT
            s.wk              AS wk,
            s.wk + 7          AS next_wk,
            s.expiration_date AS expiration_date,
            s.side            AS side,
            s.k               AS short_k,
            s.dte             AS dte,
            s.px - l.px       AS credit
        FROM legs AS s
        INNER JOIN legs AS l
            ON s.wk = l.wk AND s.expiration_date = l.expiration_date AND s.side = l.side
        WHERE ((s.side = 'put'  AND s.d BETWEEN -0.20 AND -0.12 AND abs(l.k - (s.k - 5)) < 0.01)
            OR (s.side = 'call' AND s.d BETWEEN  0.12 AND  0.20 AND abs(l.k - (s.k + 5)) < 0.01))
    ),
    condors AS
    (
        SELECT
            p.wk                                                                AS wk,
            p.next_wk                                                           AS next_wk,
            p.expiration_date                                                   AS expiration_date,
            p.short_k                                                           AS short_put,
            c.short_k                                                           AS short_call,
            p.dte                                                               AS dte,
            round(100 * (p.credit + c.credit) / (5 - (p.credit + c.credit)), 1) AS credit_pct
        FROM verticals AS p
        INNER JOIN verticals AS c
            ON p.wk = c.wk AND p.expiration_date = c.expiration_date
        WHERE p.side = 'put'
          AND c.side = 'call'
          AND p.credit + c.credit BETWEEN 0.05 AND 4.0
    )
SELECT
    toString(a.wk)                                        AS week,
    formatDateTime(a.wk, '%b %e')                         AS week_of,
    count()                                               AS candidates,
    countIf(b.credit_pct >= 20)                           AS still_clearing,
    round(100 * countIf(b.credit_pct >= 20) / count(), 0) AS survival_pct
FROM condors AS a
LEFT JOIN condors AS b
    ON a.next_wk = b.wk
   AND a.expiration_date = b.expiration_date
   AND a.short_put = b.short_put
   AND a.short_call = b.short_call
WHERE a.dte BETWEEN 25 AND 45
  AND a.credit_pct >= 20
  AND a.next_wk <= toMonday((
        SELECT max(date)
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
      ))
GROUP BY a.wk
ORDER BY a.wk
⌘/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 analysisiron-condor-screener-from-the-free-sql-api
chain table 16×5 → candidates table 8×7 → iv_rank ranking 6×4 → knobs ranking 5×4 → The 2s10s spread by month, full history series 604×5 → One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 → See all 2,749 queries →