Volume Anomalies: The Earliest Signal That Smart Money Is Moving
4-section structure: Concept / How We Compute / How to Read / Caveats.
1. Concept
Price is the outcome, volume is the cause. Institutional money cannot enter without leaving volume footprints.
- Volume anomaly: today's volume is unusually high (≥ 2× the 20-day average) — signals large block buying or selling
- 52-week high: today's close sets a new 1-year high — buyers completely absorbed overhead supply
- 52-week low: today's close sets a new 1-year low — sellers crushed all bid support
- A/D Ratio: advancing / declining stocks — measures market breadth
These 4 signals are often more timely than charts — MAs, MACD, KD are lagging indicators, while volume and new highs/lows are coincident or even leading indicators.
2. How We Compute
2.1 Volume Anomaly
volume_ratio = today_volume / mean(vol_20d_excluding_today)
- Denominator: average over past 20 trading days (estimated via 30 calendar days) excluding today
- Threshold: default ×2.0 (today's volume = 2× the 20-day average)
- Site offers 4 quick thresholds: ×1.5 / ×2.0 / ×3.0 / ×5.0
Sample requirement: at least 10 trading days in the past 20 (to filter out newly-listed stocks with insufficient history).
2.2 52-Week High / Low
new_high = today_close >= max(close_252d) × 0.995
new_low = today_close <= min(close_252d) × 1.005
- 252 trading days ≈ 380 calendar days
- ±0.5% tolerance: avoids floating-point misses and technical gaps (e.g., missing a new high by 2 cents)
Sample requirement: at least 100 trading days in the past year.
2.3 A/D Ratio
A/D Ratio = advances / declines
advances: stocks with chg_pct > 0 todaydeclines: stocks with chg_pct < 0 today- Typically: A/D > 1.5 → broad rally; A/D < 0.67 → broad selling; near 1.0 → divergence
2.4 Caching Strategy
Whole ranking @cached(ttl=3600) (1-hour cache):
- Intraday (09:00-13:30): refreshes hourly to reflect latest volume changes
- After close: results are fixed, no need for repeated computation
3. How to Read
3.1 Volume × Direction: 4 Quadrants
| Volume | Change | Meaning | Next Step |
|---|---|---|---|
| ×5+ | +5%+ | Volume-up surge — aggressive institutional buying or news catalyst | Verify news, watch next-day continuation |
| ×5+ | −5%+ | Volume-down plunge — institutional selling or bad news | Warning — don't chase the bounce |
| ×2~5 | Mild up | Volume up, price up — healthy bull signal | Hold / enter |
| ×2~5 | Mild down | Volume up, price down — watch for reversal, possible ownership change | Watch 3-day bounce |
| ×2+ | ±1% | Volume spike with no direction — heavy ownership rotation at the same price | Danger signal (possible top or bottom pivot) |
3.2 Statistical Meaning of New Highs / Lows
In a trending market:
- Bull market: new highs : new lows = 10:1 or higher
- Bear market: new highs : new lows = 1:10 or lower
- Turning point: new highs suddenly drop from 50 → 5, new lows jump from 5 → 50 is a classic warning
The header shows:
- 52-week new highs count / % of market
- 52-week new lows count / % of market
Above 5% of the market = clear strong / weak signal.
3.3 Reading A/D Ratio
| A/D Range | Market State | Color |
|---|---|---|
| ≥ 1.5 | Broad rally | Deep red |
| 1.0 ~ 1.5 | Bullish divergence | Light red |
| 0.67 ~ 1.0 | Bearish divergence | Light green |
| < 0.67 | Broad selling | Deep green |
Critical application: index +1% but A/D = 0.8 → index pulled up by a few large-caps; most stocks are actually falling → breadth is actually weak.
3.4 Cross-Reading
- Volume spike + new high: strongest signal, institutional breakout confirmed
- Volume spike + new low: weakest signal, stop-loss cascade or bad news
- Volume spike + small chg_pct: ownership rotation within range, watch for direction
- New highs >> new lows + A/D > 1.5: clear bull market
- Both new highs and lows high + A/D ≈ 1: polarized market, stock-picker's market
4. Caveats
⚠️ Volume Ratio Is Relative, Not Absolute
×5.0 on a typically-quiet stock is more meaningful than ×5.0 on a daily-hot stock. Quiet stocks have low daily volume, so ×5 may still be 1% of an active stock. Always cross-reference with absolute volume (in millions).
⚠️ Ex-Dividend / Rights Days Cause False Signals
The reference price auto-drops on ex-dividend day. Even if the stock actually gains, the displayed chg_pct may be negative (unadjusted). New-low lists may mis-flag ex-dividend stocks.
Mitigate: currently unadjusted — if a stock "suddenly crashes to new low," verify whether it's ex-dividend day.
⚠️ New-Low List Explodes in Bear Markets
During 2024/8 crash, 2020/3 COVID, 300+ stocks may hit 52-week lows in one day. List only shows top 30 (worst-performing). Full list requires advanced query.
⚠️ Recently-Listed Stocks Lack Reference Period
Stocks listed < 252 trading days won't appear in new-highs/lows (insufficient sample). Some newly-listed small-caps may be missed.
⚠️ A/D Ratio Excludes Unchanged Stocks
Stocks with 0 change aren't counted. On very quiet market days with many non-traded stocks, A/D Ratio may be skewed.
⚠️ Volume "20 Days" Is Calendar-Day Approximation
Uses 30 calendar days ≈ 20 trading days (strict SQL window is expensive). After long holidays (Lunar New Year, national holidays), the average has slight baseline drift.
⚠️ Excludes After-Hours and Odd-Lot Volume
"Today's volume" only includes regular-session matched trades. Large-caps' true volume may be understated 10-20%.
Further Reading
- 4 Ways to Read the Heatmap (P1A.2)
- Market Breadth: Watching Trend-Line Stock Counts (P0.1)
Try It
- Open Anomaly Signals, toggle volume thresholds ×1.5 / ×2 / ×3 / ×5
- On strong days, check if A/D > 1.5 and new-highs % > 5%
- On weak days, see which sectors dominate the new-low list (often a leading indicator)
- Find a stock with ×5+ volume ratio, click through to see if the chart shows a volume-price breakout
- Click 📐 for formulas, sample requirements, 52-week tolerance settings