STRASMORE/EXPLORE 2,358 QUERIES

halt_days

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-18, from market-wide-circuit-breakers-explained.

as of series 4×8read in context →
halt_days — 4 rows by 8 columns, computed from US exchange, SIP and OPRA data.
session_datesession_labelprior_closelevel_1_linesession_lowopen_drop_pctlow_drop_pctclose_drop_pct
2020-03-09March 9297.46276.64273.457.458.077.81
2020-03-12March 12274.36255.15247.686.699.729.57
2020-03-16March 16269.32250.47237.3610.4511.8710.94
2020-03-18March 18252.8235.1228.026.559.85.06
Rows × columns
4 × 8
Period covered
to
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for halt_days, derived from the stored result.
ColumnTypeRangeNotes
session_date date 2020-03-09 to 2020-03-18
session_label text 4 distinct values (March 12, March 16, March 18…)
prior_close number 252.8 to 297.46 US dollars
level_1_line number 235.1 to 276.64
session_low number 228.02 to 273.45 US dollars
open_drop_pct number 6.55 to 10.45 percent
low_drop_pct number 8.07 to 11.87 percent
close_drop_pct number 5.06 to 10.94 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

the exact SQL behind every number
SELECT
    toString(d)                                            AS session_date,
    concat(monthName(d), ' ', toString(toDayOfMonth(d)))   AS session_label,
    round(prev_close_px, 2)                                AS prior_close,
    round(prev_close_px * 93 / 100, 2)                     AS level_1_line,
    round(low_px, 2)                                       AS session_low,
    round((1 - open_px / prev_close_px) * 100, 2)          AS open_drop_pct,
    round((1 - low_px / prev_close_px) * 100, 2)           AS low_drop_pct,
    round((1 - close_px / prev_close_px) * 100, 2)         AS close_drop_pct
FROM
(
    SELECT
        d,
        open_px,
        low_px,
        close_px,
        lagInFrame(close_px, 1) OVER (ORDER BY d ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_close_px
    FROM
    (
        SELECT
            date                        AS d,
            toFloat64(max(open))        AS open_px,
            toFloat64(min(low))         AS low_px,
            toFloat64(max(close))       AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date BETWEEN toDate('2020-02-24') AND toDate('2020-03-31')
        GROUP BY date
    )
)
WHERE d >= toDate('2020-03-02')
  AND (1 - low_px / prev_close_px) * 100 >= 7
ORDER BY d

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysismarket-wide-circuit-breakers-explained
march_2020_sessions series 22×6 daily_recalc series 15×5 trigger_levels table 3×7 One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 monthly series 241×4 2s10s spread, monthly average: last 20 years series 240×2 See all 2,358 queries →