{"slug":"portfolio-delta-and-beta-weighting","qid":"beta_ladder","label":"Beta, price ratio, and SPY-share equivalent per share held","post_title":"Portfolio Delta and Beta Weighting Explained","post_url":"/blog/portfolio-delta-and-beta-weighting#q-beta_ladder","columns":["ticker","beta_vs_spy","price_vs_spy","spy_shares_per_share"],"rows":[{"ticker":"NVDA","beta_vs_spy":1.86,"price_vs_spy":0.268,"spy_shares_per_share":0.498},{"ticker":"SPY","beta_vs_spy":1,"price_vs_spy":1,"spy_shares_per_share":1},{"ticker":"AAPL","beta_vs_spy":0.88,"price_vs_spy":0.387,"spy_shares_per_share":0.342},{"ticker":"MSFT","beta_vs_spy":0.82,"price_vs_spy":0.5,"spy_shares_per_share":0.407},{"ticker":"JNJ","beta_vs_spy":-0.1,"price_vs_spy":0.34,"spy_shares_per_share":-0.032},{"ticker":"KO","beta_vs_spy":-0.27,"price_vs_spy":0.109,"spy_shares_per_share":-0.03},{"ticker":"XOM","beta_vs_spy":-0.36,"price_vs_spy":0.183,"spy_shares_per_share":-0.067}],"shape":"ranking","sql":"WITH\n    sessions AS\n    (\n        SELECT\n            ticker                                               AS ticker,\n            toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n            toFloat64(argMax(close, window_start))               AS px\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker IN ('SPY', 'NVDA', 'AAPL', 'MSFT', 'XOM', 'JNJ', 'KO')\n          AND window_start >= toDateTime('2025-07-01 04:00:00')\n          AND window_start <  toDateTime('2026-07-01 04:00:00')\n          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n             + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n             + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960\n        GROUP BY ticker, d\n    ),\n    steps AS\n    (\n        SELECT\n            ticker,\n            d,\n            px,\n            any(px) OVER (PARTITION BY ticker ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px\n        FROM sessions\n    ),\n    daily_ret AS\n    (\n        SELECT ticker, d, (px / prev_px) - 1 AS r\n        FROM steps\n        WHERE prev_px > 0\n    ),\n    bench AS\n    (\n        SELECT d, r AS spy_r\n        FROM daily_ret\n        WHERE ticker = 'SPY'\n    ),\n    betas AS\n    (\n        SELECT\n            s.ticker                                 AS ticker,\n            covarPop(s.r, b.spy_r) / varPop(b.spy_r) AS beta_vs_spy,\n            1                                        AS k\n        FROM daily_ret AS s\n        INNER JOIN bench AS b ON b.d = s.d\n        GROUP BY s.ticker\n    ),\n    prices AS\n    (\n        SELECT ticker, argMax(px, d) AS close_px\n        FROM sessions\n        GROUP BY ticker\n    ),\n    spy_price AS\n    (\n        SELECT argMax(px, d) AS spy_close, 1 AS k\n        FROM sessions\n        WHERE ticker = 'SPY'\n    )\nSELECT\n    betas.ticker                                                        AS ticker,\n    round(betas.beta_vs_spy, 2)                                         AS beta_vs_spy,\n    round(prices.close_px / spy_price.spy_close, 3)                     AS price_vs_spy,\n    round(betas.beta_vs_spy * prices.close_px / spy_price.spy_close, 3) AS spy_shares_per_share\nFROM betas\nINNER JOIN prices ON prices.ticker = betas.ticker\nINNER JOIN spy_price ON spy_price.k = betas.k\nORDER BY beta_vs_spy DESC","computed_at":"2026-08-06T05:02:01.435010+00:00","elapsed":0.005328741}