{"slug":"when-equal-weight-beats-optimization","qid":"estimate_by_sample_length","label":"How far the mean and volatility estimates scatter by sample length","post_title":"When Equal Weight Beats Optimization","post_url":"/blog/when-equal-weight-beats-optimization#q-estimate_by_sample_length","columns":["sample_length","mean_estimate_spread_pct","vol_estimate_spread_pct","window_count"],"rows":[{"sample_length":"21 sessions","mean_estimate_spread_pct":53.7,"vol_estimate_spread_pct":10.9,"window_count":239},{"sample_length":"63 sessions","mean_estimate_spread_pct":27.3,"vol_estimate_spread_pct":10.3,"window_count":79},{"sample_length":"126 sessions","mean_estimate_spread_pct":19.6,"vol_estimate_spread_pct":9.7,"window_count":39},{"sample_length":"252 sessions","mean_estimate_spread_pct":14.7,"vol_estimate_spread_pct":8.6,"window_count":19},{"sample_length":"504 sessions","mean_estimate_spread_pct":10.6,"vol_estimate_spread_pct":6.6,"window_count":9}],"shape":"ranking","sql":"WITH prices AS\n(\n    SELECT\n        date,\n        toFloat64(max(close)) AS c\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date >= '2005-01-01'\n      AND date <  '2025-01-01'\n    GROUP BY date\n),\nrets AS\n(\n    SELECT\n        date,\n        c / lagInFrame(c, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret\n    FROM prices\n),\nnumbered AS\n(\n    SELECT\n        ret,\n        row_number() OVER (ORDER BY date ASC) AS i\n    FROM rets\n    WHERE isFinite(ret)\n),\nsweep AS\n(\n    SELECT\n        arrayJoin([21, 63, 126, 252, 504]) AS n,\n        i,\n        ret\n    FROM numbered\n),\nblocks AS\n(\n    SELECT\n        n,\n        intDiv(i - 1, n)                 AS blk,\n        avg(ret) * 252 * 100             AS mean_pct,\n        stddevPop(ret) * sqrt(252) * 100 AS vol_pct\n    FROM sweep\n    GROUP BY n, blk\n    HAVING count() = n\n)\nSELECT\n    concat(toString(n), ' sessions') AS sample_length,\n    round(stddevPop(mean_pct), 1)    AS mean_estimate_spread_pct,\n    round(stddevPop(vol_pct), 1)     AS vol_estimate_spread_pct,\n    count()                          AS window_count\nFROM blocks\nGROUP BY n\nORDER BY n ASC","computed_at":"2026-08-16T14:56:17.803270+00:00","elapsed":0.108180381}