worst_entries
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.
| label | premium_usd | result_usd |
|---|---|---|
| 18.02.2026 | 141 | -959 |
| 10.02.2025 | 189 | -911 |
| 30.08.2022 | 223 | -877 |
| 31.12.2021 | 140 | -860 |
| 20.02.2025 | 149 | -851 |
| 28.12.2021 | 150 | -850 |
| 27.12.2021 | 152 | -848 |
| 30.01.2026 | 152 | -848 |
| 03.01.2022 | 156 | -844 |
| 12.09.2023 | 156 | -844 |
| 07.04.2022 | 157 | -843 |
| 13.09.2023 | 157 | -843 |
- Rows × columns
- 12 × 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 |
|---|---|---|---|
label |
text | 12 distinct values (03.01.2022, 07.04.2022, 10.02.2025…) | |
premium_usd |
number | 140 to 223 | US dollars |
result_usd |
number | -959 to -843 | US dollars |
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.entry_date AS entry_date,
s.short_strike AS short_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
)
SELECT
formatDateTime(entry_date, '%d.%m.%Y') AS label,
round(100 * credit, 0) AS premium_usd,
round(100 * (credit - least(greatest(short_strike - settle_close, 0), width)), 0) AS result_usd
FROM settled
ORDER BY result_usd ASC, label ASC
LIMIT 12
Arbeiten Sie mit diesen Daten in Ihrem KI-Assistenten
Öffnet sich abfragebereit, mit den Daten dieser Seite. Kostenlos, ohne Konto.