Strasmore Research
Marktoverzichten Matt ConnorDoor Matt Connor · Bijgewerkt 2026-09-05 · data as of September 5, 2026 · refreshed weekly

Grootste stijgers en dalers op de aandelenmarkt 2026

Bekijk de best presterende aandelen en grootste verliezers van 2026 op basis van de exchange tape. Deze ranglijst filtert leveraged fondsen en aandelensplitsingen voor meer inzicht.

De best presterende aandelen van 2026
De best presterende aandelen van 2026 worden tot dusver aangevoerd door SNDK, met een stijging van 536.4% vanaf de openingssessie van het jaar tot aan de meest recent voltooide handelssessie. Deze pagina rangschikt de grootste stijgers en dalers van 2026 onder aandelen die daadwerkelijk worden verhandeld, gemeten op basis van de exchange tape in plaats van een samenvatting van een dataleverancier. De lijst wordt gedurende het jaar ververst. Aandelensplitsingen en leveraged fondsen zijn uit de data gefilterd voordat de rangschikking is opgesteld; dit is het punt waarop de meeste year-to-date lijsten in de praktijk vaak tekortschieten.

Grootste stijgers op de aandelenmarkt in 2026

Elke naam hieronder voldeed aan een liquiditeitsdrempel voordat deze werd gerangschikt: gemiddeld ten minste 100 miljoen dollar aan aandelen die per voltooide sessie in de afgelopen maand van eigenaar wisselden. Een hoog percentage bij een aandeel waarin nauwelijks wordt gehandeld, is slechts een koersindicatie, geen resultaat.

QueryGrootste stijgers van 2026: top tien year-to-date onder de meest verhandelde namen
tickerytd return (%)gem. dagelijks volume ($ mln)
SNDK536.415431
MRNA3995598
TWST305.4202
DELL301.83566
TXG287.5142
AEHR262.8208
MXL233.4114
AXTI226.9525
MU224.820455
AMLX183.5131
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT e.ticker AS ticker,
    round((e.latest_close / e.year_open - 1) * 100, 1) AS ytd_return_pct,
    round(u.adv / 1e6, 0) AS avg_daily_dollar_m
FROM edges AS e
INNER JOIN universe AS u ON e.ticker = u.ticker
WHERE e.year_open >= 10
ORDER BY (e.latest_close / e.year_open) DESC
LIMIT 10
Voer het zelf uit

SNDK voert het jaar aan met 536.4%, gevolgd door MRNA op 399% en TWST op de derde plaats met 305.4%. De nummer tien op het bord, AMLX, staat nog steeds 183.5% in de plus, waardoor de gehele tabel ver vooruitloopt op elke brede index.

De dollar-kolom naast elke koersbeweging bevat evenveel informatie als het percentage. AMLX heeft een gemiddelde omzet van ongeveer 131 miljoen dollar per dag. SNDK, bovenaan het bord, noteert gemiddeld 15431 miljoen dollar. Elke naam hier haalt de 100 miljoen dollar per dag, en de bandbreedte boven die drempel is groot genoeg om aan te tonen dat hetzelfde headline-percentage aan beide uiteinden iets anders betekent. Een aandeel met een lage liquiditeit is makkelijker omhoog te duwen en moeilijker te verkopen tegen de prijs die op het scherm staat.

Grootste verliezers op de aandelenmarkt van 2026

Dezelfde maatstaf, maar dan omgekeerd: de scherpste dalingen year-to-date onder namen die aan dezelfde liquiditeitsdrempel voldoen.

QueryGrootste dalers van 2026: slechtste tien year-to-date onder de meest verhandelde namen
tickerytd return (%)gem. dagelijks volume ($ mln)
TTD-60.5192
WING-54.4103
APP-54.11257
CSGP-52.8144
FLUT-52.7140
STLA-51.5105
BSX-51763
KLAR-50.4145
RBLX-49.1303
JOBY-48.8153
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT e.ticker AS ticker,
    round((e.latest_close / e.year_open - 1) * 100, 1) AS ytd_return_pct,
    round(u.adv / 1e6, 0) AS avg_daily_dollar_m
