{"slug":"real-returns-vs-random-walks","qid":"sigma_bands","label":"sigma_bands","post_title":"real-returns-vs-random-walks","post_url":"/blog/real-returns-vs-random-walks#q-sigma_bands","columns":["sigma_band","spy_moves","normal_model_moves","sample_size"],"rows":[{"sigma_band":"0 to 1 sigma","spy_moves":4214,"normal_model_moves":3561.6,"sample_size":5217},{"sigma_band":"1 to 2 sigma","spy_moves":756,"normal_model_moves":1418,"sample_size":5217},{"sigma_band":"2 to 3 sigma","spy_moves":163,"normal_model_moves":223.3,"sample_size":5217},{"sigma_band":"3 to 4 sigma","spy_moves":45,"normal_model_moves":13.8,"sample_size":5217},{"sigma_band":"4 to 5 sigma","spy_moves":20,"normal_model_moves":0.3,"sample_size":5217},{"sigma_band":"5 sigma plus","spy_moves":19,"normal_model_moves":0,"sample_size":5217}],"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),\nstats AS (SELECT avg(ret) AS mu, stddevPop(ret) AS sd, count() AS n FROM rets),\nbanded AS (SELECT least(toUInt8(floor(abs(r.ret - s.mu) / s.sd)), 5) AS band, s.n AS n FROM rets AS r CROSS JOIN stats AS s)\nSELECT\n    if(band = 5, '5 sigma plus', concat(toString(band), ' to ', toString(band + 1), ' sigma')) AS sigma_band,\n    count()                                                                                    AS spy_moves,\n    round(any(n) * (erf((band + 1) / sqrt(2)) - erf(band / sqrt(2))), 1)                        AS normal_model_moves,\n    any(n)                                                                                     AS sample_size\nFROM banded\nGROUP BY band\nORDER BY band","computed_at":"2026-10-01T15:35:50.987141+00:00","elapsed":0.00623447}