{"slug":"us-stock-market-hours-vietnam-time","qid":"volume_by_ict_hour","label":"volume_by_ict_hour","post_title":"us-stock-market-hours-vietnam-time","post_url":"/blog/lang/vi/us-stock-market-hours-vietnam-time#q-volume_by_ict_hour","columns":["ict_time","et_time","avg_volume_mil","pct_of_day","sessions_counted"],"rows":[{"ict_time":"15:00","et_time":"04:00","avg_volume_mil":0.1,"pct_of_day":0.22,"sessions_counted":21},{"ict_time":"16:00","et_time":"05:00","avg_volume_mil":0.04,"pct_of_day":0.1,"sessions_counted":21},{"ict_time":"17:00","et_time":"06:00","avg_volume_mil":0.07,"pct_of_day":0.16,"sessions_counted":21},{"ict_time":"18:00","et_time":"07:00","avg_volume_mil":0.2,"pct_of_day":0.48,"sessions_counted":21},{"ict_time":"19:00","et_time":"08:00","avg_volume_mil":0.44,"pct_of_day":1.03,"sessions_counted":21},{"ict_time":"20:00","et_time":"09:00","avg_volume_mil":4.12,"pct_of_day":9.64,"sessions_counted":21},{"ict_time":"21:00","et_time":"10:00","avg_volume_mil":5.22,"pct_of_day":12.22,"sessions_counted":21},{"ict_time":"22:00","et_time":"11:00","avg_volume_mil":4.81,"pct_of_day":11.27,"sessions_counted":21},{"ict_time":"23:00","et_time":"12:00","avg_volume_mil":3.27,"pct_of_day":7.65,"sessions_counted":21},{"ict_time":"00:00","et_time":"13:00","avg_volume_mil":2.93,"pct_of_day":6.86,"sessions_counted":21},{"ict_time":"01:00","et_time":"14:00","avg_volume_mil":4.32,"pct_of_day":10.12,"sessions_counted":21},{"ict_time":"02:00","et_time":"15:00","avg_volume_mil":10.78,"pct_of_day":25.25,"sessions_counted":21},{"ict_time":"03:00","et_time":"16:00","avg_volume_mil":5.88,"pct_of_day":13.77,"sessions_counted":21},{"ict_time":"04:00","et_time":"17:00","avg_volume_mil":0.36,"pct_of_day":0.85,"sessions_counted":21},{"ict_time":"05:00","et_time":"18:00","avg_volume_mil":0.12,"pct_of_day":0.29,"sessions_counted":21},{"ict_time":"06:00","et_time":"19:00","avg_volume_mil":0.04,"pct_of_day":0.09,"sessions_counted":21}],"shape":"series","sql":"WITH tape AS\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n        toHour(toTimeZone(window_start, 'America/New_York'))  AS et_hour,\n        toHour(toTimeZone(window_start, 'Asia/Ho_Chi_Minh'))  AS ict_hour,\n        toFloat64(volume)                                     AS volume\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= '2026-09-01 04:00:00'\n      AND window_start <  '2026-10-01 04:00:00'\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 240\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 1200\n),\nper_hour AS\n(\n    SELECT\n        session_date,\n        et_hour,\n        ict_hour,\n        sum(volume) AS hour_volume\n    FROM tape\n    GROUP BY session_date, et_hour, ict_hour\n)\nSELECT\n    concat(if(ict_hour < 10, '0', ''), toString(ict_hour), ':00')     AS ict_time,\n    concat(if(et_hour < 10, '0', ''), toString(et_hour), ':00')       AS et_time,\n    round(avg(hour_volume) / 1e6, 2)                                  AS avg_volume_mil,\n    round(100 * sum(hour_volume) / any(day_total.all_volume), 2)      AS pct_of_day,\n    count()                                                           AS sessions_counted\nFROM per_hour\nCROSS JOIN (SELECT sum(hour_volume) AS all_volume FROM per_hour) AS day_total\nGROUP BY ict_time, et_time, et_hour\nORDER BY et_hour","computed_at":"2026-10-05T14:52:46.064895+00:00","elapsed":0.002366388}