{"slug":"real-returns-vs-random-walks","qid":"kurtosis_by_year","label":"kurtosis_by_year","post_title":"real-returns-vs-random-walks","post_url":"/blog/real-returns-vs-random-walks#q-kurtosis_by_year","columns":["year","excess_kurtosis","moves_over_2pct","full_window_excess_kurtosis"],"rows":[{"year":2006,"excess_kurtosis":1.08,"moves_over_2pct":2,"full_window_excess_kurtosis":14.95},{"year":2007,"excess_kurtosis":1.69,"moves_over_2pct":14,"full_window_excess_kurtosis":14.95},{"year":2008,"excess_kurtosis":6.4,"moves_over_2pct":70,"full_window_excess_kurtosis":14.95},{"year":2009,"excess_kurtosis":2.02,"moves_over_2pct":50,"full_window_excess_kurtosis":14.95},{"year":2010,"excess_kurtosis":2,"moves_over_2pct":22,"full_window_excess_kurtosis":14.95},{"year":2011,"excess_kurtosis":2.54,"moves_over_2pct":33,"full_window_excess_kurtosis":14.95},{"year":2012,"excess_kurtosis":0.79,"moves_over_2pct":7,"full_window_excess_kurtosis":14.95},{"year":2013,"excess_kurtosis":1.35,"moves_over_2pct":4,"full_window_excess_kurtosis":14.95},{"year":2014,"excess_kurtosis":1.33,"moves_over_2pct":4,"full_window_excess_kurtosis":14.95},{"year":2015,"excess_kurtosis":2.04,"moves_over_2pct":11,"full_window_excess_kurtosis":14.95},{"year":2016,"excess_kurtosis":2.21,"moves_over_2pct":10,"full_window_excess_kurtosis":14.95},{"year":2017,"excess_kurtosis":2.55,"moves_over_2pct":0,"full_window_excess_kurtosis":14.95},{"year":2018,"excess_kurtosis":3.17,"moves_over_2pct":19,"full_window_excess_kurtosis":14.95},{"year":2019,"excess_kurtosis":3.06,"moves_over_2pct":7,"full_window_excess_kurtosis":14.95},{"year":2020,"excess_kurtosis":7.06,"moves_over_2pct":42,"full_window_excess_kurtosis":14.95},{"year":2021,"excess_kurtosis":0.59,"moves_over_2pct":8,"full_window_excess_kurtosis":14.95},{"year":2022,"excess_kurtosis":0.32,"moves_over_2pct":46,"full_window_excess_kurtosis":14.95},{"year":2023,"excess_kurtosis":-0.19,"moves_over_2pct":2,"full_window_excess_kurtosis":14.95},{"year":2024,"excess_kurtosis":1.7,"moves_over_2pct":7,"full_window_excess_kurtosis":14.95},{"year":2025,"excess_kurtosis":23.14,"moves_over_2pct":14,"full_window_excess_kurtosis":14.95},{"year":2026,"excess_kurtosis":0.91,"moves_over_2pct":4,"full_window_excess_kurtosis":14.95}],"shape":"ranking","sql":"WITH daily AS (SELECT date, argMax(toFloat64(close), _ingest_time) AS px FROM global_markets.stocks_daily_aggs WHERE ticker = 'SPY' AND date >= '2006-01-01' AND date <= '2026-09-30' GROUP BY date),\nrets AS (SELECT date, px / prev_px - 1 AS ret FROM (SELECT date, px, lagInFrame(px) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px FROM daily) WHERE prev_px > 0),\nfull_window AS (SELECT avg(ret) AS mu, stddevPop(ret) AS sd FROM rets),\nfull_excess AS (SELECT round(avg(pow((r.ret - f.mu) / f.sd, 4)) - 3, 2) AS ek FROM rets AS r CROSS JOIN full_window AS f),\nyearly AS (SELECT toYear(r.date) AS yr, r.ret AS ret, e.ek AS ek FROM rets AS r CROSS JOIN full_excess AS e),\nyear_stats AS (SELECT yr, avg(ret) AS mu, stddevPop(ret) AS sd FROM yearly GROUP BY yr)\nSELECT\n    y.yr                                             AS year,\n    round(avg(pow((y.ret - s.mu) / s.sd, 4)) - 3, 2) AS excess_kurtosis,\n    countIf(abs(y.ret) > 0.02)                       AS moves_over_2pct,\n    round(any(y.ek), 2)                              AS full_window_excess_kurtosis\nFROM yearly AS y\nINNER JOIN year_stats AS s ON y.yr = s.yr\nGROUP BY y.yr\nORDER BY y.yr","computed_at":"2026-10-01T15:35:51.097437+00:00","elapsed":0.023785378}