Aandelen met ongebruikelijk volume deze week
Overzicht van aandelen met een ongebruikelijk volume deze week. De rangschikking is gebaseerd op de turnover versus de voorgaande veertig sessies en de returns.
Ongebruikelijke volume betekent dat een aandeel veel meer handelt dan zijn eigen normale volume, niet dat van de markt. Een megacap met een volume van 40 miljoen shares is een normale dag; een small-cap met dat volume is een gebeurtenis. Deze pagina rangschikt de aandelen met een ongebruikelijk volume van de afgelopen week: het gemiddelde volume van de laatste vijf sessies gedeeld door het eigen gemiddelde over de voorafgaande veertig sessies, met een bodem in dollars zodat elke rij een aandeel is dat daadwerkelijk verhandelbaar is. De gegevens worden wekelijks bijgewerkt en de "data as of"-aanduiding geeft de tijdsperiode aan. De meting zelf — relative volume — heeft een eigen volledige gids.
De leiders met een ongebruikelijk volume van deze week
Drie kolommen bepalen de resultaten. De multiple geeft aan hoe ver een aandeel boven zijn eigen gemiddelde handelde. De baseline geeft het normale niveau aan. Een hoge multiple ten opzichte van een lage baseline is een minder belangrijke gebeurtenis dan een bescheiden multiple ten opzichte van een hoge baseline. De dollars geven aan of de activiteit economisch relevant was. De laatste kolom, de verandering van opening naar sluiting in de week, wordt door de meeste volume-screens weggelaten.
De exacte SQL achter elk getal
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars,
argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
argMaxIf(s.day_open, c.rn, c.rn <= 5) AS week_open,
argMinIf(s.day_close, c.rn, c.rn <= 5) AS week_close,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
)
SELECT ticker,
round(adv_recent / adv_base, 1) AS rvol_week,
round(adv_recent / 1e6, 2) AS recent_adv_m,
round(adv_base / 1e6, 2) AS baseline_adv_m,
round(dollar_recent / 1e9, 2) AS week_dollar_bn,
round(100.0 * (week_close / week_open - 1), 1) AS week_pct
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 8Elke rij, in volgorde gelezen:
- JLHL — 99.2x de eigen norm, de koploper op de lijst: 16.95M aandelen per dag tegenover een baseline van 0.17M, $0.68B verhandeld, en een verandering van opening naar sluiting van 160.6%.
- AGEN — 41.1x op een baseline van 0.62M aandelen, met $0.88B aan turnover; de verandering over de week was 54.3%.
- IONS — 4.7x, maar op een lage baseline van 1.43M aandelen en slechts $2.1B aan turnover; de verandering over de week was -19.6%.
- ALNY — 2.3x, 1.91M aandelen per dag tegenover de normale 0.83M; -26.2% van opening naar sluiting.
- BBIO — 2.1x, $2.25B verhandeld, -0.2% over de week.
- MULL — 2.1x op een baseline van 1.96M aandelen, $0.52B verhandeld, -22.8% van opening naar sluiting.
- HLI — 1.9x, 0.9M aandelen per dag, $0.61B; de verandering over de week was 5.6%.
- QGEN — de achtste en laatste rij, op 1.8x met $0.76B verhandeld en een verandering van 8.7%.
De richting is geen onderdeel van de rangschikking. De twee kolommen aan de rechterkant maken dit duidelijk: de koploper op de lijst eindigde de week 160.6% vanaf de opening, terwijl de achtste naam eindigde op 8.7% vanaf de eigen opening. Een hoog volume markeert de sessies waarin de float van een aandeel echt wordt getest; het zegt niets over welke zijde van die test heeft gewonnen.
Hoe de multiple wordt berekend
Neem een aandeel met een gemiddeld handelsvolume van 200.000 aandelen per dag over de voorgaande veertig sessies. In de afgelopen week wordt er 1.000.000, dan 1.400.000, dan 900.000, dan 1.100.000, en dan 600.000 aandelen verhandeld — een gemiddelde over vijf sessies van 1.000.000. De berekening is: 1.000.000 ÷ 200.000 = 5.0x. Gebruik voor hetzelfde aandeel een baseline van twee miljoen aandelen en dan is het resultaat voor diezelfde week 0,5x. De teller is de huidige week; de noemer is het normale handelsvolume van het aandeel. (De noemer is simpelweg de gemiddelde dagelijkse volume, gemeten over veertig sessies in plaats van de gebruikelijke twintig.)
Waarom veertig sessies? Dit beslaat ongeveer twee kalendermaanden. Dit is lang genoeg zodat één eerdere piek de noemer niet domineert, maar kort genoeg om het huidige handelsgedrag van het aandeel te beschrijven. Waarom vijf voor de teller? Dit is een volledige week, zodat een enkele handelspauze of een eenmalige block trade het resultaat niet bepaalt.
De berekening bevat een belangrijke waarschuwing: hoe lager de baseline, hoe goedkoper de multiple. De koploper van deze week heeft een baseline van slechts 0.17M aandelen per dag. Bij een dergelijke omvang trekt één sessie met een hoog volume het volledige weekgemiddelde omhoog. Dit is precies de reden waarom de board een baseline van zes cijfers en een weekvolume van $500M vereist voordat een aandeel kan worden opgenomen.
Hoe zeldzaam is een week als deze?
Een multiple heeft alleen betekenis in verhouding tot de distributie waaruit deze voortkomt. Dezelfde universe, hetzelfde tijdsvenster, waarbij elke in aanmerking komende naam is ingedeeld op basis van zijn multiple:
De exacte SQL achter elk getal
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
scored AS (
SELECT ticker,
multiIf(adv_recent / adv_base >= 10, 1,
adv_recent / adv_base >= 5, 2,
adv_recent / adv_base >= 3, 3,
adv_recent / adv_base >= 2, 4,
adv_recent / adv_base >= 1.5, 5,
adv_recent / adv_base >= 1, 6, 7) AS bucket_key
FROM per_name
),
buckets AS (
SELECT arrayJoin([(1, '10x or more'), (2, '5x to 10x'), (3, '3x to 5x'), (4, '2x to 3x'),
(5, '1.5x to 2x'), (6, '1x to 1.5x'), (7, 'below 1x')]) AS bk
)
SELECT bk.2 AS rvol_bucket,
countIf(scored.bucket_key = bk.1) AS names,
round(100.0 * countIf(scored.bucket_key = bk.1) / count(), 1) AS pct_of_universe,
count() AS universe_names
FROM scored CROSS JOIN buckets
GROUP BY bk
ORDER BY bk.1 ASC647 aandelen en ETF's lieten deze week de vloer zien. Daarvan handelden 2 tegen tien keer hun eigen norm of meer — 0.3% van de universe. Een andere 0 viel in de 5x-tot-10x categorie en 1 in de 3x-tot-5x categorie. De bovenstaande ranglijst is samengesteld uit dit selecte topsegment. Daaronder handelden 3 namen tegen 2x tot 3x hun eigen norm (0.5% van de universe) en 5 viel in de 1,5x-tot-2x band (0.8%). Een verdere 19 zat op een slechts licht verhoogde 1x tot 1,5x, 2.9% van de in aanmerking komende namen.
Het andere uiteinde van de tabel is het deel dat niemand screenshot: 617 namen — 95.4% van de universe — handelden deze week onder hun eigen gemiddelde van veertig sessies. Dat is de normale staat van de markt, en dat is wat de top van de lijst een echte outlier maakt in plaats van een afrondingsfout.
Blijft ongewoon volume bestaan?
De algemene opvatting is dat ongewoon volume dagenlang aanhoudt. Een aandeel dat bovenaan een lijst als deze staat, heeft zijn beweging meestal al voltooid. Dit is toetsbaar. Voor elk van de acht koplopers geldt: in hoeveel van de vijf sessies lag het volume op het dubbele van de baseline of hoger, hoe groot de zwaarste individuele sessie was, en hoeveel sessies er tussen die zwaarste sessie en de laatste sessie van de week lagen.
De exacte SQL achter elk getal
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leaders AS (
SELECT ticker, adv_recent / adv_base AS rvol_week, adv_base
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 8
),
daily AS (
SELECT l.ticker AS ticker,
l.rvol_week AS rvol_week,
c.rn AS rn,
s.vol / l.adv_base AS rvol_day
FROM sess s
INNER JOIN cal c ON s.d = c.d
INNER JOIN leaders l ON s.ticker = l.ticker
WHERE c.rn <= 5
)
SELECT ticker,
round(max(rvol_week), 1) AS week_rvol,
countIf(rvol_day >= 2) AS days_above_2x,
round(max(rvol_day), 1) AS peak_day_rvol,
argMax(rn, (rvol_day, -rn)) - 1 AS sessions_since_peak
FROM daily
GROUP BY ticker
ORDER BY days_above_2x ASC, peak_day_rvol ASC, ticker ASCGesorteerd op persistentie, behaalde het minst persistente aandeel op de lijst, HLI, twee keer de baseline in 1 van de vijf sessies, met een piek van 6.2x. Het meest persistente aandeel, JLHL, deed dit in 3 van de vijf sessies, met een piek van 404.6x. Dit zijn gebeurtenissen over meerdere sessies, geen enkele transactie — dit is de mechanische reden waarom een wekelijkse lijst en een dagelijkse lijst vaak dezelfde aandelen tonen.
De laatste kolom betreft de timing: het aantal sessies tussen de zwaarste dag en de laatste sessie van de week — 4 voor HLI, 4 voor JLHL. Waar dit gat groter is dan nul, vond de hoogste activiteit al plaats voordat de week eindigde. De lijst beschrijft de afgelopen week; het is geen voorspelling voor de nieuwe week.
De vijftien sessies van de koploper, dag voor dag
Het wekelijkse gemiddelde verhult de werkelijke vorm. Hieronder vindt u het dagelijkse relative volume van de huidige koploper — het aantal aandelen per sessie ten opzichte van dezelfde baseline van veertig sessies — naast de open-to-close verandering per sessie over de laatste vijftien sessies:
De exacte SQL achter elk getal
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars,
argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS day_open,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND dollar_recent >= 500000000 AND recent_sessions = 5 AND base_sessions >= 35
),
leader AS (
SELECT ticker, adv_base
FROM per_name
ORDER BY adv_recent / adv_base DESC, ticker ASC
LIMIT 1
),
path AS (
SELECT formatDateTime(s.d, '%Y-%m-%d') AS session_date,
formatDateTime(s.d, '%b %e') AS session_label,
s.vol / l.adv_base AS rvol_day,
100.0 * (s.day_close / s.day_open - 1) AS day_pct
FROM sess s
INNER JOIN cal c ON s.d = c.d
INNER JOIN leader l ON s.ticker = l.ticker
WHERE c.rn <= 15
)
SELECT session_date,
session_label,
round(rvol_day, 1) AS rvol_day,
round(day_pct, 1) AS day_pct,
round(max(rvol_day) OVER (), 1) AS peak_rvol_day
FROM path
ORDER BY session_date ASCVijftien sessies geleden handelde het aandeel op 0.5x de baseline — een gewone, rustige naam. De zwaarste sessie in deze periode bereikte 404.6x. In de meest recente sessie, Jul 15, was het volume nog steeds 0.7x met een open-to-close verandering van -3.5%.
Let op wat de grafiek niet doet: een ordelijke, lineaire afname. Verhoogd volume komt in clusters voor, en de sessies na een piek kunnen opnieuw versnellen in plaats van afnemen. Dit is een reden waarom de bewering dat "het volume opdroogt" gecontroleerd moet worden aan de hand van de dagelijkse reeks, in plaats van dit louter aan te nemen. Dezelfde dagelijkse reeks is de basis voor een intraday tempo-meting, zoals die is opgebouwd in de relative volume guide en wordt gebruikt door VWAP.
Wat de filters uiteren
Vier regels zorgen voor de integriteit van de lijst. Elke regel sluit gegevens uit die een lezer wellicht wil zien:
- Een minimale handelsvolume van $500M voor de week. Alleen het aantal aandelen zou een lijst vullen met namen waarbij een miljoen aandelen verwaarloosbaar is.
- Een baseline boven de 100.000 aandelen per dag, zodat de noemer een betekenisvol getal is en geen afrondingsfout.
- Ten minste 35 van de voorgaande 40 handelsdagen, wat nieuwe beursgangen uitsluit. Een recente IPO heeft geen betekenisvolle "normaalwaarde" om door te delen, anders zou deze de lijst wekenlang domineren.
- Uitsluiting van een hergebruikt symbool: een ticker die de beurzen onlangs aan een nieuwe listing hebben toegewezen, waardoor de historische gegevens van de leverancier twee verschillende bedrijven combineren. De baseline hiervan zou fictief zijn.
Regel 1 is de regel die de meest extreme multiples uit de lijst verwijdert. Hier zijn de zes grootste die hierdoor zijn uitgesloten:
De exacte SQL achter elk getal
WITH sess AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol,
sum(toFloat64(close) * toFloat64(volume)) AS dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 70 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker NOT IN ('SPCX')
GROUP BY ticker, d
),
cal AS (
SELECT d, row_number() OVER (ORDER BY d DESC) AS rn
FROM (SELECT DISTINCT d FROM sess)
),
per_name AS (
SELECT s.ticker AS ticker,
avgIf(s.vol, c.rn <= 5) AS adv_recent,
avgIf(s.vol, c.rn BETWEEN 6 AND 45) AS adv_base,
sumIf(s.dollars, c.rn <= 5) AS dollar_recent,
countIf(c.rn <= 5) AS recent_sessions,
countIf(c.rn BETWEEN 6 AND 45) AS base_sessions
FROM sess s INNER JOIN cal c ON s.d = c.d
GROUP BY s.ticker
HAVING adv_base > 100000 AND recent_sessions = 5 AND base_sessions >= 35
AND dollar_recent > 0 AND dollar_recent < 500000000
)
SELECT ticker,
round(adv_recent / adv_base, 1) AS rvol_week,
round(dollar_recent / 1e6, 1) AS week_dollar_m,
round(dollar_recent / (adv_recent * 5), 2) AS avg_share_price,
round(adv_base / 1e6, 2) AS baseline_adv_m
FROM per_name
ORDER BY rvol_week DESC, ticker ASC
LIMIT 6SOBR handelde op 109.8x de eigen norm, maar had de hele week slechts een volume van $262.4M bij een gemiddelde koers van $1.04. Daaronder: ZBAO op 109.3x op $72M (gemiddelde koers $0.44), WRAP op 51.8x op $162.5M, CPHI op 38.1x op $31.8M, KAPA op 36.7x op $9.5M, en LGPS op 20.2x op $57.5M. Reële activiteit, wat zeer ongebruikelijk is voor deze namen — en een categorie waarbij de multiple een zeer klein bedrag aan geld flattert.
Waar ongebruikelijke volumes vandaan komen
De terugkerende veroorzakers, waardoor het orderboek sneller beweegt: earnings weeks, de geplande bron; corporate events — fusies, emissies, index-toevoegingen en -verwijderingen — die mechanisch volume met zich meebrengen zonder dat dit met meningen te maken heeft; squeeze dynamics, waarbij volume wordt opgebouwd bovenop de prijsversnelling, het patroon dat de uitleg over short squeeze beschrijft; en new listings, die de handel domineren totdat de float is uitgebalanceerd. Het orderboek van een willekeurige week is meestal een mix, aangevuld met één of twee echte mysteries — en die mysteries zijn de rijen die de extra minuut waard zijn.
Veelgestelde vragen over ongebruikelijke volume
Wat wordt beschouwd als ongebruikelijk volume voor een aandeel?
Er is geen officiële drempelwaarde. Gebruik de volgende verdeling: van de 647 namen die deze pagina deze week passeren, handelde slechts 2 op 10x hun eigen norm of meer, en 95.4% handelde zelfs onder hun eigen gemiddelde. Alles boven ongeveer 2x behoort in een gegeven week al tot de hoogste percentages van de markt.
Is ongebruikelijk volume bullish of bearish?
Geen van beide — het duidt op aandacht, en aandacht ontstaat bij zowel rallies als instortingen. Deze week sloot de koploper van de lijst 160.6% van de vijf sessies vanaf de opening, en de achtste naam sloot 8.7%; beide kwamen precies op dezelfde meting uit.
Hoe lang duurt ongebruikelijk volume?
Meestal langer dan één dag. Het persistentiepaneel telt de sessies van elke naam op het bord die meer dan twee keer de baseline bedragen: deze week lopen deze van 1 van vijf (HLI) tot 3 van vijf (JLHL), en de zwaarste sessie vindt doorgaans plaats voordat de week eindigt, in plaats van op de laatste dag.
Waarom gebruikt de lijst een dollar-volume floor?
Een scan op basis van het aantal aandelen zonder drempelwaarde raakt vol met goedkope tickers waarbij de factor enorm is, maar het geld dat wordt verhandeld dat niet: de grootste uitgesloten naam van deze week handelde 109.8x zijn norm op $262.4M totaal, tegen een gemiddelde prijs van $1.04 per aandeel. De wekelijkse floor van $500M zorgt ervoor dat elke rij op het bord economisch relevant blijft.
Komt ongebruikelijk aandelenvolume ook voor op de optiemarkt?
Vaak wel — een zware equity tape en een zware optie-tape verschijnen meestal tegelijkertijd bij dezelfde namen, wat de reden is dat traders naar beide kijken. De optie-activiteit wordt echter anders gemeten: het aantal verhandelde contracten is een flow-getal, terwijl open interest de posities telt die nog openstaan. Deze twee beantwoorden verschillende vragen — zie optie volume vs. open interest voordat u conclusies trekt uit een "unusual options activity" alert.
Elk bovenstaand getal is een opgeslagen, versiespecifieke query — open de SQL onder elk paneel om de exacte meting te zien, of voer dezelfde scan uit over een willekeurige periode op de Strasmore terminal.