{"slug":"volatility-targeting-position-sizing","qid":"covid_trace","label":"Weekly realised volatility and the weight it implied, Nov 2019 to Apr 2020","post_title":"Volatility Targeting for Position Sizing","post_url":"/blog/volatility-targeting-position-sizing#q-covid_trace","columns":["date","week_label","realised_vol_pct","weight_pct"],"rows":[{"date":"2019-11-01","week_label":"Nov 1, 2019","realised_vol_pct":10.6,"weight_pct":94},{"date":"2019-11-08","week_label":"Nov 8, 2019","realised_vol_pct":6.7,"weight_pct":148.7},{"date":"2019-11-15","week_label":"Nov 15, 2019","realised_vol_pct":5.7,"weight_pct":176.5},{"date":"2019-11-22","week_label":"Nov 22, 2019","realised_vol_pct":5.2,"weight_pct":193.1},{"date":"2019-11-29","week_label":"Nov 29, 2019","realised_vol_pct":5.7,"weight_pct":175},{"date":"2019-12-06","week_label":"Dec 6, 2019","realised_vol_pct":7.2,"weight_pct":138.6},{"date":"2019-12-13","week_label":"Dec 13, 2019","realised_vol_pct":7.7,"weight_pct":129},{"date":"2019-12-20","week_label":"Dec 20, 2019","realised_vol_pct":7.6,"weight_pct":131.7},{"date":"2019-12-27","week_label":"Dec 27, 2019","realised_vol_pct":7.3,"weight_pct":136.3},{"date":"2020-01-03","week_label":"Jan 3, 2020","realised_vol_pct":7.2,"weight_pct":138.5},{"date":"2020-01-10","week_label":"Jan 10, 2020","realised_vol_pct":7,"weight_pct":142.1},{"date":"2020-01-17","week_label":"Jan 17, 2020","realised_vol_pct":7.1,"weight_pct":141.4},{"date":"2020-01-24","week_label":"Jan 24, 2020","realised_vol_pct":8,"weight_pct":125.3},{"date":"2020-01-31","week_label":"Jan 31, 2020","realised_vol_pct":12.2,"weight_pct":81.9},{"date":"2020-02-07","week_label":"Feb 7, 2020","realised_vol_pct":13.4,"weight_pct":74.8},{"date":"2020-02-14","week_label":"Feb 14, 2020","realised_vol_pct":13.3,"weight_pct":75.3},{"date":"2020-02-21","week_label":"Feb 21, 2020","realised_vol_pct":13.8,"weight_pct":72.5},{"date":"2020-02-28","week_label":"Feb 28, 2020","realised_vol_pct":24.7,"weight_pct":40.5},{"date":"2020-03-06","week_label":"Mar 6, 2020","realised_vol_pct":34.9,"weight_pct":28.6},{"date":"2020-03-13","week_label":"Mar 13, 2020","realised_vol_pct":67.6,"weight_pct":14.8},{"date":"2020-03-20","week_label":"Mar 20, 2020","realised_vol_pct":81.6,"weight_pct":12.3},{"date":"2020-03-27","week_label":"Mar 27, 2020","realised_vol_pct":91.9,"weight_pct":10.9},{"date":"2020-04-03","week_label":"Apr 3, 2020","realised_vol_pct":90.5,"weight_pct":11.1},{"date":"2020-04-17","week_label":"Apr 17, 2020","realised_vol_pct":56.5,"weight_pct":17.7},{"date":"2020-04-24","week_label":"Apr 24, 2020","realised_vol_pct":46.2,"weight_pct":21.6}],"shape":"series","sql":"WITH\n    px AS\n    (\n        SELECT\n            date                  AS d,\n            toFloat64(any(close)) AS c\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'SPY'\n          AND date >= '2019-09-01'\n          AND date <  '2020-05-01'\n        GROUP BY d\n    ),\n    px_sorted AS\n    (\n        SELECT arraySort(p -> p.1, groupArray((d, c))) AS pts\n        FROM px\n    ),\n    rets AS\n    (\n        SELECT\n            arrayMap(p -> p.1, arraySlice(pts, 2)) AS ds,\n            arrayMap((a, b) -> log(b.2 / a.2),\n                     arraySlice(pts, 1, length(pts) - 1),\n                     arraySlice(pts, 2))           AS rs\n        FROM px_sorted\n    ),\n    rolling AS\n    (\n        SELECT arrayJoin(arrayMap(i -> (ds[i],\n                   arrayReduce('stddevSamp', arraySlice(rs, i - 20, 21)) * sqrt(252)),\n                 range(21, length(rs) + 1))) AS pt\n        FROM rets\n    )\nSELECT\n    tupleElement(pt, 1)                                       AS date,\n    formatDateTime(tupleElement(pt, 1), '%b %e, %Y')          AS week_label,\n    round(tupleElement(pt, 2) * 100, 1)                       AS realised_vol_pct,\n    round(100 * least(0.10 / tupleElement(pt, 2), 2.0), 1)    AS weight_pct\nFROM rolling\nWHERE date >= '2019-11-01'\n  AND toDayOfWeek(date) = 5\nORDER BY date","computed_at":"2026-08-22T04:32:26.949968+00:00","elapsed":0.057729257}