{"slug":"covid-crash-march-2020","qid":"day_tape","label":"SPY on March 9, 2020: the circuit-breaker session, receipted","post_title":"COVID Crash 2020: Four Halts, Peak to Trough","post_url":"/blog/covid-crash-march-2020#q-day_tape","columns":["prior_close","rth_open","gap_pct","halt_first_missing_et","halt_missing_minutes","rth_low","low_et","rth_close","day_change_pct","day_shares_m","rth_minute_bars"],"rows":[{"prior_close":297.42,"rth_open":275.3,"gap_pct":-7.4,"halt_first_missing_et":"09:35","halt_missing_minutes":14,"rth_low":273.45,"low_et":"14:44","rth_close":274.4,"day_change_pct":-7.7,"day_shares_m":304.6,"rth_minute_bars":376}],"shape":"scalar","sql":"WITH\n    (\n        SELECT argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY'\n          AND window_start >= toDateTime('2020-03-06 00:00:00') AND window_start < toDateTime('2020-03-09 04:00:00')\n    ) AS prior_rth_close,\n    (\n        SELECT (formatDateTime(toTimeZone(addMinutes(prev_bar, 1), 'America/New_York'), '%H:%i'), gap_minutes - 1)\n        FROM (\n            SELECT\n                lagInFrame(window_start) OVER (ORDER BY window_start ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_bar,\n                dateDiff('minute', prev_bar, window_start) AS gap_minutes\n            FROM global_markets.delayed_stocks_minute_aggs\n            WHERE ticker = 'SPY'\n              AND window_start >= toDateTime('2020-03-09 04:00:00') AND window_start < toDateTime('2020-03-09 23:59:00')\n              AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n        )\n        WHERE prev_bar > toDateTime('2020-03-09 00:00:00')\n        ORDER BY gap_minutes DESC\n        LIMIT 1\n    ) AS halt_gap\nSELECT\n    round(prior_rth_close, 2) AS prior_close,\n    round(toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_open,\n    round((toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS gap_pct,\n    halt_gap.1 AS halt_first_missing_et,\n    halt_gap.2 AS halt_missing_minutes,\n    round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_low,\n    formatDateTime(toTimeZone(argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 'America/New_York'), '%H:%i') AS low_et,\n    round(toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_close,\n    round((toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS day_change_pct,\n    round(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,\n    countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND window_start >= toDateTime('2020-03-09 04:00:00') AND window_start < toDateTime('2020-03-09 23:59:00')","computed_at":"2026-07-26T05:28:57.097300+00:00","elapsed":0.098061893}