{"slug":"tradegate-vs-xetra-trading-hours","qid":"late_session_gap","label":"Evening volume share and the gap to the official close","post_title":"Tradegate vs Xetra: Hours and Prices","post_url":"/blog/tradegate-vs-xetra-trading-hours#q-late_session_gap","columns":["symbol","post_close_volume_pct","post_close_move_pct"],"rows":[{"symbol":"SPY","post_close_volume_pct":11.94,"post_close_move_pct":0.35},{"symbol":"MSFT","post_close_volume_pct":9.28,"post_close_move_pct":0.189},{"symbol":"NVDA","post_close_volume_pct":3.83,"post_close_move_pct":0.577},{"symbol":"AAPL","post_close_volume_pct":2.6,"post_close_move_pct":0.202},{"symbol":"JNJ","post_close_volume_pct":1.39,"post_close_move_pct":0.008},{"symbol":"KO","post_close_volume_pct":0.62,"post_close_move_pct":0.639}],"shape":"ranking","sql":"WITH (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n      + toMinute(toTimeZone(window_start, 'America/New_York'))) AS et_minutes\nSELECT\n    ticker                                                         AS symbol,\n    round(100 * sumIf(volume, et_minutes >= 960) / sum(volume), 2) AS post_close_volume_pct,\n    round(abs(100 * (toFloat64(argMaxIf(close, et_minutes, et_minutes >= 960))\n        / toFloat64(argMaxIf(close, et_minutes, et_minutes < 960)) - 1)), 3) AS post_close_move_pct\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')\n  AND window_start >= toDateTime('2026-06-10 08:00:00')\n  AND window_start <  toDateTime('2026-06-11 00:00:00')\nGROUP BY ticker\nHAVING countIf(et_minutes >= 960) > 0\n   AND countIf(et_minutes < 960) > 0\nORDER BY post_close_volume_pct DESC","computed_at":"2026-09-27T15:08:19.278799+00:00","elapsed":0.003498902}