FROM edges AS e
INNER JOIN universe AS u ON e.ticker = u.ticker
WHERE e.year_open >= 10
ORDER BY (e.latest_close / e.year_open) ASC
LIMIT 10
Voer het zelf uit

De scherpste daling year-to-date is voor TTD met -60.5%, gevolgd door WING met -54.4%. Op de tiende plaats staat JOBY met -48.8%. Verschillende namen in deze lijst zijn grote, veelgehouden ondernemingen in plaats van speculatieve micro-caps; dat is het deel van een verliezerslijst dat mensen vaak verrast. Liquiditeit en analistendekking bieden geen bodem voor een aandelenkoers. Iedereen die een van deze aandelen als een buitenproportioneel deel van een portefeuille aanhield, kreeg de volledige beweging mee, wat de pagina risico van het aanhouden van één aandeel meet met volatiliteits- en drawdown-cijfers.

Hoeveel van de markt staat in 2026 in de plus

Een ranglijst toont alleen de twee uitersten. Het marktbreedte-overzicht toont het middensegment: hoe het volledige gescreende universum, inclusief indexfondsen, zich verdeelt tussen stijgers en dalers, ingedeeld naar de omvang van de koersbeweging.

QueryYear-to-date breadth: verdeling van het gescreende universum over rendementscategorieën
bucketnamenside share (%)
Down 40%+1835.5
Down 20-40%6935.5
Down 10-20%7835.5
Down 0-10%16235.5
Up 0-10%15264.5
Up 10-25%19864.5
Up 25-50%14264.5
Up 50%+10364.5
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN toDate('2026-01-01') AND today())
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
rets AS (
    SELECT e.ticker AS ticker, (e.latest_close / e.year_open - 1) * 100 AS ret
    FROM edges AS e
    INNER JOIN universe AS u ON e.ticker = u.ticker
    WHERE e.year_open >= 10
)
SELECT bucket,
       names,
       round(100 * sum(names) OVER (PARTITION BY side) / sum(names) OVER (), 1) AS side_share_pct
FROM (
    SELECT tup.1 AS bucket, tup.2 AS names, tup.3 AS ord, tup.4 AS side
    FROM (
        SELECT arrayJoin([
            ('Down 40%+',   countIf(ret < -40),               1, 'down'),
            ('Down 20-40%', countIf(ret >= -40 AND ret < -20), 2, 'down'),
            ('Down 10-20%', countIf(ret >= -20 AND ret < -10), 3, 'down'),
            ('Down 0-10%',  countIf(ret >= -10 AND ret < 0),   4, 'down'),
            ('Up 0-10%',    countIf(ret >= 0 AND ret < 10),    5, 'up'),
            ('Up 10-25%',   countIf(ret >= 10 AND ret < 25),   6, 'up'),
            ('Up 25-50%',   countIf(ret >= 25 AND ret < 50),   7, 'up'),
            ('Up 50%+',     countIf(ret >= 50),                8, 'up')
        ]) AS tup
        FROM rets
    )
)
ORDER BY ord
Voer het zelf uit

64.5% van de gescreende namen staat dit jaar hoger en 35.5% staat lager. De verdeling is wat een tabel met de top tien verbloemt. 18 namen bevinden zich in de Down 40%+-categorie aan de ene kant en 103 in de Up 50%+-categorie aan de andere kant, tegenover 162 in Down 0-10% en 152 in Up 0-10% aan weerszijden van onveranderd. Het grootste deel van de markt vertoont in elk willekeurig jaar een doorsnee prestatie; de namen in de bovenstaande twee tabellen vormen de uitzondering waaruit de gemiddelden zijn opgebouwd.

De huidige marktpositie

Het jaar van een individueel aandeel oogt anders dan dat van de markt als geheel. De vier belangrijkste index-ETF's over exact dezelfde periode:

