{"slug":"etf-relative-strength-alpha-attribution","qid":"benchmark_fit","label":"Share of each fund's daily variation explained by SPY, trailing two years","post_title":"ETF Relative Strength and Alpha Attribution","post_url":"/blog/etf-relative-strength-alpha-attribution#q-benchmark_fit","columns":["etf","r_squared_vs_spy_pct"],"rows":[{"etf":"QQQ","r_squared_vs_spy_pct":90.4},{"etf":"XLK","r_squared_vs_spy_pct":80.5},{"etf":"IWM","r_squared_vs_spy_pct":72.2},{"etf":"EFA","r_squared_vs_spy_pct":57.1},{"etf":"XLF","r_squared_vs_spy_pct":55},{"etf":"XLV","r_squared_vs_spy_pct":19.2},{"etf":"XLE","r_squared_vs_spy_pct":12},{"etf":"XLU","r_squared_vs_spy_pct":10.4},{"etf":"GLD","r_squared_vs_spy_pct":2.9}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        ticker,\n        date,\n        toFloat64(close) AS px,\n        lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')\n      AND date >= today() - 760\n)\nSELECT\n    sleeve.ticker                                                AS etf,\n    round(pow(corr(sleeve.fund_ret, bench.spy_ret), 2) * 100, 1) AS r_squared_vs_spy_pct\nFROM\n(\n    SELECT ticker, date, px / prev_px - 1 AS fund_ret\n    FROM daily\n    WHERE prev_px > 0\n      AND ticker != 'SPY'\n) AS sleeve\nINNER JOIN\n(\n    SELECT date, px / prev_px - 1 AS spy_ret\n    FROM daily\n    WHERE prev_px > 0\n      AND ticker = 'SPY'\n) AS bench USING (date)\nGROUP BY sleeve.ticker\nORDER BY r_squared_vs_spy_pct DESC","computed_at":"2026-08-22T04:05:29.168812+00:00","elapsed":0.073590588}