{"slug":"etf-premium-and-discount-to-nav","qid":"monthly_scale","label":"Median session move by month, 2026 first half","post_title":"ETF Premium and Discount to NAV, Explained","post_url":"/blog/etf-premium-and-discount-to-nav#q-monthly_scale","columns":["month","spy_median_move_pct","efa_median_move_pct","hyg_median_move_pct"],"rows":[{"month":"2026-01","spy_median_move_pct":0.322,"efa_median_move_pct":0.319,"hyg_median_move_pct":0.074},{"month":"2026-02","spy_median_move_pct":0.613,"efa_median_move_pct":0.413,"hyg_median_move_pct":0.074},{"month":"2026-03","spy_median_move_pct":0.761,"efa_median_move_pct":0.676,"hyg_median_move_pct":0.258},{"month":"2026-04","spy_median_move_pct":0.399,"efa_median_move_pct":0.417,"hyg_median_move_pct":0.131},{"month":"2026-05","spy_median_move_pct":0.354,"efa_median_move_pct":0.287,"hyg_median_move_pct":0.112},{"month":"2026-06","spy_median_move_pct":0.545,"efa_median_move_pct":0.406,"hyg_median_move_pct":0.063}],"shape":"series","sql":"WITH sessions AS\n(\n    SELECT\n        ticker,\n        toDate(toTimeZone(window_start, 'America/New_York'))  AS session_date,\n        argMin(toFloat64(open),  window_start)                AS px_open,\n        argMax(toFloat64(close), window_start)                AS px_close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'EFA', 'HYG')\n      AND window_start >= '2026-01-02 00:00:00'\n      AND window_start <  '2026-07-01 00: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, session_date\n    HAVING px_open > 0\n)\nSELECT\n    formatDateTime(session_date, '%Y-%m')                                            AS month,\n    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'SPY'), 3) AS spy_median_move_pct,\n    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'EFA'), 3) AS efa_median_move_pct,\n    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'HYG'), 3) AS hyg_median_move_pct\nFROM sessions\nGROUP BY month\nHAVING countIf(ticker = 'SPY') > 0\n   AND countIf(ticker = 'EFA') > 0\n   AND countIf(ticker = 'HYG') > 0\nORDER BY month","computed_at":"2026-08-06T04:10:54.504435+00:00","elapsed":0.003884903}