QueryDe vier belangrijkste index ETFs, year-to-date, over dezelfde meetperiode
labelytd return (%)gemeten vanafgemeten t/m
Russell 2000 (IWM)19.22026-01-022026-09-03
Nasdaq 100 (QQQ)15.72026-01-022026-09-03
S&P 500 (SPY)12.72026-01-022026-09-03
Dow (DIA)11.42026-01-022026-09-03
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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 IN ('SPY', 'QQQ', 'DIA', 'IWM')
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
)
SELECT multiIf(ticker = 'SPY', 'S&P 500 (SPY)', ticker = 'QQQ', 'Nasdaq 100 (QQQ)',
               ticker = 'DIA', 'Dow (DIA)', ticker = 'IWM', 'Russell 2000 (IWM)', ticker) AS label,
    round((latest_close / year_open - 1) * 100, 1) AS ytd_return_pct,
    (SELECT toString(min(d)) FROM complete) AS measured_from_date,
    (SELECT toString(max(d)) FROM complete) AS measured_through_date
FROM edges
ORDER BY ytd_return_pct DESC
Voer het zelf uit

Zowel de tabellen als het bovenstaande overzicht worden gemeten over één periode: de eerste volledige handelssessie van 2026 (2026-01-02) tot en met de meest recent afgesloten sessie (2026-09-03). Gedurende deze periode behaalde Russell 2000 (IWM) een rendement van 19.2% en behaalde Dow (DIA) een rendement van 11.4%. Elke naam in de tabel met stijgers presteerde aanzienlijk beter dan alle vier de indexen; dit is de rekenkundige werking van een index: honderden posities worden gemiddeld tot één lijn, waarbij individuele koersbewegingen elkaar deels opheffen. De spread onder die lijn was aanzienlijk groter dan de lijn zelf, en de sector-scorekaart voor de eerste helft rangschikt alle elf sectoren ten opzichte van elkaar.

De aandelensplitsing die een year-to-date rendement vertekent

Een splitsing wijzigt het aantal aandelen en de koers per aandeel zonder de waarde van een positie te veranderen. Over een periode van deze lengte voeren veel bedrijven een splitsing door, en een ongecorrigeerde year-to-date berekening leest de verandering in de koers per aandeel als rendement. De onderstaande namen voerden elk in 2026 een splitsing of aandelendividend door dat groot genoeg was om de koers met ten minste een vijfde te wijzigen, en elk voldeed aan dezelfde liquiditeitsdrempel, waardoor ze in aanmerking kwamen voor de bovenstaande overzichten voordat het splitsingsfilter ze verwijderde.

