STRASMORE/EXPLORE 2,882 QUERIES

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.

as of table 62×4read in context →
monthly_premium — 62 rows by 4 columns, computed from US exchange, SIP and OPRA data.
periodentry_countcredit_pct_of_widthbreakeven_distance_pct
08/20212214.83.17
09/20212016.63.48
10/20212017.73.43
11/20212116.23.28
12/20211817.33.92
01/20221918.23.87
02/20221919.34.77
03/20222120.85.05
04/20221819.44.04
05/20221923.95.32
06/20221823.94.9
07/20221722.94.59
08/20222021.23.96
09/20221923.84.59
10/20222123.54.95
11/20222023.84.27
12/20222023.63.91
01/20231921.33.48
02/20231719.83.5
03/20232122.83.6
04/20231918.52.9
05/20232017.62.94
06/20232016.92.14
07/20232016.42.02
08/20232118.32.6
09/20231717.42.2
10/20232019.42.89
11/20231918.42.23
12/20232017.82.07
01/20242117.71.9
02/20241818.22.01
03/202420192.02
04/20242120.12.3
05/20241819.41.98
06/20241918.81.93
07/20242117.81.84
08/20241918.42.36
09/20241918.42.77
10/20241918.72.78
11/20242018.12.18
12/20242116.42.1
01/20251419.32.44
02/20251718.32.56
03/20252120.53.36
04/20251821.94.47
05/202519203.21
06/20251819.22.85
07/20251817.92.47
08/20251817.32.34
09/20251917.82.41
10/20251918.62.57
11/20251718.63.03
12/20252018.32.46
01/20261617.12.39
02/202616193.03
03/20261821.33.79
04/20261819.32.96
05/20261819.82.8
06/20261919.92.68
07/20262018.82.53
08/20262019.82.45
09/20261918.72.36
Rows × columns
62 × 4
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 monthly_premium, derived from the stored result.
ColumnTypeRangeNotes
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)
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.