Strasmore Research
Podsumowania rynkowe Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Największe wzrosty i spadki akcji w 2026 roku

Ranking najlepszych i najgorszych spółek w 2026 roku na podstawie realnej płynności. Zestawienie wyklucza podziały akcji oraz fundusze lewarowane.

Najlepiej radzące sobie spółki w 2026 roku to obecnie SNDK, których kurs wzrósł o 554.9% od pierwszej sesji roku do ostatniej zakończonej sesji. Niniejsza strona rankinguje największe wzrosty i spadki kursów akcji w 2026 roku wśród podmiotów o rzeczywistym obrocie. Dane pochodzą bezpośrednio z rejestrów giełdowych, a nie z zestawień dostawców danych. Ranking jest aktualizowany w trakcie trwania roku. Przed dokonaniem rankingu wykluczane są podziały akcji oraz fundusze lewarowane, co pozwala uniknąć błędów występujących w większości zestawień od początku roku.

Największe wzrosty akcji w 2026 roku

Każda wymieniona poniżej spółka przekroczyła próg płynności przed dokonaniem rankingu: średni obrót akcjami wyniósł co najmniej 100 milionów USD podczas każdej sesji w ciągu ostatniego miesiąca. Wysoki procent wzrostu akcji o niskim wolumenie jest jedynie cytatem, a nie realnym wynikiem.

ZapytanieNajwięksi zyskujący w 2026: top 10 YoY wśród spółek o wysokim wolumenie
Dokładny kod SQL dla każdej liczby
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

SNDK prowadzi zestawienie z wynikiem 554.9%, a na drugim miejscu znajduje się MXL z wynikiem 386.3%, natomiast trzeci jest AEHR z wynikiem 345%. Na dziesiątym miejscu w zestawieniu znajduje się AAOI, którego kurs wzrósł o 204.3%, zatem cała tabela wyprzedziła wszelkie szerokie indeksy.

Kolumna wartości w USD obok każdego ruchu dostarcza równie istotnych informacji co procenty. AAOI generuje średnio około 817 milionów USD obrotu dziennie. SNDK na szczycie zestawienia generuje średnio 18348 milionów USD. Każda spółka w tym zestawieniu przekracza 100 milionów USD obrotu dziennie, a zakres powyżej tego progu jest na tyle szeroki, że ta sama wartość procentowa oznacza dwie różne rzeczy na krańcach skali. W przypadku spółek o niskiej płynności łatwiej jest wywołać wzrost, ale trudniej jest wyjść z pozycji po cenie widocznej na ekranie.

Największe spadki akcji w 2026 roku

Analogiczny wskaźnik w odwrotnej skali: największe spadki od początku roku wśród podmiotów przekraczających ten sam próg płynności.

ZapytanieNajwięksi tracący w 2026: 10 najsłabszych spółek YoY o wysokim wolumenie
Dokładny kod SQL dla każdej liczby
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

Największy spadek od początku roku odnotował podmiot EOSE na poziomie -65.9%, a następnie CSGP na poziomie -58.7%. Na dziesiątym miejscu listy znajduje się TEAM z wynikiem -47.3%. W zestawieniu znajduje się kilka dużych spółek o szerokim kapitale, a nie spekulacyjnych spółek typu micro cap, co jest zaskakującym elementem listy największych spadkowiczów. Płynność oraz analiza analityczna nie gwarantują stabilności kursu akcji. Inwestorzy posiadający nadmierną ekspozycję na któryś z tych walorów ponieśli pełne straty, co mierzą wskaźniki zmienności i obsunięcia kapitału na stronie ryzyko posiadania jednej akcji.

Jaka część rynku rośnie w 2026 roku

Rankingi pokazują jedynie skrajne wartości. Szerokość rynku (breadth) obrazuje istotę zjawiska: jak cały analizowany koszyk, w tym fundusze indeksowe, dzieli się na spółki drożejące i taniejące, pogrupowane według wielkości zmiany.

ZapytanieBreadth YTD: rozkład przesiewanego uniwersum w koszykach stóp zwrotu
Dokładny kod SQL dla każdej liczby
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

61.9% analizowanych spółek odnotowało wzrosty w skali roku, a 38.1% odnotowało spadki. Rozkład ten pokazuje to, co ukrywa tabela dziesięciu najlepszych podmiotów. 22 spółek znajduje się w koszyku Down 40%+, a 130 w koszyku Up 50%+, podczas gdy 146 znajduje się w Down 0-10%, a 159 w Up 0-10% po obu stronach wartości bez zmian. W każdym roku większość rynku wykazuje przeciętne zmiany, a podmioty z dwóch powyższych tabel stanowią wyjątki, na których opierają się średnie.

Sytuacja rynkowa

Wyniki pojedynczej akcji różnią się od wyników całego rynku. Cztery główne fundusze ETF na indeksy w tym samym okresie:

ZapytanieCztery główne index ETF, YTD, w tym samym okresie pomiarowym
Dokładny kod SQL dla każdej liczby
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