QueryUitgesloten van de overzichten: 2026 splits groot genoeg om een vertekend year-to-date beeld te geven
tickerunadjusted ytd (%)split price effect (%)split typesplit datum
BKNG-96.4-96forward split2026-04-06
KLAC-86.3-90forward split2026-06-12
VGT-84.1-87.5forward split2026-04-21
CVNA-82.6-80forward split2026-05-08
VUG-81.9-83.3forward split2026-04-21
HDV-75.6-80forward split2026-04-29
IWF-74.1-75forward split2026-04-29
VO-71.7-75forward split2026-04-21
CRWD-54.6-75stock dividend2026-07-02
MNST-42.5-50stock dividend2026-08-11
APH-40.1-50stock dividend2026-09-03
MVLL4.3-66.7forward split2026-06-26
HON6.1100reverse split2026-06-29
DD224.3200reverse split2026-06-24
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING adv >= 100000000
),
split_terms AS (
    SELECT ticker,
        argMax(split_to, execution_date) AS new_shares,
        argMax(split_from, execution_date) AS old_shares,
        round((old_shares / new_shares - 1) * 100, 1) AS split_price_effect_pct,
        replaceAll(argMax(adjustment_type, execution_date), '_', ' ') AS split_type,
        toString(max(execution_date)) AS split_date
    FROM global_markets.stocks_splits
    WHERE execution_date BETWEEN toDate('2026-01-01') AND today()
    GROUP BY ticker
    HAVING new_shares > 0 AND old_shares > 0
       AND greatest(new_shares / old_shares, old_shares / new_shares) >= 1.25
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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')
      AND ticker NOT IN ('KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL')
      AND ticker IN (SELECT ticker FROM split_terms)
    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
ranked AS (
    SELECT e.ticker AS ticker,
        round((e.latest_close / e.year_open - 1) * 100, 1) AS unadjusted_ytd_pct,
        s.split_price_effect_pct AS split_price_effect_pct,
        s.split_type AS split_type,
        s.split_date AS split_date
    FROM edges AS e
    INNER JOIN split_terms AS s ON e.ticker = s.ticker
    WHERE e.year_open >= 10 AND e.ticker IN (SELECT ticker FROM universe)
)
SELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date
FROM (
    SELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date,
           row_number() OVER (ORDER BY unadjusted_ytd_pct ASC) AS rn_low,
           row_number() OVER (ORDER BY unadjusted_ytd_pct DESC) AS rn_high
    FROM ranked
)
WHERE rn_low <= 14 OR rn_high = 1
ORDER BY unadjusted_ytd_pct ASC
Voer het zelf uit

BKNG zou -96.4% weergeven op een ongecorrigeerd scherm nadat een forward split de koers per aandeel met -96% bewoog, en KLAC zou -86.3% weergeven nadat een forward split de koers met -90% bewoog. Geen enkele houder van beide verloor iets op de dag dat de splitsing van kracht werd. De koers per aandeel werd gedeeld en het aantal aandelen werd vermenigvuldigd met dezelfde factor. De kolom met het splitsingseffect isoleert de koersverandering die uitsluitend door de splitsing wordt veroorzaakt; dit is het deel dat een ongecorrigeerd scherm als rendement leest.

De laatste rij van het paneel werkt de andere kant op: DD toont 224.3% nadat een reverse split de koers per aandeel met 200% verhoogde, waardoor de koers steeg in plaats van daalde. Elke lijst die deze stap overslaat, publiceert fictie aan zowel de boven- als de onderkant. Daarom zet dit scherm tickers met een splitsing apart in plaats van te proberen hun koersen handmatig te corrigeren. Een fonds kan net zo gemakkelijk in dit paneel terechtkomen als een bedrijf: indexfondsen splitsen hun aandelen ook, en dit scherm omvat beide.

Hoe deze selectie wordt gemeten

Elke fase van de selectie, met het aantal namen dat na elke stap overblijft:

QueryDe screen, per fase: hoeveel namen blijven er over na elke filter
screen stepnamen
Traded the first and the last full session4471
Averaging $100m+ a day over the past month1000
Opened 2026 above $10 a share970
Not on the excluded-fund list938
No split or stock dividend in 2026922
De exacte SQL achter elk getal
WITH complete AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      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
    GROUP BY d
    HAVING count() >= 380
),
universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 21 DAY
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)
      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
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) >= 100000000
),
edges AS (
    SELECT ticker,
        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,
        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,
        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))
        OR (window_start >= now() - INTERVAL 8 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

    GROUP BY ticker
    HAVING bars_open >= 100 AND bars_close >= 100
),
flagged AS (
    SELECT ticker,
        year_open,
        ticker IN (SELECT ticker FROM universe) AS liquid,
        ticker NOT IN ('SPCX','KORU','SOXL','SOXS','SOXY','TQQQ','SQQQ','QQQU','SPXL','SPXS','UPRO','SPXU','SPYU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','GDXU','GDXD','FNGU','FNGD','DUST','JNUG','JDST','NUGT','BITX','BITU','SBIT','ETHU','ETHT','NVDL','NVDS','NVD','NVDX','NVDU','NVDD','NVDQ','TSLL','TSLQ','TSLZ','TSLR','TSLT','TSLS','TSDD','AAPU','AAPD','MSFU','MSFD','GGLL','GGLS','AMZU','AMZD','METU','METD','PLTU','PLTD','SMCX','SMCZ','CONL','CONI','MSTX','MSTU','MSTZ','BRKU','AMDL','AMUU','AMDD','ELIL','ELIS','HOOX','AVGX','AVGU','TSMX','TSMZ','MULL') AS not_geared,
        ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                       WHERE execution_date BETWEEN toDate('2026-01-01') AND today()) AS no_split
    FROM edges
)
SELECT tup.1 AS screen_step, tup.2 AS names
FROM (
    SELECT arrayJoin([
        ('Traded the first and the last full session', count()),
        ('Averaging $100m+ a day over the past month', countIf(liquid)),
        ('Opened 2026 above $10 a share', countIf(liquid AND year_open >= 10)),
        ('Not on the excluded-fund list', countIf(liquid AND year_open >= 10 AND not_geared)),
        ('No split or stock dividend in 2026', countIf(liquid AND year_open >= 10 AND not_geared AND no_split))
    ]) AS tup
    FROM flagged
)
Voer het zelf uit

