{"slug":"etf-premium-and-discount-to-nav","qid":"after_europe_closes","label":"Median move before and after European markets close, first half of 2026","post_title":"ETF Premium and Discount to NAV, Explained","post_url":"/blog/etf-premium-and-discount-to-nav#q-after_europe_closes","columns":["ticker","morning_move_pct","afternoon_move_pct"],"rows":[{"ticker":"SPY","morning_move_pct":0.306,"afternoon_move_pct":0.283},{"ticker":"VGK","morning_move_pct":0.288,"afternoon_move_pct":0.289},{"ticker":"EFA","morning_move_pct":0.262,"afternoon_move_pct":0.277},{"ticker":"EWJ","morning_move_pct":0.272,"afternoon_move_pct":0.302}],"shape":"ranking","sql":"WITH bars AS\n(\n    SELECT\n        ticker,\n        window_start,\n        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n        toHour(toTimeZone(window_start, 'America/New_York')) * 60\n            + toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute,\n        toFloat64(open)  AS px_o,\n        toFloat64(close) AS px_c\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'VGK', 'EFA', 'EWJ')\n      AND window_start >= '2026-01-02 00:00:00'\n      AND window_start <  '2026-07-01 00:00:00'\n),\nlegs AS\n(\n    SELECT\n        ticker,\n        session_date,\n        argMinIf(px_o, window_start, et_minute >= 570) AS px_open,\n        argMaxIf(px_c, window_start, et_minute <  690) AS px_midday,\n        argMaxIf(px_c, window_start, et_minute <  960) AS px_close\n    FROM bars\n    WHERE et_minute >= 570 AND et_minute < 960\n    GROUP BY ticker, session_date\n    HAVING px_open > 0 AND px_midday > 0 AND px_close > 0\n)\nSELECT\n    ticker,\n    round(quantileExact(0.5)(abs(px_midday / px_open  - 1) * 100), 3) AS morning_move_pct,\n    round(quantileExact(0.5)(abs(px_close  / px_midday - 1) * 100), 3) AS afternoon_move_pct\nFROM legs\nGROUP BY ticker\nORDER BY multiIf(ticker = 'SPY', 1, ticker = 'VGK', 2, ticker = 'EFA', 3, 4)","computed_at":"2026-08-06T04:10:54.415095+00:00","elapsed":0.003687779}