Loading…
Pre-openThe market has not opened yet. Showing Wed 23 Sept's close, 16:00 ET. These numbers start moving again when it opens today at 09:30 ET.
Loading…
The S&P 500 scored 0-100 and ranked, with every component of the score shown on every name.
Last run 2026-09-23
This runs at 09:35 ET, minutes into the session. Everything here is measured on daily bars and on a chain quoted before the open, so the list does not swing on the first few minutes of trading — but the prices beside it are that early, and the day has barely started.
This page ranks names and shows what each part of the ranking was built from. It does not say what to do about any of them, there is no position sizing, target or stop anywhere on it, and no row here is a suggestion to buy or sell. A name at the top of the list is the name nothing scored higher than — that is all a rank is.
36.4 a day on average across 17 scans
Red bars are mornings the market gate was shut, when zero is the correct output rather than a thin day. Browse past days.
Today’s scan has not run.
The scan is scheduled for 09:35 ET and its result is stored once and read all day. Nothing is shown here in the meantime — an older day’s list under today’s heading would be worse than an empty page. The last stored scan was 2026-09-23, when 503 names were scored.
This is a real answer, not a gap. If what you want is simply what moved in the last completed session, that is a separate page with a much weaker filter: Moved Last Session. Nothing on it has been scored or ranked here.
Candidate gamma was last refreshed for 2026-09-23 (271 chains).
One score, seven components, the whole index. Every name the relative-strength engine can rank — all of them this morning, and the header above always states the real figure rather than the size of the index — gets a 0–100 composite: relative strength (counted double), trend, volume, distance above its daily VWAP, its own dealer gamma, the market’s dealer gamma, and how well its options actually trade. The top 20 by that score are always on the page, and each of the seven is its own column, so the composite is a number you can check rather than one you have to trust.
The trend column is four readings averaged. Above its 50-day average, above its 200-day average, the 50 above the 200, and where its last month’s return ranks against the rest of the index. Averaged rather than ANDed, because the point of a column is to tell a name that has three of the four from a name that has none — and a reading that could not be taken is left out of the average rather than counted against the name. Sort by it, or by any other component, from the column heading.
Filters narrow the list. They cannot empty it. This used to be five rules ANDed together with the survivors printed, and twice in a row that was zero names out of five hundred — an empty page that could not tell you which rule ate the list. Now the eight filters decide which rows are marked as matching, and the table shows the top 20 by score either way. They open on RS 80 and the turnover floor with everything else switched off, so what you see first is the ranking rather than one opinion about it. Your settings live in the address bar, so a configuration can be bookmarked or sent to someone, and every change is applied in the browser to the snapshot the morning job stored — moving a control makes no network request at all.
Every row says why it is there, next to what to be careful about. The reasons are assembled from the components that actually scored highest, so the sentence and the columns cannot disagree, and when nothing scores strongly the line says exactly that rather than inventing a reason. The watch line beside it — earnings, extension, a contract graded Caution, negative dealer positioning — is rendered in the same size, on the same row, never behind a toggle.
The market regime is one component of seven. It was a per-name gate once, which was a category error with a real cost: one market-wide condition, identical for all five hundred names, blanked the page on every volatile morning. Being identical for everyone, it moves the whole list and never the order of it. It is also stated once in plain English at the top.
The contract filters, and deliberately does not score. Cboe answers a limited number of chains per window and the 08:30 gamma job has first call on them, so contracts are graded for the top 25 by score and nothing else. Making that grade part of the score would have meant the score deciding who got graded and the grade changing the score. It marks a row and cautions on it; it never moves a name up or down. Anything ungraded reads in grey — unknown, not failed.
A filter cannot fail a name it could not read. Dealer positioning comes from an option chain, and until recently chains were rationed — the free source answers about sixty per morning, so most of the index had no gamma reading and every one of those names “failed” the gamma and market filters. That is the request budget being reported as a fact about the market. Now an untestable filter counts neither way: the row says not tested beside the filters in question, its component column says no data, and the funnel reports how many of the survivors at each step were untested rather than folding them in. The header states how many of the scored names actually had gamma, every morning, whatever that number is.
Unknown is never folded into failed. A component that could not be measured — no chain pulled for that name, fewer than 200 daily bars, no volume history — shows a dash and is dropped from the blend rather than scored zero. Most of the index has no dealer-positioning reading at all, and scoring those absences as zero would rank the whole market below the few dozen names the morning job had budget for: a statement about this site’s request budget dressed up as a statement about stocks.
The VWAP here is a daily one, not the intraday one. It is the volume-weighted average price of the last twenty daily bars, not the session VWAP a trading platform draws from the opening bell. The session figure cannot be had for five hundred names without five hundred intraday requests every morning; this one costs nothing and comes from price history already stored. The column and its tooltip both say which it is.
Scoring the whole index costs nothing upstream. Every reading — the averages, the VWAP, the volume ratio, the turnover, the one-month percentile — comes from the relative-strength history this site already stores. The old scan pulled three bar series per candidate, which is why it could only ever look at the two dozen names that had already cleared a floor, and why the floor could never be one of these controls.
A ranking is an ordering, and nothing more. A name at the top of the table is the name nothing scored higher than. It is not a suggestion, the page does not say what to do about it, and there is no position size, target or stop anywhere on it. What this ranking has actually produced afterwards is a separate question, answered with numbers rather than assurances on the scanner track record page — every pick logged, winners and losers alike.
Nadaraya-Watson is a line on the chart and nothing else. It gates nothing and scores nothing. Current settings: bandwidth 8, lookback 499, multiplier 3. The band is computed on 1H and daily only — the bar source serves about half the window at the 4-hour interval, and edges measured over the wrong window are worse than no edges.