De methode, volledig toegelicht:

  • Het venster. De eerste volledige handelssessie van 2026 tot en met de meest recente volledige sessie op de tape. Beide eindpunten worden afgelezen van de minuutgrafieken. Een sessie telt alleen mee als deze een volledig aantal bars voor de reguliere uren bevat; een dag die nog bezig is, wordt dus nooit als voltooid beschouwd.
  • Het rendement. De eerste opening van de reguliere sessie van het jaar afgezet tegen de laatste slotkoers van de reguliere sessie, berekend op basis van minuutgrafieken. Prints in de premarket en after-hours worden genegeerd. Dit zijn koersrendementen; dividenden worden niet bijgeteld, waardoor een high-yield aandeel hier iets minder gunstig oogt dan een total-return cijfer zou laten zien.
  • De liquiditeitsgrens. Een gemiddelde van ten minste honderd miljoen dollar aan omzet tijdens reguliere uren per sessie over de afgelopen twintig kalenderdagen, waarbij alleen sessies worden meegeteld die van begin tot eind zijn doorlopen. Een gedeeltelijke sessie zou anders de dollars van een deel van de dag delen door een hele dag, waardoor de omzet van elk aandeel zou worden onderschat. Dat ene filter brengt het veld terug van 4471 tickers naar 1000.
  • De koersgrens. Het aandeel opende het jaar boven de tien dollar per aandeel. Namen onder de tien dollar produceren grote percentages op basis van kleine koersstappen.
  • Leveraged en inverse fondsen worden uitgesloten via een gecureerde lijst, die volledig in de SQL onder elke tabel staat. Deze omvat de index-geared fondsen en de single-stock fondsen die de dagelijkse beweging van één bedrijf vermenigvuldigen. Een geared fonds kan elke lijst met grootste bewegers aanvoeren zonder dat er sprake is van bedrijfsnieuws. De lijst wordt handmatig bijgehouden, wat de zwakte ervan is: een fonds dat deze maand wordt gelanceerd, wordt pas uitgesloten zodra iemand het toevoegt.
  • Gewone fondsen worden niet weggefilterd. Een niet-geleveraged index- of sector-ETF die voldoet aan de liquiditeits- en koersgrenzen, wordt hier gerangschikt naast operationele bedrijven en telt ook mee in de breedte-analyses. Een fonds is een mandje met namen die al in hetzelfde universum zijn geteld; lees die rijen dus als de prestatie van het mandje en niet als die van één bedrijf over het jaar.
  • Splitsingen. Elke ticker waarbij in 2026 een aandelensplitsing of stockdividend van kracht werd, wordt terzijde geschoven, ongeacht hoe klein de verhouding is. Dat is de conservatieve keuze: het kost een handvol echte uitblinkers een plek op het bord, maar het voorkomt dat een verandering in het aantal aandelen als rendement wordt gepubliceerd. Het bovenstaande paneel toont de uitgesloten namen waarvan de splitsing groot genoeg was om een koersbeweging te veinzen.
  • Late noteringen. Een bedrijf dat na de eerste sessie van het jaar is genoteerd, heeft geen koers in januari en ontbreekt in deze tabellen. Dit is een reëel hiaat in een jaar met een drukke kalender voor nieuwe noteringen.
  • Het resultaat. 922 namen worden gerangschikt, en de top tien en de hekkensluiters vormen de twee overzichten op deze pagina.

