apps2 · stocks

stock screener — themes · volume-spike · RSI · multi-timeframe divergence · price-action patterns · P/E · hot/cold tape & normalized lines hubstockscryptosectorscohortsdecoupfundamentals screener + tape/line over the shared stock archive
Data: shared static archive at ../../apps/stocks/data (Yahoo, ≤~30-min fresh via quote_refresh.php). Never fetches Yahoo from the browser.
Stocks — normalized lines (selected subset vs SPX/NAS100) Each line = one ticker from the CURRENT filtered set, normalized so different-priced stocks compare on ONE axis. Impulse z (default) = σ vs the visible window mean (best for divergence); full stretch to fit = each line 0→1 across the window (shape); % change = from the window start. SPX (SPY) + NAS100 (QQQ) baselines are solid, dark and NEVER muted (Bold baselines thickens them). This is a selectable subset — the top-N by the table's active sort (a 500-line chart is spaghetti) plus any ticker you click in the hot/cold tape below; each is individually toggleable (Select / Deselect all). Click a line to identify it (dims the others); click empty space to dismiss; shift-click = all-series dateline. Retail P/C reference rides its own right scale. Re-frame with the zoom presets / View(bars) / drag-pan (shared with the tape).
loading tickers…
Select all Deselect all Clear pinned Bold baselines Vol regime Retail P/C ref
Stocks hot/cold tape — red = hot/stretched · blue = cold/washed-out Each row = one ticker from the CURRENT filtered set (capped at 120 — tighten filters to see fewer); each cell colors that date on ONE shared diverging ramp. DEEP RED = HOT (stretched high vs the mode's reference), DEEP BLUE = COLD, pale = normal. Cell coloring re-labels the ramp per lens (the mandatory 4 + 2): own history (default) · cross-sectional rank (vs the whole board that day) · vs SPX · vs NAS100 · all-ticker %-move · vs own mean. Sort rows re-orders by the dateline-selected column (click a cell to pick it; none = latest bar). Click a ticker's cells to pin it into the line chart above. Heatmaps expose relative rotation across history that overlapping lines cannot — that is why it accompanies the line chart. Shares the View(bars) / drag-pan with the line chart.
Whisper quadrant — volume-move (vol z) vs price-move (price z), short vs long horizon The user's own triangulation example ("volume-Δ vs price-Δ over 1h vs 1 month") on the deep stock archive. Each ticker in the CURRENT filtered set (capped 120) is placed by x = price-move z (how unusual its horizon return is vs its own history) and y = volume-move z (how unusual its horizon average volume is vs its own history). FILLED dot = short horizon, hollow dot = long horizon, hairline = the drift between them. Position = co-occurrence of the two moves — the two z's are shown POSITIONALLY, never multiplied into one score. The four quadrants read: top-right up on rising volume (confirmation) · top-left down on rising volume (distribution / capitulation) · bottom-right up on quiet volume (thin rally) · bottom-left down on quiet volume (quiet fade). Click a dot to pin that ticker into the line chart above. The ranked table below carries each ticker's exact vol z, its OWN-history percentile + n, cross-sectional rank, price z, and a distribution rail (R-UI-30).

Stock Screener

universe visible fetched Collection: Preset: AI prompt → tick ✓ rows, then: source: —
24h % 7d % 30d % 90d % 1y % 5y % mcap M$
How these volume / RSI / divergence filters work
Min/max rangesEach box below is a min/max range — leave a side blank to ignore it. A stock passes only if it sits inside every range you set.
vol×30dtoday's volume ÷ its 30-day average. 1 = normal, 2 = double the usual (often earnings/news), 0.5 = quiet. How to use: set min 2 to surface names with sustained above-normal flow ("in play"); use max to drop blow-off extremes.
vol Δ1today's volume ÷ yesterday's. The fastest spike detector — catches a surge before the 30-day average absorbs it, but noisier (a quiet prior day inflates it). How to use: min 3 = today triples yesterday; min 5 = cleanest one-day spikes.
vol Δ3today's volume ÷ the average of the last 3 days. Smoother — confirms a real surge rather than a one-bar blip against an unusually quiet baseline. How to use: pair vol Δ3 min ≈2 with vol Δ1 to weed out false spikes.
RSI Ddaily 14-period RSI (momentum, 0–100). <30 oversold, >70 overbought. How to use: max 35 → oversold bounce candidates (longs); min 70 → extended/overbought rallies; min 45 max 55 → coiling, neutral names building energy.
RSI divprice and momentum disagree (a reversal warning). 🟢 Bullish = price makes a lower low while RSI makes a higher low (selling exhausting → bounce). 🔴 Bearish = price higher high while RSI lower high (rally tiring → pullback). How to use: each colour is any / require (only show names that have it) / exclude (hide them); the tf dropdown scopes that to one candle range (1h/2h/4h/8h/D/W/M), or any tf = fired on any frame.
OBV divthe same divergence logic on On-Balance Volume (running signed volume) instead of RSI. Volume-confirmed, so it's higher-conviction when it agrees with an RSI divergence — require both for the strongest signals.
⚙ Div calctunes how divergence is detected and updates every 🟢/🔴 tag + the two divergence filters live: RSI period (7 = more & faster, 21 = fewer & cleaner) · pivot sensitivity (2 = more, smaller swings → more signals; 5 = only major swings) · depth = how far back each timeframe scans (short = fresher, deep = more & older) · TF = which candle ranges to scan. Defaults (RSI 14 · pivot 3 · standard · 1h/2h/4h/D/W) are the most common, and your changes are remembered in this browser.
Volume surge vol×30d vol Δ1 vol Δ3 Momentum & divergence RSI D RSI div: ⚙ divergence settings:  TF OBV div:
PA pattern: PA type: PA tf: PA dev%≤ % anchor age%≤ % min touches≥ strictness break within bars Freshness latest pt ≤ % from price latest pt age ≤ % of len
Region: Sector: Industry: Theme:
Port lineageapps2/stocks · port of v1 /apps/stocks (apps2-supersedes-apps), re-skinned to the apps2 Swiss design.
Same screener mechanicbuildRow metrics, table / pattern-grid / compare views, multi-timeframe RSI + OBV divergence, price-action pattern detection with TradingView Pine export, filters + presets, detail modal.
P/E column (trailing + forward)Trailing P/E (price ÷ TTM EPS) where the company is profitable; loss-making names show FORWARD P/E marked "f". Dash = no trailing earnings and no positive forward estimate (or an ETF).
Tape + line pairthe MANDATORY tape + line overview pair (arch law §1.10 / R-UI-22) computed from the SAME per-ticker archive.
Archive read in placereads the archive IN PLACE at ../../apps/stocks/data (universe.json + daily/hourly candles + pe.json).
Freshnesspings quote_refresh.php for ≤~30-min freshness; keeps the ?source=local override.
No browser fetchnever calls Yahoo/CC from the browser.
BaselinesSPX baseline = SPY, NAS100 baseline = QQQ (index tickers aren't in the equity archive).