fifteen_year_windows
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-09-30, from warren-buffett-index-put-trade.
| outcome_bucket | window_count | lowest_multiple | highest_multiple |
|---|---|---|---|
| 2x to 3x the strike | 41 | 2.19 | 2.98 |
| 3x to 4x the strike | 20 | 3 | 3.69 |
| 4x to 5x the strike | 4 | 4.32 | 4.9 |
| 5x or more | 32 | 5.07 | 6.87 |
- Rows × columns
- 4 × 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 |
|---|---|---|---|
outcome_bucket |
text | 4 distinct values | |
window_count |
number | 4 to 41 | count |
lowest_multiple |
number | 2.19 to 5.07 | |
highest_multiple |
number | 2.98 to 6.87 |
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 monthly AS
(
SELECT
toStartOfMonth(date) AS month_start,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2003-01-01'
GROUP BY month_start
),
windows AS
(
SELECT later.month_close / earlier.start_close AS multiple
FROM monthly AS later
INNER JOIN
(
SELECT
addYears(month_start, 15) AS month_start,
month_close AS start_close
FROM monthly
) AS earlier USING (month_start)
)
SELECT
multiIf(multiple < 1, 'below the strike',
multiple < 2, '1x to 2x the strike',
multiple < 3, '2x to 3x the strike',
multiple < 4, '3x to 4x the strike',
multiple < 5, '4x to 5x the strike',
'5x or more') AS outcome_bucket,
count() AS window_count,
round(min(multiple), 2) AS lowest_multiple,
round(max(multiple), 2) AS highest_multiple
FROM windows
GROUP BY outcome_bucket
ORDER BY lowest_multiple
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.