Größte Kursgewinner und -verlierer 2026
Die besten und schlechtesten Aktien des Jahres 2026, gerankt anhand der Börsen-Handelsdaten und echter Liquidität, ohne Aktiensplits und gehebelte Fonds.
Die bislang beste Aktie des Jahres 2026 ist MRNA, mit einem Kursplus von 692.8% seit der Eröffnungssitzung des Jahres bis zur zuletzt abgeschlossenen Handelssitzung. Diese Seite rankt die größten Kursgewinner und -verlierer des Jahres 2026 unter Aktien, die tatsächlich gehandelt werden, gemessen anhand der Börsen-Handelsdaten und nicht anhand einer Zusammenfassung eines Datenanbieters; sie wird laufend aktualisiert, während das Jahr fortschreitet. Aktiensplits und gehebelte Fonds werden vor jeder Rangbildung herausgefiltert – genau hier gehen die meisten Year-to-Date-Ranglisten unbemerkt in die Irre.
Größte Kursgewinner des Jahres 2026
Jeder Titel unten musste vor der Aufnahme in das Ranking eine Liquiditätsschwelle überschreiten: im Schnitt mindestens 100 Millionen US-Dollar Aktienumsatz pro abgeschlossener Handelssitzung im vergangenen Monat. Ein hoher Prozentsatz bei einer Aktie, die niemand handelt, ist eine Kursstellung, kein Ergebnis.
| Ticker | YTD-Rendite (%) | Ø Tagesvolumen ($ Mio.) |
|---|---|---|
| MRNA | 692.8 | 3002 |
| SNDK | 471 | 11073 |
| TWST | 355.2 | 476 |
| TXG | 343.5 | 334 |
| MXL | 338.4 | 246 |
| DELL | 268 | 3100 |
| AXTI | 236.9 | 499 |
| AEHR | 229.3 | 203 |
| PBF | 218.3 | 195 |
| KOD | 215.7 | 389 |
Das exakte SQL hinter jeder Zahl
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 10MRNA führt das Jahr an mit 692.8%, gefolgt von SNDK mit 471% und TWST auf dem dritten Platz mit 355.2%. Der zehnte Platz im Ranking, KOD, liegt immer noch 215.7% im Plus – die gesamte Tabelle hat sich damit weit von jedem breiten Index entfernt.
Die Dollar-Spalte neben jeder Kursbewegung liefert genauso viel Information wie der Prozentwert. KOD verzeichnet im Schnitt einen Umsatz von rund 389 Millionen US-Dollar pro Tag. MRNA an der Spitze des Rankings verzeichnet im Schnitt 3002 Millionen US-Dollar. Jeder hier gelistete Titel überschreitet die Schwelle von 100 Millionen US-Dollar pro Tag, und die Spanne oberhalb dieser Schwelle ist so groß, dass derselbe prozentuale Kursausschlag an ihren beiden Enden zwei unterschiedliche Dinge bedeutet. Ein dünn gehandelter Titel lässt sich leichter nach oben treiben und ist schwerer zu dem auf dem Bildschirm angezeigten Kurs wieder zu verkaufen.
Größte Kursverlierer 2026
Die gleiche Kennzahl, umgekehrt: die stärksten Kursrückgänge seit Jahresbeginn bei Titeln, die dieselbe Liquiditätsschwelle erreichen.
| Ticker | YTD-Rendite (%) | Ø Tagesvolumen ($ Mio.) |
|---|---|---|
| CTVA | -80.8 | 410 |
| TTD | -65.7 | 176 |
| FLUT | -64.8 | 159 |
| JOBY | -64.3 | 114 |
| STLA | -61.5 | 126 |
| OKLO | -59.4 | 288 |
| APP | -59.1 | 1168 |
| SMR | -57.8 | 217 |
| FICO | -54.5 | 998 |
| Z | -54.1 | 114 |
Das exakte SQL hinter jeder Zahl
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 10Den stärksten Kursrückgang seit Jahresbeginn verzeichnet CTVA mit -80.8%, gefolgt von TTD mit -65.7%. Auf Platz zehn der Liste liegt Z bei -54.1%. Mehrere Namen auf dieser Liste sind große, breit gehaltene Unternehmen und keine spekulativen Nebenwerte – genau das überrascht an einer Verliererliste. Liquidität und Analystenabdeckung bilden keine Kursuntergrenze. Wer einen dieser Titel als überproportionalen Anteil im Portfolio hielt, trug die volle Bewegung mit; die Seite Risiko der Einzelaktienhaltung misst dies anhand von Volatilitäts- und Drawdown-Kennzahlen.
Wie groß ist der Anteil des Marktes, der 2026 im Plus liegt
Eine Bestenliste zeigt nur die beiden Enden. Die Marktbreite zeigt die Mitte: wie sich das gesamte gescreente Universum, Indexfonds eingeschlossen, zwischen steigenden und fallenden Titeln aufteilt, gestaffelt nach Größe der Kursbewegung.
| Kategorie | Namen | Seitenanteil (%) |
|---|---|---|
| Down 40%+ | 37 | 41.2 |
| Down 20-40% | 84 | 41.2 |
| Down 10-20% | 104 | 41.2 |
| Down 0-10% | 187 | 41.2 |
| Up 0-10% | 162 | 58.8 |
| Up 10-25% | 194 | 58.8 |
| Up 25-50% | 116 | 58.8 |
| Up 50%+ | 116 | 58.8 |
Das exakte SQL hinter jeder Zahl
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 ord58.8% der gescreenten Titel liegen im Jahresverlauf im Plus, 41.2% im Minus. Die Verteilung zeigt, was eine Top-Ten-Tabelle verdeckt. 37 Titel liegen am einen Ende im Bereich Down 40%+, 116 am anderen Ende im Bereich Up 50%+, dagegen stehen 187 im Bereich Down 0-10% und 162 im Bereich Up 0-10% beiderseits der Nulllinie. Der Großteil des Marktes verhält sich in jedem gegebenen Jahr unauffällig, und die Titel in den beiden Tabellen oben sind die Ausnahme, aus der die Durchschnittswerte gebildet werden.
Wo der Markt selbst steht
Das Jahr einer einzelnen Aktie liest sich anders, wenn man es dem Markt selbst gegenüberstellt. Die vier großen Index-ETFs, über exakt dasselbe Fenster:
| Bezeichnung | YTD-Rendite (%) | Gemessen ab | Gemessen bis |
|---|---|---|---|
| Nasdaq 100 (QQQ) | 17.4 | 2026-01-02 | 2026-10-15 |
| S&P 500 (SPY) | 12.5 | 2026-01-02 | 2026-10-15 |
| Russell 2000 (IWM) | 11.1 | 2026-01-02 | 2026-10-15 |
| Dow (DIA) | 8.2 | 2026-01-02 | 2026-10-15 |
Das exakte SQL hinter jeder Zahl
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 DESCBeide Tabellen und die Übersicht oben werden über ein Fenster gemessen: die erste vollständige Handelssitzung von 2026 (2026-01-02) bis zur jüngsten abgeschlossenen Sitzung (2026-10-15). In diesem Zeitraum erzielte Nasdaq 100 (QQQ) eine Rendite von 17.4%, und Dow (DIA) erzielte 8.2%. Jeder Name in der Gewinnertabelle lag mit deutlichem Abstand vor allen vieren – das ist die Arithmetik eines Index am Werk: Hunderte Positionen werden zu einer einzigen Linie gemittelt, wobei sich einzelne Bewegungen teilweise aufheben. Die Streuung unter dieser Linie war weitaus größer als die Linie selbst, und die Sektor-Bilanz für das erste Halbjahr stuft alle elf Sektoren gegeneinander ein.
Der Aktiensplit, der eine Jahresperformance vortäuscht
Ein Split verändert die Aktienanzahl und den Preis je Aktie, ohne den Wert eines Investments zu verändern. In einem so langen Zeitraum führen viele Unternehmen einen Split durch, und eine unbereinigte Berechnung der Jahresperformance liest die Veränderung des Preises je Aktie als Kursentwicklung. Die folgenden Namen wiesen jeweils einen Split oder eine Aktiendividende des Jahres 2026 auf, die groß genug war, um diesen Preis um mindestens ein Fünftel zu bewegen, und jeder erfüllte dieselbe Mindestliquiditätsschwelle, sodass jeder für die oben genannten Ranglisten infrage kam, bevor der Split-Filter ihn aussortierte.
| Ticker | YTD unbereinigt (%) | Split-Kurseffekt (%) | Split-Art | Split-Datum |
|---|---|---|---|---|
| BKNG | -96.9 | -96 | forward split | 2026-04-06 |
| KLAC | -86.2 | -90 | forward split | 2026-06-12 |
| CVNA | -85.6 | -80 | forward split | 2026-05-08 |
| VGT | -83.9 | -87.5 | forward split | 2026-04-21 |
| VUG | -81.7 | -83.3 | forward split | 2026-04-21 |
| VOOG | -81 | -83.3 | forward split | 2026-04-21 |
| MGK | -77.9 | -80 | forward split | 2026-04-21 |
| IWF | -73.9 | -75 | forward split | 2026-04-29 |
| VO | -72.2 | -75 | forward split | 2026-04-21 |
| INTW | -57.3 | -87.5 | forward split | 2026-06-26 |
| CRWD | -48.4 | -75 | stock dividend | 2026-07-02 |
| MNST | -40.9 | -50 | stock dividend | 2026-08-11 |
| APH | -40.6 | -50 | stock dividend | 2026-09-03 |
| HON | 7.6 | 100 | reverse split | 2026-06-29 |
| ETHA | 141.8 | 200 | reverse split | 2026-10-06 |
Das exakte SQL hinter jeder Zahl
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 ASCBKNG würde auf einem unbereinigten Screen -96.9% anzeigen, nachdem ein forward split seinen Preis je Aktie -96% bewegt hatte, und KLAC würde -86.2% anzeigen, nachdem ein forward split seinen Preis -90% bewegt hatte. Kein Inhaber einer der beiden Aktien hat an dem Tag, an dem der Split wirksam wurde, etwas verloren. Der Preis je Aktie wurde geteilt und die Aktienanzahl um denselben Faktor vervielfacht. Die Spalte zum Split-Effekt isoliert die Preisveränderung, die allein auf den Split zurückgeht, und genau das ist der Teil, den ein unbereinigter Screen als Kursentwicklung liest.
Die letzte Zeile des Panels verläuft in die andere Richtung: ETHA zeigt 141.8%, nachdem ein reverse split seinen Preis je Aktie 200% angehoben hatte – der Preis wurde also erhöht statt gekürzt. Jede Liste, die diesen Schritt auslässt, veröffentlicht gleichzeitig oben und unten Fiktion, weshalb der Screen Split-Ticker beiseitelässt, anstatt zu versuchen, ihre Preise nachträglich zu korrigieren. Ein Fonds kann ebenso leicht in diesem Panel landen wie ein Unternehmen: Auch Indexfonds splitten ihre Anteile, und dieser Screen erfasst beide Fälle.
Wie dieses Screening gemessen wird
Jede Stufe des Screenings, mit der Zahl der Namen, die danach noch übrig sind:
| Screening-Schritt | Namen |
|---|---|
| Traded the first and the last full session | 4543 |
| Averaging $100m+ a day over the past month | 1082 |
| Opened 2026 above $10 a share | 1049 |
| Not on the excluded-fund list | 1017 |
| No split or stock dividend in 2026 | 1000 |
Das exakte SQL hinter jeder Zahl
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
)Die Methode im vollen Wortlaut:
- Der Zeitraum. Von der ersten vollständigen Handelssitzung 2026 bis zur jüngsten vollständigen Sitzung im Datenband. Beide Endpunkte werden aus den Minutenbars gelesen, und eine Sitzung zählt nur, wenn sie eine vollständige Kerzenanzahl für die reguläre Handelszeit aufweist, sodass ein noch laufender Tag nie als abgeschlossen behandelt wird.
- Die Rendite. Erster Eröffnungskurs der regulären Sitzung des Jahres gegen letzten Schlusskurs der regulären Sitzung, berechnet aus Minutenbars. Kurse aus dem vorbörslichen und nachbörslichen Handel werden nicht berücksichtigt. Es handelt sich um Kursrenditen; Dividenden werden nicht hinzugerechnet, sodass ein Titel mit hoher Dividendenrendite hier etwas schlechter abschneidet, als es eine Total-Return-Kennzahl zeigen würde.
- Die Liquiditätsuntergrenze. Ein durchschnittlicher Umsatz von mindestens 100 Millionen US-Dollar im regulären Handel pro Sitzung über die vergangenen 20 Kalendertage, wobei nur Sitzungen gezählt werden, die von Anfang bis Ende liefen. Andernfalls würde eine unvollständige Sitzung den Umsatz eines Teiltages durch einen ganzen Tag teilen und den Umsatz jedes Titels unterschätzen. Allein dieser Filter reduziert das Feld von 4543 Ticker-Symbolen auf 1082.
- Die Preisuntergrenze. Die Aktie eröffnete das Jahr über 10 US-Dollar je Aktie. Titel unter 10 US-Dollar erzeugen aus kleinen Preisschritten große Prozentwerte.
- Gehebelte und inverse Fonds werden anhand einer kuratierten Liste ausgeschlossen, die vollständig im SQL-Code unter jeder Tabelle abgedruckt ist. Sie umfasst die indexgehebelten Fonds sowie die Einzelaktienfonds, die die tägliche Bewegung eines Unternehmens vervielfachen. Ein gehebelter Fonds kann jede Rohliste der größten Kursbewegungen anführen, ohne dass es dazu eine einzige Unternehmensnachricht gibt. Die Liste wird von Hand gepflegt, was ihre Schwachstelle ist: Ein in diesem Monat aufgelegter Fonds wird erst ausgeschlossen, sobald ihn jemand hinzufügt.
- Gewöhnliche Fonds werden nicht herausgefiltert. Ein ungehebelter Index- oder Sektor-ETF, der die Liquiditäts- und Preisuntergrenzen erfüllt, wird hier neben operativ tätigen Unternehmen eingestuft und fließt auch in die Breite-Zählungen ein. Ein Fonds ist ein Korb von Titeln, die bereits im selben Universum gezählt werden, daher sollten diese Zeilen als Entwicklung des Korbs gelesen werden und nicht als Jahresverlauf eines einzelnen Unternehmens.
- Splits. Jeder Ticker mit einem Aktiensplit oder einer Aktiendividende, die 2026 wirksam wird, wird ausgeklammert, wie klein das Verhältnis auch sein mag. Das ist die konservative Wahl: Sie kostet eine Handvoll echter Top-Performer einen Platz im Ranking, veröffentlicht dafür aber nie eine Änderung der Aktienanzahl als Rendite. Das Feld oben zeigt die ausgeschlossenen Titel, deren Split groß genug war, um eine Bewegung vorzutäuschen.
- Späte Börsengänge. Ein Unternehmen, das nach der ersten Sitzung des Jahres an die Börse ging, hat keinen Januar-Kurs und fehlt in diesen Tabellen – eine echte Lücke in einem Jahr mit einem dichten Kalender an Neuemissionen.
- Das Ergebnis. 1000 Titel werden gerankt, und die jeweils obersten und untersten zehn davon bilden die beiden Tabellen auf dieser Seite.
Dieselbe Frage über drei Zeitfenster
Year-to-date ist eine Sprosse einer Leiter, und eine Bewegung sieht auf jeder Länge anders aus. Die Wochenansicht ist die größten Kursgewinner und -verlierer dieser Woche, die Monatsansicht ist die größten Kursbewegungen diesen Monat, und diese Seite zeigt das Jahr. Die Schwellenwerte unterscheiden sich je Sprosse: Diese Seite filtert nach einem Durchschnitt von 100 Millionen US-Dollar Handelsvolumen pro Tag über den vergangenen Monat, während die Wochen- und Monatsseiten nach dem gesamten Handelsvolumen in Dollar innerhalb ihres jeweiligen Zeitfensters filtern. Ein Titel kann also die eine Hürde nehmen und die andere verfehlen. Ein Name, der die Wochenliste nach einer Gewinnreaktion anführt, liegt über das Jahr gesehen oft nur im Mittelfeld. Für den größeren Zusammenhang hinter dem bisherigen Jahresverlauf liefert der Marktrückblick zum ersten Halbjahr Details zu Index, Zinsen und Sektoren, und wie gehebelte ETFs funktionieren erklärt, warum die gehebelten Fonds hier außen vor bleiben.
FAQ
Was ist die Aktie mit der besten Performance 2026?
Unter Titeln mit einem durchschnittlichen Handelsvolumen von mindestens 100 Millionen US-Dollar pro Tag, einem Jahreseröffnungskurs über 10 US-Dollar, ohne Aktiensplit im Jahr 2026 und ohne Eintrag auf der Liste der gehebelten Fonds ist MRNA die Aktie mit der bisher besten Performance des Jahres 2026 und liegt 692.8% über dem Stand der ersten Handelssitzung des Jahres. Auf Platz zwei folgt SNDK mit 471%.
Welche Aktien haben 2026 am stärksten verloren?
CTVA ist in diesem Screening mit -80.8% die Aktie mit der schlechtesten Performance des Jahres 2026, vor TTD mit -65.7%. Die vollständige Liste der größten Kursverlierer des Jahres 2026 findet sich in der zweiten Tabelle oben und wird im Jahresverlauf laufend aktualisiert.
Wie wird die Year-to-Date-Rendite einer Aktie berechnet?
Eine Year-to-Date-Rendite vergleicht den aktuellen Kurs mit dem Kurs zu Beginn des Kalenderjahres und drückt die Veränderung in Prozent aus. Hier wird der Eröffnungskurs der ersten regulären Handelssitzung 2026 dem Schlusskurs der zuletzt abgeschlossenen Handelssitzung gegenübergestellt. Aktien, die im Jahresverlauf gesplittet wurden, werden aus der Betrachtung genommen statt angepasst, sodass kein Anpassungsfaktor zwischen dem Leser und den tatsächlichen Kursdaten steht.
Sind gehebelte ETFs in der Gewinnerliste 2026 enthalten?
Nein. Ein gehebelter oder inverser Fonds vervielfacht die Tagesbewegung eines Index oder einer einzelnen Aktie und landet dadurch regelmäßig ganz oben auf einer ungefilterten Bewegungsliste, ohne dass eine Unternehmensnachricht dahintersteht. Diese Fonds werden namentlich vor der Rangbildung entfernt, die Liste ist im SQL unter jeder Tabelle einsehbar. Gewöhnliche Index- und Sektor-ETFs sind ein anderer Fall: Sie müssen dieselben Schwellenwerte erfüllen wie jede Aktie und werden hier mitgerankt, sodass ein Fonds auf beiden Listen auftauchen kann.
Jede Tabelle hier ist eine gespeicherte Abfrage mit zugehörigem SQL. Öffnen Sie ein beliebiges Panel, um das Screening zu prüfen, oder erstellen Sie es mit eigenen Schwellenwerten auf dem Strasmore-Terminal neu.