monthly_premium
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.
| period | entry_count | credit_pct_of_width | breakeven_distance_pct |
|---|---|---|---|
| 08/2021 | 22 | 14.8 | 3.17 |
| 09/2021 | 20 | 16.6 | 3.48 |
| 10/2021 | 20 | 17.7 | 3.43 |
| 11/2021 | 21 | 16.2 | 3.28 |
| 12/2021 | 18 | 17.3 | 3.92 |
| 01/2022 | 19 | 18.2 | 3.87 |
| 02/2022 | 19 | 19.3 | 4.77 |
| 03/2022 | 21 | 20.8 | 5.05 |
| 04/2022 | 18 | 19.4 | 4.04 |
| 05/2022 | 19 | 23.9 | 5.32 |
| 06/2022 | 18 | 23.9 | 4.9 |
| 07/2022 | 17 | 22.9 | 4.59 |
| 08/2022 | 20 | 21.2 | 3.96 |
| 09/2022 | 19 | 23.8 | 4.59 |
| 10/2022 | 21 | 23.5 | 4.95 |
| 11/2022 | 20 | 23.8 | 4.27 |
| 12/2022 | 20 | 23.6 | 3.91 |
| 01/2023 | 19 | 21.3 | 3.48 |
| 02/2023 | 17 | 19.8 | 3.5 |
| 03/2023 | 21 | 22.8 | 3.6 |
| 04/2023 | 19 | 18.5 | 2.9 |
| 05/2023 | 20 | 17.6 | 2.94 |
| 06/2023 | 20 | 16.9 | 2.14 |
| 07/2023 | 20 | 16.4 | 2.02 |
| 08/2023 | 21 | 18.3 | 2.6 |
| 09/2023 | 17 | 17.4 | 2.2 |
| 10/2023 | 20 | 19.4 | 2.89 |
| 11/2023 | 19 | 18.4 | 2.23 |
| 12/2023 | 20 | 17.8 | 2.07 |
| 01/2024 | 21 | 17.7 | 1.9 |
| 02/2024 | 18 | 18.2 | 2.01 |
| 03/2024 | 20 | 19 | 2.02 |
| 04/2024 | 21 | 20.1 | 2.3 |
| 05/2024 | 18 | 19.4 | 1.98 |
| 06/2024 | 19 | 18.8 | 1.93 |
| 07/2024 | 21 | 17.8 | 1.84 |
| 08/2024 | 19 | 18.4 | 2.36 |
| 09/2024 | 19 | 18.4 | 2.77 |
| 10/2024 | 19 | 18.7 | 2.78 |
| 11/2024 | 20 | 18.1 | 2.18 |
| 12/2024 | 21 | 16.4 | 2.1 |
| 01/2025 | 14 | 19.3 | 2.44 |
| 02/2025 | 17 | 18.3 | 2.56 |
| 03/2025 | 21 | 20.5 | 3.36 |
| 04/2025 | 18 | 21.9 | 4.47 |
| 05/2025 | 19 | 20 | 3.21 |
| 06/2025 | 18 | 19.2 | 2.85 |
| 07/2025 | 18 | 17.9 | 2.47 |
| 08/2025 | 18 | 17.3 | 2.34 |
| 09/2025 | 19 | 17.8 | 2.41 |
| 10/2025 | 19 | 18.6 | 2.57 |
| 11/2025 | 17 | 18.6 | 3.03 |
| 12/2025 | 20 | 18.3 | 2.46 |
| 01/2026 | 16 | 17.1 | 2.39 |
| 02/2026 | 16 | 19 | 3.03 |
| 03/2026 | 18 | 21.3 | 3.79 |
| 04/2026 | 18 | 19.3 | 2.96 |
| 05/2026 | 18 | 19.8 | 2.8 |
| 06/2026 | 19 | 19.9 | 2.68 |
| 07/2026 | 20 | 18.8 | 2.53 |
| 08/2026 | 20 | 19.8 | 2.45 |
| 09/2026 | 19 | 18.7 | 2.36 |
- Rows × columns
- 62 × 4
- 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 |
|---|---|---|---|
period |
text | 62 distinct values (01/2022, 01/2023, 01/2024…) | |
entry_count |
number | 14 to 22 | count |
credit_pct_of_width |
number | 14.8 to 23.9 | percent |
breakeven_distance_pct |
number | 1.84 to 5.32 | 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,
argMin(toFloat64(g.underlying_close), abs(abs(g.delta) - 0.30)) AS spot
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
),
spreads AS
(
SELECT
s.entry_date AS entry_date,
s.spot AS spot,
s.short_strike AS short_strike,
s.short_strike - l.long_strike AS width,
s.short_mark - l.long_mark AS credit
FROM short_leg AS s
INNER JOIN long_leg AS l ON s.entry_date = l.entry_date
WHERE l.long_strike < s.short_strike
)
SELECT
formatDateTime(toStartOfMonth(entry_date), '%m/%Y') AS period,
count() AS entry_count,
round(quantileDeterministic(0.5)(100 * credit / width, toUInt32(toUnixTimestamp(entry_date))), 1) AS credit_pct_of_width,
round(quantileDeterministic(0.5)(100 * (spot - (short_strike - credit)) / spot, toUInt32(toUnixTimestamp(entry_date))), 2) AS breakeven_distance_pct
FROM spreads
WHERE credit > 0
AND width BETWEEN 9 AND 11
GROUP BY toStartOfMonth(entry_date)
ORDER BY toStartOfMonth(entry_date)
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.