QQQ sessions since 2003: intraday low ≤ −3% vs prior close AND close ≥ +1%
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-07-26, from Feb 24, 2022: War at the Open, Green by Close.
| session | low_vs_prior_pct | close_vs_prior_pct | trough_to_close_pct |
|---|---|---|---|
| 2022-02-24 | -3.4 | 3.4 | 7 |
| 2022-10-13 | -3.2 | 2.3 | 5.7 |
- Rows × columns
- 2 × 4
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
session |
date | 2022-02-24 to 2022-10-13 | |
low_vs_prior_pct |
number | -3.4 to -3.2 | percent |
close_vs_prior_pct |
number | 2.3 to 3.4 | percent |
trough_to_close_pct |
number | 5.7 to 7 | 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,
low_vs_prior_pct,
close_vs_prior_pct,
trough_to_close_pct
FROM (
SELECT
d,
round((lo / prev_c - 1) * 100, 1) AS low_vs_prior_pct,
round((c / prev_c - 1) * 100, 1) AS close_vs_prior_pct,
round((c / lo - 1) * 100, 1) AS trough_to_close_pct
FROM (
SELECT d, c, lo,
lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS c,
minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS lo
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'QQQ'
AND window_start >= toDateTime('2003-01-01 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')
GROUP BY d
)
)
WHERE prev_c > 0 AND isFinite(prev_c)
)
WHERE low_vs_prior_pct <= -3 AND close_vs_prior_pct >= 1
ORDER BY session
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 analysisFeb 24, 2022: War at the Open, Green by Close
QQQ daily closes, February 22 – March 14, 2022
series 15×4
→
QQQ by half-hour: February 24, 2022 regular session
series 13×4
→
2-year and 10-year Treasury yields, February 18 – March 8, 2022 (%)
series 12×3
→
Eleven tickers on February 24, 2022: gap, intraday extremes, close (% vs prior close)
table 11×6
→
After the reversal: when QQQ broke the invasion-day low, and how far it fell
scalar 1×10
→
QQQ on February 24, 2022: the invasion-day reversal, receipted
scalar 1×14
→
See all 2,170 queries →