STRASMORE/EXPLORE 3,293 QUERIES

New 52-week highs against new lows, daily, over the past six weeks

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-10-17, from Stocks at 52-Week Highs and Lows.

as of series 30×4read in context →
New 52-week highs against new lows, daily, over the past six weeks — 30 rows by 4 columns, computed from US exchange, SIP and OPRA data.
dateat_52w_highat_52w_lownet_highs
Sep 4, 202618108
Sep 8, 20261519-4
Sep 9, 20261931-12
Sep 10, 20261631-15
Sep 11, 202623194
Sep 14, 202623203
Sep 15, 20263440-6
Sep 16, 20261637-21
Sep 17, 202632302
Sep 18, 20261645-29
Sep 21, 20263036-6
Sep 22, 202628262
Sep 23, 20262545-20
Sep 24, 20262953-24
Sep 25, 20262042-22
Sep 28, 20261951-32
Sep 29, 20262148-27
Sep 30, 20261863-45
Oct 1, 20262046-26
Oct 2, 20262648-22
Oct 5, 202639327
Oct 6, 2026271512
Oct 7, 20262029-9
Oct 8, 202615114
Oct 9, 2026331221
Oct 12, 202629209
Oct 13, 2026351817
Oct 14, 202633276
Oct 15, 202644341
Oct 16, 2026351718
Rows × columns
30 × 4
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 New 52-week highs against new lows, daily, over the past six weeks, derived from the stored result.
ColumnTypeRangeNotes
date text 30 distinct values (Oct 1, 2026, Oct 12, 2026, Oct 13, 2026…)
at_52w_high number 15 to 44 US dollars
at_52w_low number 3 to 63 US dollars
net_highs number -45 to 41

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.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 20 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
                     WHERE period_end >= today() - 400)
      AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 460 AND today())
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
    SELECT max(date) AS d FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY' AND date >= today() - 12 AND date < today()
),
daily AS (
    SELECT ticker, date AS dt, toFloat64(close) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE date < today()
      AND ticker IN (SELECT ticker FROM universe)
      AND date <= (SELECT d FROM last_session)
      AND date >= (SELECT d FROM last_session) - 425
),
rolled AS (
    SELECT ticker, dt, c,
           max(c) OVER w AS hi,
           min(c) OVER w AS lo,
           count() OVER w AS n_sessions,
           min(dt) OVER (PARTITION BY ticker) AS first_dt
    FROM daily
    WINDOW w AS (PARTITION BY ticker ORDER BY dt RANGE BETWEEN 364 PRECEDING AND CURRENT ROW)
)
SELECT formatDateTime(dt, '%b %e, %Y') AS date,
       countIf(c >= hi * 0.99) AS at_52w_high,
       countIf(c <= lo * 1.01) AS at_52w_low,
       countIf(c >= hi * 0.99) - countIf(c <= lo * 1.01) AS net_highs
FROM rolled
WHERE n_sessions >= 200
  AND first_dt <= dt - 350
  AND dt > (SELECT d FROM last_session) - 43
GROUP BY dt
ORDER BY dt
⌘/Ctrl + Enter

Travaillez ces données dans votre assistant IA

S'ouvre prêt à interroger, avec les données de cette page. Gratuit, sans compte.

More from this analysisStocks at 52-Week Highs and Lows
Stocks at 52-week lows, ordered by year-to-date return ranking 12×3 → Stocks at 52-week highs, ordered by year-to-date return ranking 12×3 → How far the whole screen sits below its 52-week high ranking 6×4 → Where five broad-market ETFs sit inside their own 52-week range ranking 5×4 → The S&P 500's underwater curve: worst drawdown from a prior high, by month series 127×2 → Growth of $100: a calm name (KO), the market (SPY), a wild name (NVDA), weekly series 114×4 → See all 3,293 queries →