Zarówno wykresy, jak i powyższa tabela, obejmują ten sam przedział czasowy: od pierwszej pełnej sesji 2026 roku (2026-01-02) do ostatniej zakończonej sesji (2026-07-22). W tym czasie Russell 2000 (IWM) osiągnął zwrot na poziomie 18.6%, a Dow (DIA) osiągnął zwrot na poziomie 8.2%. Wszystkie podmioty z tabeli aprecjacji znacząco przewyższyły wyniki wszystkich czterech indeksów, co wynika z mechanizmu działania indeksu: setki spółek zostały uśrednione do jednej linii, gdzie indywidualne zmiany częściowo się znoszą. Rozpiętość poniżej tej linii była znacznie szersza niż sama linia, a bilans sektorowy za pierwsze półrocze zestawia ze sobą wszystkie jedenaście sektorów.

Split akcji fałszujący wyniki od początku roku

Split zmienia liczbę akcji oraz cenę za jedną akcję, nie zmieniając przy tym wartości posiadanych walorów. W tak długim okresie wiele spółek przeprowadza split, przez co nieskorygowane wyliczenia od początku roku (YTD) interpretują zmianę ceny za akcję jako wynik inwestycyjny. Poniższe podmioty przeprowadziły w 2026 roku split lub dywidendę akcyjną o skali wystarczającej, aby zmienić cenę o co najmniej jedną piątą. Każda z nich przekroczyła również wymagany próg płynności, zatem każda kwalifikowała się do zestawień powyżej, zanim filtr splitów wykluczył je z listy.

ZapytanieWyłączone z zestawienia: split 2026 wpływający na zmianę YTD
Dokładny kod SQL dla każdej liczby
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

BKNG wyświetli -96.7% na nieskorygowanym ekranie po tym, jak forward split zmienił cenę za akcję o -96%, natomiast CVNA wyświetli -85.1% po tym, jak forward split zmienił cenę o -80%. Żaden akcjonariusz żadnej ze spółek nie poniósł straty w dniu wejścia splitu w życie. Cena za akcję została podzielona, a liczba akcji pomnożona przez ten sam współczynnik. Kolumna efektu splitu izoluje zmianę ceny wynikającą wyłącznie ze splitu, która jest częścią interpretowaną przez nieskorygowany ekran jako wynik.

Ostatni wiersz tabeli działa odwrotnie: DD pokazuje 245.3% po tym, jak reverse split podniósł cenę za akcję o 200%, czyli zwiększył cenę zamiast ją obniżyć. Każda lista pomijająca ten krok publikuje jednocześnie nieprawdziwe dane na górze i na dole zestawienia, dlatego system oddziela tickery po splitach, zamiast próbować korygować ich ceny. Fundusz może znaleźć się w tym zestawieniu tak samo łatwo jak spółka: fundusze indeksowe również dokonują splitów akcji, a niniejszy ekran obejmuje obie te kategorie.

Jak mierzona jest ta selekcja

Każdy etap selekcji wraz z liczbą spółek pozostałych w zestawieniu:

ZapytanieProces przesiewania: liczba spółek po każdym etapie filtracji
Dokładny kod SQL dla każdej liczby
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
)

Pełny opis metody:

  • Okno czasowe. Pierwsza pełna sesja handlowa 2026 roku do ostatniej pełnej sesji na rynku. Obie skrajne daty są pobierane z wykresów minutowych. Sesja jest liczona tylko wtedy, gdy zawiera pełną liczbę świec w godzinach regulaminowych; dzień w trakcie trwania nie jest traktowany jako zakończony.
  • Stopa zwrotu. Porównanie otwarcia pierwszej sesji regulaminowej w roku z ostatnim zamknięciem sesji regulaminowej, obliczone na podstawie wykresów minutowych. Wyniki przedsesyjne i pozasesyjne są ignorowane. Są to stopy zwrotu cenowe; dywidendy nie są doliczane, więc spółki o wysokiej rentowności (yield) wykazują tu nieco gorsze wyniki niż w przypadku całkowitej stopy zwrotu (total return).
  • Próg płynności. Średni obrót w godzinach regulaminowych wynoszący co najmniej 100 milionów USD na sesję w ciągu ostatnich 20 dni kalendarzowych, licząc tylko pełne sesje. W przeciwnym razie częściowa sesja podzieliłaby obrót z części dnia przez pełną dobę, co zaniżyłoby obrót każdej spółki. Ten pojedynczy filtr redukuje liczbę tickerów z 4492 do 1036.
  • Próg ceny. Akcje otworzyły rok powyżej 10 USD za jedną akcję. Spółki poniżej 10 USD generują wysokie wartości procentowe przy niewielkich zmianach ceny.
  • Fundusze lewarowane i odwrócone (inverse) są wykluczane na podstawie wyselekcjonowanej listy, dostępnej w pełnej formie w bazie SQL pod każdą tabelą. Lista obejmuje fundusze indeksowe oraz fundusze pojedynczych akcji, które mnożą dzienną zmianę kursu jednej spółki. Fundusz lewarowany może znaleźć się na szczycie listy najbardziej zmiennych walorów bez żadnych informacji o spółce. Lista jest aktualizowana ręcznie, co stanowi jej słaby punkt: fundusz uruchomiony w tym miesiącu zostanie wykluczony dopiero po dodaniu go przez analityka.
  • Zwykłe fundusze nie są filtrowane. Nielewarowany ETF indeksowy lub sektorowy, który spełnia progi płynności i ceny, jest tu rankowany obok spółek operacyjnych i jest uwzględniany w statystykach szerokości rynku (breadth). Fundusz jest koszykiem spółek już policzonych w tym samym uniwersum, dlatego dane w tych wierszach należy interpretować jako wynik działania koszyka, a nie pojedynczej spółki.
  • Splity. Każdy ticker, w którym doszło do splitu lub dywidendy akcyjnej w trakcie 2026 roku, jest pomijany, niezależnie od stosunku podziału. Jest to podejście konserwatywne: powoduje ono utratę miejsca w zestawieniu przez kilka rzeczywistych liderów, ale zapobiega błędnemu interpretowaniu zmiany liczby akcji jako stopy zwrotu. Powyższa tabela pokazuje wykluczone podmioty, których split był na tyle duży, że mógł sztucznie wykreować zmianę kursu.
  • Późne debiuty. Spółka, która zadebiutowała po pierwszej sesji roku, nie posiada ceny z stycznia i nie występuje w tych tabelach, co stanowi istotną lukę w latach z dużą liczbą nowych debiutów.
  • Wynik. Rankingu dokonano dla 954 nazw, a dziesięć pozycji z góry i dziesięć z dołu tworzy dwie tabele na tej stronie.

