SPY realised volatility by month against a 10% target
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-08-22, from Volatility Targeting for Position Sizing.
| month | month_label | realised_vol_pct | target_vol_pct |
|---|---|---|---|
| 2020-08-01 | Aug 2020 | 8.3 | 10 |
| 2020-09-01 | Sep 2020 | 24.8 | 10 |
| 2020-10-01 | Oct 2020 | 20.5 | 10 |
| 2020-11-01 | Nov 2020 | 16.2 | 10 |
| 2020-12-01 | Dec 2020 | 9.1 | 10 |
| 2021-01-01 | Jan 2021 | 16.8 | 10 |
| 2021-02-01 | Feb 2021 | 14.4 | 10 |
| 2021-03-01 | Mar 2021 | 16.4 | 10 |
| 2021-04-01 | Apr 2021 | 10.5 | 10 |
| 2021-05-01 | May 2021 | 14.1 | 10 |
| 2021-06-01 | Jun 2021 | 9.3 | 10 |
| 2021-07-01 | Jul 2021 | 11.4 | 10 |
| 2021-08-01 | Aug 2021 | 8.3 | 10 |
| 2021-09-01 | Sep 2021 | 13.1 | 10 |
| 2021-10-01 | Oct 2021 | 10.9 | 10 |
| 2021-11-01 | Nov 2021 | 12.9 | 10 |
| 2021-12-01 | Dec 2021 | 17.2 | 10 |
| 2022-01-01 | Jan 2022 | 18.7 | 10 |
| 2022-02-01 | Feb 2022 | 22.5 | 10 |
| 2022-03-01 | Mar 2022 | 23.2 | 10 |
| 2022-04-01 | Apr 2022 | 25.1 | 10 |
| 2022-05-01 | May 2022 | 31.4 | 10 |
| 2022-06-01 | Jun 2022 | 29.7 | 10 |
| 2022-07-01 | Jul 2022 | 19.1 | 10 |
| 2022-08-01 | Aug 2022 | 19.4 | 10 |
| 2022-09-01 | Sep 2022 | 24.2 | 10 |
| 2022-10-01 | Oct 2022 | 27.8 | 10 |
| 2022-11-01 | Nov 2022 | 27.6 | 10 |
| 2022-12-01 | Dec 2022 | 18.4 | 10 |
| 2023-01-01 | Jan 2023 | 16.5 | 10 |
| 2023-02-01 | Feb 2023 | 15.6 | 10 |
| 2023-03-01 | Mar 2023 | 18.5 | 10 |
| 2023-04-01 | Apr 2023 | 12 | 10 |
| 2023-05-01 | May 2023 | 12.8 | 10 |
| 2023-06-01 | Jun 2023 | 10.8 | 10 |
| 2023-07-01 | Jul 2023 | 8 | 10 |
| 2023-08-01 | Aug 2023 | 12.3 | 10 |
| 2023-09-01 | Sep 2023 | 11.4 | 10 |
| 2023-10-01 | Oct 2023 | 14 | 10 |
| 2023-11-01 | Nov 2023 | 11.1 | 10 |
| 2023-12-01 | Dec 2023 | 9.8 | 10 |
| 2024-01-01 | Jan 2024 | 11.2 | 10 |
| 2024-02-01 | Feb 2024 | 12.1 | 10 |
| 2024-03-01 | Mar 2024 | 10.1 | 10 |
| 2024-04-01 | Apr 2024 | 13.2 | 10 |
| 2024-05-01 | May 2024 | 9.5 | 10 |
| 2024-06-01 | Jun 2024 | 6.7 | 10 |
| 2024-07-01 | Jul 2024 | 14.4 | 10 |
| 2024-08-01 | Aug 2024 | 19.2 | 10 |
| 2024-09-01 | Sep 2024 | 13.8 | 10 |
| 2024-10-01 | Oct 2024 | 11.2 | 10 |
| 2024-11-01 | Nov 2024 | 11.8 | 10 |
| 2024-12-01 | Dec 2024 | 14.1 | 10 |
| 2025-01-01 | Jan 2025 | 13.9 | 10 |
| 2025-02-01 | Feb 2025 | 13.2 | 10 |
| 2025-03-01 | Mar 2025 | 20.7 | 10 |
| 2025-04-01 | Apr 2025 | 51.9 | 10 |
| 2025-05-01 | May 2025 | 16.8 | 10 |
| 2025-06-01 | Jun 2025 | 10.2 | 10 |
| 2025-07-01 | Jul 2025 | 6.6 | 10 |
| 2025-08-01 | Aug 2025 | 12 | 10 |
| 2025-09-01 | Sep 2025 | 7.1 | 10 |
| 2025-10-01 | Oct 2025 | 13.8 | 10 |
| 2025-11-01 | Nov 2025 | 15.4 | 10 |
| 2025-12-01 | Dec 2025 | 8.4 | 10 |
| 2026-01-01 | Jan 2026 | 10.3 | 10 |
| 2026-02-01 | Feb 2026 | 13.4 | 10 |
| 2026-03-01 | Mar 2026 | 18.2 | 10 |
| 2026-04-01 | Apr 2026 | 11.6 | 10 |
| 2026-05-01 | May 2026 | 9.7 | 10 |
| 2026-06-01 | Jun 2026 | 17.7 | 10 |
| 2026-07-01 | Jul 2026 | 12.1 | 10 |
- Rows × columns
- 72 × 4
- Period covered
- to
- 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 |
|---|---|---|---|
month |
date | 2020-08-01 to 2026-07-01 | |
month_label |
text | 72 distinct values (Apr 2021, Apr 2022, Apr 2023…) | |
realised_vol_pct |
number | 6.6 to 51.9 | percent |
target_vol_pct |
number | every row is 10 | 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.
the exact SQL behind every number
WITH
px AS
(
SELECT
date AS d,
toFloat64(any(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= toStartOfMonth(subtractYears(today(), 6))
AND date < toStartOfMonth(today())
GROUP BY d
),
px_sorted AS
(
SELECT arraySort(p -> p.1, groupArray((d, c))) AS pts
FROM px
),
rets AS
(
SELECT arrayJoin(arrayFilter(x -> abs(x.2) < 0.4,
arrayMap((a, b) -> (b.1, log(b.2 / a.2)),
arraySlice(pts, 1, length(pts) - 1),
arraySlice(pts, 2)))) AS r
FROM px_sorted
)
SELECT
toStartOfMonth(tupleElement(r, 1)) AS month,
formatDateTime(toStartOfMonth(tupleElement(r, 1)), '%b %Y') AS month_label,
round(stddevSamp(tupleElement(r, 2)) * sqrt(252) * 100, 1) AS realised_vol_pct,
10 AS target_vol_pct
FROM rets
GROUP BY month, month_label
ORDER BY month
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysisVolatility Targeting for Position Sizing
Weekly realised volatility and the weight it implied, Nov 2019 to Apr 2020
series 25×4
→
One 10% risk budget, six names, six different weights
ranking 6×4
→
What the lookback window costs in daily turnover (SPY, 10% target, 2x cap)
ranking 4×4
→
SPY underwater curve: month end close against its running peak, 2016 to 2026
series 127×2
→
S&P 500 tracker (SPY): down sessions by calendar year, 2016 to mid-2026
table 11×5
→
Symbols that printed a final daily bar, by year
ranking 10×3
→
See all 2,170 queries →