Крупнейшие акции роста и падения 2026 года
Крупнейшие акции, лидеры роста и падения 2026 года, ранжированные по биржевой ленте сделок с учётом реальной ликвидности; дробления акций и фонды с кредитным плечом исключены.
Лидерами роста среди акций 2026 года пока остаются MRNA: с начала первой торговой сессии года по последнюю завершённую сессию рост составил 692.8%. На этой странице ранжируются крупнейшие акции — лидеры роста и падения 2026 года с начала года — среди бумаг, которые действительно торгуются; расчёт ведётся по биржевой ленте сделок, а не по сводке поставщика данных, и рейтинг обновляется по ходу года. Дробления акций и фонды с кредитным плечом исключаются ещё до составления рейтинга — именно здесь большинство списков с начала года незаметно дают сбой.
Крупнейшие акции — лидеры роста 2026 года
Каждое название в списке ниже прошло порог ликвидности прежде, чем попало в рейтинг: в среднем не менее $100 млн оборота акций за завершённую сессию на протяжении последнего месяца. Крупный процентный рост по бумаге, которую никто не торгует, — это котировка, а не результат.
| Тикер | Доходность с начала года (%) | Средний дневной объём, $ млн |
|---|---|---|
| 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 |
Точный SQL-код для каждого числа
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 возглавляет год с результатом 692.8%, следом идёт SNDK с 471%, третье место занимает TWST с 355.2%. Десятая строчка таблицы, KOD, всё ещё показывает рост на 215.7%, так что весь список далеко опередил любой широкий индекс.
Столбец с суммой оборота рядом с каждым движением цены несёт не меньше информации, чем процент. KOD в среднем даёт около $389 млн оборота в день. MRNA на вершине списка в среднем даёт $3002 млн. Каждое название здесь проходит порог в $100 млн в день, но диапазон значений выше этого порога настолько широк, что один и тот же заголовочный процент означает две разные вещи на двух концах шкалы. По бумаге с низкой ликвидностью легче подтолкнуть цену вверх и труднее выйти из позиции по цене, которая указана на экране.
Крупнейшие аутсайдеры среди акций в 2026 году
Тот же показатель, но в обратную сторону: самые глубокие падения с начала года среди бумаг, прошедших тот же порог ликвидности.
| Тикер | Доходность с начала года (%) | Средний дневной объём, $ млн |
|---|---|---|
| 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 |
Точный SQL-код для каждого числа
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Самое глубокое падение с начала года показывает CTVA — -80.8%, за ней следует TTD с результатом -65.7%. На десятом месте списка находится Z с показателем -54.1%. Часть бумаг в этом списке — крупные компании с широкой базой держателей акций, а не спекулятивные микрокапитализации, и именно это чаще всего удивляет в списке аутсайдеров. Ликвидность и внимание аналитиков не создают никакой защиты для котировок. Тот, кто держал одну из этих бумаг как непропорционально крупную долю портфеля, принял на себя движение в полном объёме — эту зависимость страница риск владения одной акцией измеряет через показатели волатильности и просадки.
Какая доля рынка растёт в 2026 году
Таблица лидеров показывает только два хвоста распределения. Breadth показывает основную массу: как весь отобранный набор бумаг, включая индексные фонды, делится между растущими и падающими именами, с разбивкой по размеру движения.
| Группа | Названия | Доля стороны (%) |
|---|---|---|
| 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 |
Точный SQL-код для каждого числа
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% отобранных бумаг показывают рост с начала года, а 41.2% — снижение. Именно распределение скрыто в таблице топ-10. 37 бумаг находятся в категории Down 40%+ на одном конце шкалы, а 116 — в категории Up 50%+ на другом, против 187 в категории Down 0-10% и 162 в категории Up 0-10% по обе стороны от нулевого изменения. В любой конкретный год основная часть рынка ведёт себя вполне обычно, а бумаги из двух таблиц выше — это исключение, из которого складываются средние показатели.
Где стоит сам рынок
Год отдельной акции выглядит по-разному в зависимости от того, с чем его сравнивать — с самим рынком. Четыре крупных индексных ETF за то же самое окно:
| Метка | Доходность с начала года (%) | Дата начала измерения | Дата окончания измерения |
|---|---|---|---|
| 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 |
Точный SQL-код для каждого числа
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Обе таблицы и панель выше измерены за один и тот же период: с первой полной торговой сессии 2026 года (2026-01-02) по последнюю завершённую сессию (2026-10-15). За это время Nasdaq 100 (QQQ) показал доходность 17.4%, а Dow (DIA) — 8.2%. Каждая бумага из таблицы лидеров роста с большим отрывом превзошла все четыре индекса, и это просто арифметика работы индекса: сотни позиций усредняются в одну цифру, где отдельные движения частично гасят друг друга. Разброс под этой усреднённой цифрой был гораздо шире, чем сама цифра, и сводная таблица по секторам за первое полугодие ранжирует все одиннадцать секторов друг относительно друга.
Сплит акций, который искажает динамику с начала года
Сплит меняет количество акций и цену за акцию, но не меняет стоимость всей позиции. За такой длинный период многие компании проводят сплиты, и неоткорректированный расчёт с начала года принимает изменение цены за акцию за реальную динамику. Каждая из компаний ниже провела в 2026 году сплит или дала акции в виде дивиденда в размере, достаточном, чтобы сдвинуть цену как минимум на пятую часть, и каждая прошла тот же порог ликвидности, поэтому каждая была допущена в таблицы выше до того, как фильтр сплитов её отсеял.
| Тикер | Нескорр. доходность с начала года (%) | Влияние сплита на цену (%) | Тип сплита | Дата сплита |
|---|---|---|---|---|
| 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 |
Точный SQL-код для каждого числа
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 показал бы -96.9% на неоткорректированном экране после того, как forward split сдвинул цену за акцию на -96%, а KLAC показал бы -86.2% после того, как forward split сдвинул его цену на -90%. Ни один держатель ни той, ни другой бумаги в день вступления сплита в силу ничего не потерял. Цена за акцию была разделена, а количество акций умножено на тот же коэффициент. Столбец эффекта сплита выделяет именно то изменение цены, которое объясняется сплитом, — то есть ту часть, которую неоткорректированный экран принимает за динамику.
Последняя строка таблицы работает в обратную сторону: ETHA показывает 141.8% после того, как reverse split поднял цену за акцию на 200%, то есть увеличил цену, а не снизил её. Любой список, который пропускает этот шаг, публикует вымысел одновременно и в верхней, и в нижней части рейтинга, поэтому экран исключает бумаги со сплитами, а не пытается исправлять их цены. В эту таблицу может попасть не только компания, но и фонд: индексные фонды тоже проводят сплиты своих акций, и этот экран охватывает оба случая.
Как построен этот отбор
Каждый этап отбора с числом тикеров, прошедших его:
| Этап отбора | Названия |
|---|---|
| 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 |
Точный SQL-код для каждого числа
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
)Метод отбора приведён полностью:
- Окно. От первой полной торговой сессии 2026 года до последней полной сессии в ленте. Обе граничные точки определяются по минутным барам, и сессия учитывается только тогда, когда по ней есть полный набор баров за основную торговую сессию, поэтому день, который ещё не завершился, никогда не считается закрытым.
- Доходность. Цена открытия первой основной сессии года против цены закрытия последней основной сессии, рассчитанная по минутным барам. Сделки в премаркете и постмаркете не учитываются. Это ценовая доходность без учёта дивидендов, поэтому бумага с высокой дивидендной доходностью показывает здесь результат несколько хуже, чем это было бы видно по показателю полной доходности.
- Порог по ликвидности. Средний оборот в основную торговую сессию не менее $100 млн за сессию за последние 20 календарных дней, при этом учитываются только сессии, прошедшие от начала до конца. В противном случае неполная сессия делила бы часть дневного оборота в долларах на целый день и занижала бы оборот по каждой бумаге. Один этот фильтр сокращает список с 4543 тикеров до 1082.
- Порог по цене. Акция открыла год выше $10 за штуку. Бумаги дешевле $10 дают большие проценты изменения на небольших ценовых шагах.
- Фонды с плечом и обратные фонды исключаются по специально составленному списку, приведённому полностью в SQL-запросе под каждой таблицей. В него входят фонды, привязанные к индексам с плечом, и фонды на отдельные акции, умножающие дневное движение одной компании. Фонд с плечом может возглавить любой список лидеров по движению без единой корпоративной новости. Список ведётся вручную, в чём и его слабое место: фонд, запущенный в этом месяце, исключается только после того, как кто-то внесёт его в список.
- Обычные фонды не отфильтровываются. Индексный или отраслевой ETF без плеча, проходящий пороги по ликвидности и цене, ранжируется здесь наравне с операционными компаниями и учитывается также в показателях широты рынка. Фонд — это корзина бумаг, уже учтённых в той же выборке, поэтому такие строки следует читать как результат корзины, а не как год отдельной компании.
- Дробления. Любой тикер, по которому в течение 2026 года происходит дробление акций или выплата акциями, исключается из отбора — независимо от того, насколько малó соотношение дробления. Это осознанно консервативный выбор: он лишает места в рейтинге горстку действительно сильных бумаг, но зато никогда не выдаёт изменение числа акций за доходность. В таблице выше показаны исключённые тикеры, у которых дробление было достаточно крупным, чтобы имитировать движение цены.
- Поздние размещения. Компания, вышедшая на биржу после первой сессии года, не имеет январской цены и в эти таблицы не попадает — а это реальный пробел в год с насыщенным календарём новых размещений.
- Результат. Ранжируются 1000 тикеров, и верхняя и нижняя десятки из них образуют две таблицы на этой странице.
Один и тот же вопрос в трёх временных окнах
Динамика с начала года — это одна ступень на лестнице, и движение выглядит по-разному на каждой из них. Недельный обзор — это крупнейшие победители и аутсайдеры недели среди акций, месячный обзор — это крупнейшие движения акций за месяц, а эта страница отражает год. Пороги отбора на разных ступенях различаются: эта страница отбирает бумаги со средним объёмом торгов от 100 миллионов долларов в день за последний месяц, тогда как недельная и месячная страницы отбирают бумаги по совокупному объёму торгов в долларах в рамках своих собственных окон, поэтому одна и та же бумага может пройти отбор на одной странице и не пройти на другой. Бумага, возглавляющая недельный рейтинг на фоне реакции рынка на отчётность, за год нередко оказывается в середине таблицы. Более широкий обзор итогов года см. в материале обзор рынка за первое полугодие, где разбираются динамика индексов, процентные ставки и секторальная картина, а материал как работают ETF с кредитным плечом объясняет, почему фонды с плечом здесь не рассматриваются.
Часто задаваемые вопросы
Какая акция показывает лучшую динамику в 2026 году?
Среди бумаг со среднедневным объёмом торгов не менее $100 млн, ценой на открытии года выше $10, без сплита в 2026 году и не входящих в список фондов с кредитным плечом, MRNA — лучшая по динамике акция 2026 года на сегодня: рост составляет 692.8% от первой сессии года. На втором месте SNDK с показателем 471%.
Какие акции больше всего потеряли в цене в 2026 году?
CTVA — худшая по динамике акция 2026 года по данному отбору, с показателем -80.8%, за ней следует TTD с показателем -65.7%. Полный список крупнейших аутсайдеров 2026 года приведён во второй таблице выше и обновляется по ходу года.
Как рассчитывается доходность акции с начала года?
Доходность с начала года сопоставляет последнюю цену с ценой на начало календарного года и выражает изменение в процентах. Здесь используется цена на открытии первой обычной торговой сессии 2026 года в сопоставлении с ценой закрытия последней завершённой сессии. Акции, прошедшие сплит в течение года, исключаются из отбора, а не корректируются, поэтому между читателем и биржевыми данными не стоит никакой поправочный коэффициент.
Включены ли в список лидеров роста 2026 года фонды с кредитным плечом?
Нет. Фонд с кредитным плечом или обратный фонд умножает дневное движение индекса или отдельной акции, поэтому он регулярно оказывается на вершине необработанного списка лидеров без каких-либо корпоративных новостей за этим движением. Такие фонды исключаются поимённо перед составлением рейтинга, и этот список виден в SQL-запросе под каждой таблицей. Обычные индексные и секторальные ETF — другой случай: они проходят те же пороговые требования, что и любая акция, и ранжируются наравне с ней, поэтому один и тот же фонд может оказаться в любом из двух списков.
Каждая таблица здесь представляет собой сохранённый запрос с прикреплённым SQL-кодом. Разверните любую панель, чтобы проверить отбор, или постройте его заново со своими пороговыми значениями на терминале Strasmore.