To samo pytanie w trzech perspektywach czasowych

Wyniki od początku roku to jeden stopień drabiny, a analiza wygląda inaczej w zależności od wybranego okresu. Widok tygodniowy obejmuje największe wzrosty i spadki akcji w tym tygodniu, widok miesięczny obejmuje największe zmiany kursów akcji w tym miesiącu, natomiast niniejsza strona dotyczy całego roku. Kryteria różnią się dla każdego okresu: ta strona filtruje dane na podstawie średniego obrotu wynoszącego 100 milionów USD dziennie w ciągu ostatniego miesiąca, podczas gdy strony tygodniowa i miesięczna filtrują dane na podstawie całkowitej wartości obrotów w ramach własnych przedziałów czasowych, zatem spółka może znaleźć się na szczycie jednej listy, a nie znaleźć na drugiej. Spółka, która zajmuje pierwsze miejsce na liście tygodniowej po reakcji na wyniki finansowe, często znajduje się w środku zestawienia rocznego. W celu uzyskania szerszego kontekstu dotyczącego dotychczasowego roku, podsumowanie rynku z pierwszego półrocza zawiera szczegółowe dane dotyczące indeksów, stóp procentowych oraz sektorów, natomiast jak działają fundusze ETF z dźwignią wyjaśnia, dlaczego fundusze te zostały tutaj pominięte.

FAQ

Jaka akcja osiągnęła najlepszy wynik w 2026 roku?

Wśród spółek o średnim dziennym obrocie wynoszącym co najmniej 100 mln USD, otwierających rok powyżej 10 USD, bez podziału akcji w 2026 roku i niewchodzących w skład listy funduszy lewarowanych, SNDK jest najlepiej oprocentowaną akcją w 2026 roku, z wzrostem o 554.9% od pierwszej sesji roku. Drugie miejsce zajmuje MXL z wynikiem 386.3%.

Jakie akcje odnotowały największe spadki w 2026 roku?

EOSE jest najgorzej oprocentowaną akcją w 2026 roku w tym zestawieniu przy -65.9%, wyprzedzając CSGP z wynikiem -58.7%. Pełna lista największych spadkowiczów w 2026 roku znajduje się w drugiej tabeli powyżej; jest ona aktualizowana w trakcie roku.

Jak obliczana jest stopa zwrotu od początku roku (YTD)?

Stopa zwrotu YTD porównuje ostatnią cenę z ceną z początku roku kalendarzowego i wyraża zmianę w procentach. W tym przypadku porównywane jest otwarcie pierwszej regularnej sesji w 2026 roku z zamknięciem ostatniej zakończonej sesji. Akcje, które przeszły podział w trakcie roku, są wykluczane zamiast być korygowane, dzięki czemu czytelnik otrzymuje surowe dane bez czynników korygujących.

Czy lewarowane fundusze ETF są uwzględnione na liście zyskujących w 2026 roku?

Nie. Fundusz lewarowany lub typu inverse mnoży dzienne zmiany indeksu lub pojedynczej akcji, przez co rutynowo zajmuje pierwsze miejsca na listach liderów wzrostów bez konkretnych informacji spółki. Fundusze te są usuwane z rankingu przed jego przygotowaniem, a lista ta jest widoczna w kodzie SQL pod każdą tabelą. Zwykłe fundusze ETF na indeksy i sektory są traktowane inaczej: spełniają te same kryteria co akcje i są tu rankowane, zatem fundusz może pojawić się na dowolnej z list.


Każda tabela jest wynikiem zapytania SQL. Można rozwinąć dowolny panel, aby zweryfikować zestawienie lub zbudować własne na terminalu Strasmore.