Dezelfde vraag over drie vensters

Year to date is één sport van een ladder, en een beweging ziet er op elke lengte anders uit. De weekweergave is de grootste stijgers en dalers van deze week, de maandweergave is de grootste bewegers van deze maand, en deze pagina betreft het jaar. De drempels verschillen per sport: deze pagina filtert op een gemiddelde van honderd miljoen dollar per dag over de afgelopen maand, terwijl de week- en maandpagina's filteren op het totale verhandelde bedrag binnen hun eigen venster. Een aandeel kan dus op het ene overzicht verschijnen en op het andere ontbreken. Een aandeel dat de wekelijkse lijst aanvoert na een reactie op kwartaalcijfers, staat over het jaar bezien vaak in de middenmoot. Voor het bredere verhaal achter het jaar tot nu toe bevat de marktupdate over de eerste jaarhelft details over de index, rentestanden en sectoren, en hoe leveraged ETF's werken legt uit waarom de fondsen met een hefboom hier buiten beschouwing worden gelaten.

Veelgestelde vragen

Wat is het best presterende aandeel van 2026?

Onder de namen met een gemiddeld dagelijks handelsvolume van ten minste honderd miljoen dollar, een openingskoers aan het begin van het jaar boven de tien dollar, zonder aandelensplitsing in 2026 en niet afkomstig uit de lijst met leveraged fondsen, is SNDK het best presterende aandeel van 2026 tot nu toe, met een stijging van 536.4% sinds de eerste handelsdag van het jaar. MRNA staat op de tweede plaats met 399%.

Welke aandelen zijn het meest gedaald in 2026?

TTD is het slechtst presterende aandeel van 2026 in deze selectie met -60.5%, gevolgd door WING met -54.4%. De volledige lijst met de grootste verliezers van 2026 staat in de tweede tabel hierboven en wordt gedurende het jaar bijgewerkt.

Hoe wordt een year-to-date aandelenrendement berekend?

Een year-to-date rendement vergelijkt de meest recente koers met de koers aan het begin van het kalenderjaar en drukt de verandering uit in een percentage. In dit geval wordt de openingskoers van de eerste reguliere handelssessie van 2026 afgezet tegen de slotkoers van de meest recent voltooide sessie. Aandelen die gedurende het jaar zijn gesplitst, worden buiten beschouwing gelaten in plaats van gecorrigeerd, zodat er geen correctiefactor tussen de lezer en de tape staat.

Zijn leveraged ETF's opgenomen in de lijst met stijgers van 2026?

Nee. Een leveraged of inverse fonds vermenigvuldigt de dagelijkse beweging van een index of een individueel aandeel, waardoor het routinematig bovenaan een lijst met koersbewegers staat zonder dat daar bedrijfsnieuws aan ten grondslag ligt. Deze fondsen worden bij naam verwijderd voordat de rangschikking wordt opgesteld; de lijst is in de SQL onder elke tabel inzichtelijk. Gewone index- en sector-ETF's vormen een ander geval: zij voldoen aan dezelfde criteria als elk ander aandeel en worden hier wel gerangschikt, waardoor een fonds op beide lijsten kan verschijnen.


Elke tabel hier is een opgeslagen query met de bijbehorende SQL. Vouw een paneel uit om de selectie te controleren of bouw deze opnieuw op met uw eigen criteria op de Strasmore-terminal.