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.
| outcome_bucket | entry_count | share_pct |
|---|---|---|
| maximaler Verlust | 122 | 10.6 |
| teilweise im Geld | 86 | 7.4 |
| voll aus dem Geld | 947 | 82 |
- Rows × columns
- 3 × 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 |
|---|---|---|---|
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
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.