STRASMORE/EXPLORE 2,882 QUERIES

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-10-01, from put-credit-spread-win-rate-and-breakeven.

as of ranking 3×3read in context →
outcomes — 3 rows by 3 columns, computed from US exchange, SIP and OPRA data.
outcome_bucketentry_countshare_pct
maximaler Verlust12210.6
teilweise im Geld867.4
voll aus dem Geld94782
Rows × columns
3 × 3
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 outcomes, derived from the stored result.
ColumnTypeRangeNotes
outcome_bucket text 3 distinct values
entry_count number 86 to 947 count
share_pct number 7.4 to 82 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
expiries AS
(
    SELECT
        date                                              AS entry_date,
        argMin(expiration_date, abs(days_to_expiry - 45)) AS expiry
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND lower(option_type) IN ('put', 'p')
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 38 AND 52
      AND date >= '2021-08-01'
    GROUP BY date
),
short_leg AS
(
    SELECT
        e.entry_date                                                AS entry_date,
        e.expiry                                                    AS expiry,
        argMin(toFloat64(g.strike_price), abs(abs(g.delta) - 0.30)) AS short_strike,
        argMin(toFloat64(g.option_close), abs(abs(g.delta) - 0.30)) AS short_mark
    FROM global_markets.options_greeks AS g
    INNER JOIN expiries AS e
        ON g.date = e.entry_date AND g.expiration_date = e.expiry
    WHERE g.underlying_symbol = 'SPY'
      AND lower(g.option_type) IN ('put', 'p')
      AND g.iv_converged = 1
      AND g.volume > 0
      AND g.date >= '2021-08-01'
      AND abs(g.delta) BETWEEN 0.20 AND 0.40
    GROUP BY e.entry_date, e.expiry
),
long_leg AS
(
    SELECT
        s.entry_date                                                                             AS entry_date,
        argMin(toFloat64(g.strike_price), abs(toFloat64(g.strike_price) - (s.short_strike - 10))) AS long_strike,
        argMin(toFloat64(g.option_close), abs(toFloat64(g.strike_price) - (s.short_strike - 10))) AS long_mark
    FROM global_markets.options_greeks AS g
    INNER JOIN short_leg AS s
        ON g.date = s.entry_date AND g.expiration_date = s.expiry
    WHERE g.underlying_symbol = 'SPY'
      AND lower(g.option_type) IN ('put', 'p')
      AND g.iv_converged = 1
      AND g.date >= '2021-08-01'
      AND toFloat64(g.strike_price) BETWEEN s.short_strike - 12 AND s.short_strike - 8
    GROUP BY s.entry_date
),
settled AS
(
    SELECT
        s.short_strike                 AS short_strike,
        l.long_strike                  AS long_strike,
        s.short_strike - l.long_strike AS width,
        s.short_mark - l.long_mark     AS credit,
        toFloat64(d.close)             AS settle_close
    FROM short_leg AS s
    INNER JOIN long_leg AS l ON s.entry_date = l.entry_date
    INNER JOIN
    (
        SELECT date, close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= '2021-08-01'
    ) AS d ON d.date = s.expiry
    WHERE l.long_strike < s.short_strike
      AND s.short_mark > l.long_mark
      AND s.short_strike - l.long_strike BETWEEN 9 AND 11
),
totals AS
(
    SELECT count() AS all_entries FROM settled
)
SELECT
    multiIf(settle_close >= short_strike, 'voll aus dem Geld',
            settle_close <= long_strike,  'maximaler Verlust',
                                          'teilweise im Geld') AS outcome_bucket,
    count()                                                     AS entry_count,
    round(100 * count() / any(t.all_entries), 1)                AS share_pct
FROM settled AS s
CROSS JOIN totals AS t
GROUP BY outcome_bucket
ORDER BY outcome_bucket
⌘/Ctrl + Enter

Arbeiten Sie mit diesen Daten in Ihrem KI-Assistenten

Öffnet sich abfragebereit, mit den Daten dieser Seite. Kostenlos, ohne Konto.