What this isA real advance–decline breadth line built from constituent closes.
Each stock contributes +1 when today's close is above its prior close, −1 when below, and 0 when unchanged.
Exact formulanet[t] = advancers[t] − decliners[t] and
ADL[t] = ADL[t−1] + net[t]. Volume, intraday high and intraday low are not used.
NET 21D and NET 50DSimple moving averages of daily
net[t], not of cumulative ADL. They oscillate around zero: positive means more average
advancers and negative means more average decliners. Full-history calculation preserves 1M warm-up.
Universe choicesUS archive = stored NASDAQ + NYSE + NYSE MKT equities. The Nasdaq
and NYSE choices restrict that same archive by listing venue. ETFs are excluded using the stored instrument type.
Coverage is explicitThe readout prints eligible stocks and the exact number covered
on the latest session, plus advancing, declining, unchanged and net counts. Dates below 60% coverage are excluded.
Important limitationThis is the site's current archived equity basket—not every stock
listed on an exchange, and not historical index membership. It therefore carries current-universe survivorship bias.
How to compareRising ADL means advances have cumulatively exceeded declines; falling
ADL means declines dominate. Divergence from SPX or NAS100 can reveal narrow leadership or broader participation.
SPX and NAS100The cash indices are price references. They are painted last, have
independent opacity sliders, and can be made darker/thicker with Bold ref.
Scale modesNET 21D and NET 50D always keep a symmetric real stock-count
scale with zero in the middle. Fill gives other series independent ranges; Z-score standardises price overlays.
Chart controlsWheel/pinch zoom, drag pan, Y stretch, datelines, price candles,
styled trend lines, resize, fullscreen, tape, and PNG/CSV/JSON export are inherited from /basics.
Data architectureBreadth is calculated server-side from the existing
/apps/stocks/data/daily/ archives and exchange metadata, then cached. Price overlays reuse /basics.