Five rules, the same way for every chart.
Every number on this site comes from a rule you can check by hand on a daily chart. Here is each rule, exactly as the scanner applies it, and everything it can't tell you.
1. The universe
The list starts from Nasdaq Trader's public symbol directories (nasdaqlisted.txt and otherlisted.txt), which cover every security listed on Nasdaq, NYSE and the other US exchanges. A row is kept when:
- It is not a test issue, not an ETF, and not a NextShares fund.
- It is a plain ticker: 1–5 letters, or 1–4 letters plus a class letter (
BRK.B). Preferreds ($) and.U/.W/.Rsuffixes are out. - Its name does not describe a warrant, SPAC unit or right, note, ETN, debenture, coupon, bond or preferred.
- Common stock, ordinary shares, ADRs / ADSs, shares of beneficial interest and partnership or trust units are in.
On a typical night that leaves about 5,900 symbols. The universe is rebuilt roughly weekly.
2. The liquidity floor
A chart is only scanned if its last close is at least $5, at least 1,000,000 shares traded in the last session, and it has at least 30 sessions of daily history. That usually leaves 1,400–1,600 charts. The floor exists because a pattern on a stock you can't get in and out of cleanly isn't worth reading.
3. The five setups
All five are computed on daily closes only — Yahoo's batch endpoint doesn't return daily highs and lows. A chart can match more than one; two or more is flagged as confluence.
| Setup | The rule, on closes |
|---|---|
| 20-day breakout | The last close is above every close of the 20 sessions before it. |
| Bull flag | Up more than 10% over the 10 sessions before the last 5 (close 6 sessions ago vs. 16 sessions ago), then the last 5 closes all sit inside a 5% range. |
| Reclaimed 20-day avg | The previous close was below its 20-day average and the last close is above the current 20-day average. |
| Oversold | RSI 14 (Wilder's smoothing) under 30. |
| Oversold bounce | RSI 14 was under 30 one session earlier, and the last close was higher than the one before. |
A closing-high breakout fires more often than an intraday-high one: a stock can close at a 20-day high without trading above its 20-day intraday high. Results are listed most traded first (last close × last session's volume).
4. Activity and replay
Each scan is saved as a snapshot. The activity log compares every scan with the one before it: NEW when a chart starts matching, CHANGED when its setups change, DROPPED when it stops matching. Replay shows a past scan's list against the latest close — a plain close-to-close change, with no entry rules, stops, costs or slippage. It is a record of what was listed, not a simulation of trading it.
5. Breakout alerts
After each nightly scan, up to 150 candidates get a breakout level: the highest daily high of their last 20 sessions. Candidates come from your own alert list first, then charts on two or more setups, bull flags, 20-day breakouts and 20-day average reclaims, most traded first.
Every 5 minutes during the session, each candidate's 5-minute bars are checked. Only completed bars count, and an alert needs all three:
- 20-day high: a bar closes at least 0.1% above the level. Opening range: after the first 15 minutes, a bar closes at least 0.1% above that range's high (your list plus the top confluence names, until 3:30 p.m.).
- Volume: that bar traded at least 1.5× the average volume of the same 5-minute slot over the previous sessions. A break without volume waits for a bar that has it.
- Once a day: each ticker alerts once per trigger per session. Breakouts found more than 45 minutes after their bar are recorded on the site but not posted.
Alerts go to Discord with the price, the level, the volume multiple and a TradingView chart link, and appear in the Live section of the home page. The checks run on GitHub's scheduler, which can start a few minutes late, so an alert can arrive several minutes after its bar. A breakout is a description of a bar, not a buy signal; many fail within the hour.
6. Data and timing
- Prices are Yahoo Finance's free chart data: unofficial, delayed, occasionally missing or wrong. The broker's price is the one that would fill.
- The scan runs on completed daily closes. It describes the last session, not the market right now; the timestamp on each page names the close.
- Run during market hours, the volume floor would see a partial day, so the published scan is run after the close or before the open.
- NYSE holidays and 1:00 p.m. early closes for 2026–2027 are built into the clock.
What it can't tell you
A setup describes what a chart did. It does not predict what it will do, and many breakouts fail. The scan doesn't know about earnings dates, news, halts, sector moves, or your account. A matched chart is a place to start reading, not a decision.
Most people who day trade lose money. Nothing here changes that.
Run it yourself
The scan on this site is produced by the open-source day-trader-skill pack for Claude (MIT). Installed as Claude skills, the same tools also cover an intraday opening-range breakout scan, news and SEC 8-K tracking, entry timing, exit planning, position sizing and a risk check.
- Nightly: run
scan.py daily, thenpython scripts/build_data.pyin this site's folder, then redeploy. The site updates itself from the JSON it writes. - Paper first: the broker step defaults to an Alpaca paper account, and every order needs a risk-check PASS plus your explicit yes for that one order.
- Keys stay out of chat: broker keys belong in environment variables or your app config, never pasted into a conversation.