STRASMORE/EXPLORE 2,500 QUERIES

replay_outcomes

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-23, from covered-call-screener-from-the-free-sql-api.

as of series 11×5read in context →
replay_outcomes — 11 rows by 5 columns, computed from US exchange, SIP and OPRA data.
monthcalls_screenedavg_annual_yield_pctitm_rate_all_pctitm_rate_richest_pct
2025-093412.552.942.9
2025-102817.942.983.3
2025-112718.43.70
2025-1230151016.7
2026-012715.314.820
2026-02182000
2026-033515.85.714.3
2026-045215.892.3100
2026-05381757.9100
2026-062917.83.40
2026-072220.840.90
Rows × columns
11 × 5
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 replay_outcomes, derived from the stored result.
ColumnTypeRangeNotes
month text 11 distinct values (2025-09, 2025-10, 2025-11…)
calls_screened number 18 to 52
avg_annual_yield_pct number 12.5 to 20.8 percent
itm_rate_all_pct number 0 to 92.3 percent
itm_rate_richest_pct number 0 to 100 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
    selection_days AS
    (
        SELECT min(date) AS session_date
        FROM global_markets.options_greeks
        WHERE date >= '2025-09-01' AND date < '2026-08-01'
        GROUP BY toStartOfMonth(date)
    ),
    picks AS
    (
        SELECT
            formatDateTime(date, '%Y-%m')      AS month,
            underlying_symbol                  AS symbol,
            expiration_date                    AS expiry,
            toFloat64(strike_price)            AS strike,
            toFloat64(option_close) / toFloat64(underlying_close)
                * 365.0 / days_to_expiry * 100 AS annual_yield_pct
        FROM global_markets.options_greeks
        WHERE date >= '2025-09-01'
          AND date <  '2026-08-01'
          AND date IN (SELECT session_date FROM selection_days)
          AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMD', 'KO', 'JNJ', 'XOM', 'SPY')
          AND iv_converged = 1
          AND volume >= 100
          AND days_to_expiry BETWEEN 20 AND 45
          AND delta BETWEEN 0.25 AND 0.35
          AND toFloat64(strike_price) / toFloat64(underlying_close) - 1 BETWEEN 0.02 AND 0.12
          AND option_close >= 0.30
          AND expiration_date <= '2026-09-19'
    ),
    rich_line AS
    (
        SELECT
            month,
            avg(annual_yield_pct) * 1.5 AS cutoff
        FROM picks
        GROUP BY month
    )
SELECT
    p.month                                                          AS month,
    count()                                                          AS calls_screened,
    round(avg(p.annual_yield_pct), 1)                                AS avg_annual_yield_pct,
    round(countIf(toFloat64(u.close) > p.strike) / count() * 100, 1) AS itm_rate_all_pct,
    round(countIf(toFloat64(u.close) > p.strike AND p.annual_yield_pct >= r.cutoff)
          / countIf(p.annual_yield_pct >= r.cutoff) * 100, 1)        AS itm_rate_richest_pct
FROM picks AS p
INNER JOIN
(
    SELECT ticker, date, close
    FROM global_markets.stocks_daily_aggs
    WHERE date >= '2025-09-15'
      AND date <= '2026-09-19'
      AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMD', 'KO', 'JNJ', 'XOM', 'SPY')
) AS u ON u.ticker = p.symbol AND u.date = p.expiry
INNER JOIN rich_line AS r ON r.month = p.month
GROUP BY p.month
HAVING countIf(p.annual_yield_pct >= r.cutoff) > 0
ORDER BY p.month
⌘/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 analysiscovered-call-screener-from-the-free-sql-api
screen_board table 12×8 premium_by_symbol ranking 8×4 delta_ladder table 6×5 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 3m10y and 2s10s spreads, monthly averages over twenty years series 241×4 See all 2,500 queries →