STRASMORE/EXPLORE 2,707 QUERIES

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-09-26, from Volatility Targeting for Position Sizing.

as of series 72×4read in context →
SPY realised volatility by month against a 10% target — 72 rows by 4 columns, computed from US exchange, SIP and OPRA data.
monthmonth_labelrealised_vol_pcttarget_vol_pct
2020-09-01Sep 202025.110
2020-10-01Oct 202020.510
2020-11-01Nov 202016.210
2020-12-01Dec 20209.110
2021-01-01Jan 202116.810
2021-02-01Feb 202114.410
2021-03-01Mar 202116.410
2021-04-01Apr 202110.510
2021-05-01May 202114.110
2021-06-01Jun 20219.310
2021-07-01Jul 202111.410
2021-08-01Aug 20218.310
2021-09-01Sep 202113.110
2021-10-01Oct 202110.910
2021-11-01Nov 202112.910
2021-12-01Dec 202117.210
2022-01-01Jan 202218.710
2022-02-01Feb 202222.510
2022-03-01Mar 202223.210
2022-04-01Apr 202225.110
2022-05-01May 202231.410
2022-06-01Jun 202229.710
2022-07-01Jul 202219.110
2022-08-01Aug 202219.410
2022-09-01Sep 202224.210
2022-10-01Oct 202227.810
2022-11-01Nov 202227.610
2022-12-01Dec 202218.410
2023-01-01Jan 202316.510
2023-02-01Feb 202315.610
2023-03-01Mar 202318.510
2023-04-01Apr 20231210
2023-05-01May 202312.810
2023-06-01Jun 202310.810
2023-07-01Jul 2023810
2023-08-01Aug 202312.310
2023-09-01Sep 202311.410
2023-10-01Oct 20231410
2023-11-01Nov 202311.110
2023-12-01Dec 20239.810
2024-01-01Jan 202411.210
2024-02-01Feb 202412.110
2024-03-01Mar 202410.110
2024-04-01Apr 202413.210
2024-05-01May 20249.510
2024-06-01Jun 20246.710
2024-07-01Jul 202414.410
2024-08-01Aug 202419.210
2024-09-01Sep 202413.810
2024-10-01Oct 202411.210
2024-11-01Nov 202411.810
2024-12-01Dec 202414.110
2025-01-01Jan 202513.910
2025-02-01Feb 202513.210
2025-03-01Mar 202520.710
2025-04-01Apr 202551.910
2025-05-01May 202516.810
2025-06-01Jun 202510.210
2025-07-01Jul 20256.610
2025-08-01Aug 20251210
2025-09-01Sep 20257.110
2025-10-01Oct 202513.810
2025-11-01Nov 202515.410
2025-12-01Dec 20258.410
2026-01-01Jan 202610.310
2026-02-01Feb 202613.410
2026-03-01Mar 202618.210
2026-04-01Apr 202611.610
2026-05-01May 20269.710
2026-06-01Jun 202617.710
2026-07-01Jul 202612.110
2026-08-01Aug 202610.310
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
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for SPY realised volatility by month against a 10% target, derived from the stored result.
ColumnTypeRangeNotes
month date 2020-09-01 to 2026-08-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.

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
    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
⌘/Ctrl + Enter

Work with this data in your AI assistant

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

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,707 queries →