2026年株価上昇率・下落率ランキング
2026年の株価上昇率と下落率を、実際の流動性に基づく取引所データで順位付け。株式分割とレバレッジ型ファンドは除外しています。
2026年これまでのパフォーマンス上位銘柄はSNDKが先導しており、年初の取引初日から直近の取引完了日までに536.4%上昇しています。本ページでは、実際に取引されている銘柄を対象に、2026年の株価上昇率および下落率の上位銘柄を順位付けしています。集計にはベンダーのサマリーではなく、取引所の約定データを用いています。年中は随時更新します。ランキング前に株式分割とレバレッジ型ファンドを除外しています。年初来ランキングの多くで、この処理が見落とされています。
2026年の株価上昇率上位銘柄
以下の各銘柄は、順位付けの前に流動性の基準を満たしている。過去1カ月の各取引日における1日平均の売買代金が、少なくとも1億ドルに達していることが条件だ。誰も取引していない銘柄の大きな上昇率は、結果ではなく単なる気配値にすぎない。
| ティッカー | 年初来リターン (%) | 1日平均売買代金 ($M) |
|---|---|---|
| SNDK | 536.4 | 15431 |
| MRNA | 399 | 5598 |
| TWST | 305.4 | 202 |
| DELL | 301.8 | 3566 |
| TXG | 287.5 | 142 |
| AEHR | 262.8 | 208 |
| MXL | 233.4 | 114 |
| AXTI | 226.9 | 525 |
| MU | 224.8 | 20455 |
| AMLX | 183.5 | 131 |
各数値の背後にある正確な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 10SNDKが536.4%で年間首位に立ち、MRNAが399%で続き、TWSTが305.4%で3位となっている。ランキング10位のAMLXも183.5%上昇しており、表に載る銘柄全体が主要な株価指数を大きく上回っている。
各上昇率の横にあるドル建ての売買代金も、同じ程度に重要な情報だ。AMLXの1日平均売買代金は約131百万ドル。ランキング首位のSNDKは、平均で15431百万ドルに達する。ここに挙げた銘柄はすべて1日1億ドルの基準を上回っているが、その上乗せ幅には大きな差がある。そのため、同じ見出し上の上昇率でも、両端の銘柄では意味が異なる。薄商いの銘柄は価格を押し上げやすい一方、画面に表示された価格で手仕舞うのは難しい。
2026年の株価下落率上位銘柄
同じ指標を逆方向から見たものです。同じ流動性基準を満たす銘柄のうち、年初来の下落率が大きい銘柄を示します。
| ティッカー | 年初来リターン (%) | 1日平均売買代金 ($M) |
|---|---|---|
| TTD | -60.5 | 192 |
| WING | -54.4 | 103 |
| APP | -54.1 | 1257 |
| CSGP | -52.8 | 144 |
| FLUT | -52.7 | 140 |
| STLA | -51.5 | 105 |
| BSX | -51 | 763 |
| KLAR | -50.4 | 145 |
| RBLX | -49.1 | 303 |
| JOBY | -48.8 | 153 |
各数値の背後にある正確な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年初来の下落率が最も大きいのはTTDで、下落率は-60.5%でした。続いてWINGが-54.4%でした。リスト十位のJOBYは、-48.8%となっています。ここには投機的な小型株ではなく、時価総額が大きく、幅広く保有されている企業も複数含まれています。これが、下落銘柄のリストを見て驚く点です。流動性やアナリストのカバレッジがあっても、株価の下落を防ぐ下支えにはなりません。ポートフォリオの大きな比率をこれらの銘柄の一つに投資していた投資家は、その値下がりを全面的に受けました。一銘柄保有のリスクのページでは、ボラティリティとドローダウンの数値を使ってこのリスクを測定しています。
2026年、市場のどの程度が上昇しているか
ランキングは両端しか示しません。市場の広がりを見ると、全体像が分かります。インデックスファンドを含むスクリーニング対象の全銘柄が、上昇銘柄と下落銘柄にどのように分かれているかを、値動きの大きさ別に示します。
| バケット | 銘柄名 | サイド構成比 (%) |
|---|---|---|
| Down 40%+ | 18 | 35.5 |
| Down 20-40% | 69 | 35.5 |
| Down 10-20% | 78 | 35.5 |
| Down 0-10% | 162 | 35.5 |
| Up 0-10% | 152 | 64.5 |
| Up 10-25% | 198 | 64.5 |
| Up 25-50% | 142 | 64.5 |
| Up 50%+ | 103 | 64.5 |
各数値の背後にある正確な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 ord年初来で上昇しているスクリーニング対象銘柄は64.5%、下落している銘柄は35.5%です。分布を見ると、上位十銘柄の一覧では見えない状況が分かります。一方の端では18銘柄がDown 40%+の区分に入り、もう一方の端では103銘柄がUp 50%+の区分に入っています。変わらずの両側では、162銘柄がDown 0-10%、152銘柄がUp 0-10%に該当します。どの年でも、市場の大半は平均的な値動きをしています。上の二つの表に掲載された銘柄は例外であり、平均値はそうした銘柄も含めて算出されています。
市場全体の位置づけ
単一銘柄の年間パフォーマンスは、市場全体のパフォーマンスと照らし合わせると見え方が変わります。まったく同じ期間における主要四指数ETFの推移は次のとおりです。
| ラベル | 年初来リターン (%) | 測定開始日 | 測定終了日 |
|---|---|---|---|
| Russell 2000 (IWM) | 19.2 | 2026-01-02 | 2026-09-03 |
| Nasdaq 100 (QQQ) | 15.7 | 2026-01-02 | 2026-09-03 |
| S&P 500 (SPY) | 12.7 | 2026-01-02 | 2026-09-03 |
| Dow (DIA) | 11.4 | 2026-01-02 | 2026-09-03 |
各数値の背後にある正確な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-09-03)までです。この期間にRussell 2000 (IWM)は19.2%、Dow (DIA)は11.4%のリターンとなりました。上昇銘柄表の全銘柄は、四指数すべてを大幅に上回りました。これは指数の算術的な仕組みによるものです。数百銘柄の保有銘柄を一つの値に平均するため、個別銘柄の値動きが一部相殺されます。その値の下にある分布は、指数自体よりもはるかに広がっていました。上半期のセクター評価表では、十一セクターを相互に比較して順位付けしています。
株式分割が年初来騰落率を偽る仕組み
株式分割は、保有資産の価値を変えずに、株式数と一株当たり価格を変更します。この期間は十分に長いため、多くの企業が株式分割を実施します。その結果、調整前の年初来計算では、一株当たり価格の変化がパフォーマンスとして表示されます。以下の銘柄は、いずれも2026年に、一株当たり価格を少なくとも五分の一動かす規模の株式分割または株式配当を実施しました。また、同じ流動性基準も満たしていました。そのため、分割フィルターで除外される前は、上記のランキングに入る資格がありました。
| ティッカー | 未調整年初来 (%) | 株式分割価格効果 (%) | 分割種別 | 分割日 |
|---|---|---|---|---|
| BKNG | -96.4 | -96 | forward split | 2026-04-06 |
| KLAC | -86.3 | -90 | forward split | 2026-06-12 |
| VGT | -84.1 | -87.5 | forward split | 2026-04-21 |
| CVNA | -82.6 | -80 | forward split | 2026-05-08 |
| VUG | -81.9 | -83.3 | forward split | 2026-04-21 |
| HDV | -75.6 | -80 | forward split | 2026-04-29 |
| IWF | -74.1 | -75 | forward split | 2026-04-29 |
| VO | -71.7 | -75 | forward split | 2026-04-21 |
| CRWD | -54.6 | -75 | stock dividend | 2026-07-02 |
| MNST | -42.5 | -50 | stock dividend | 2026-08-11 |
| APH | -40.1 | -50 | stock dividend | 2026-09-03 |
| MVLL | 4.3 | -66.7 | forward split | 2026-06-26 |
| HON | 6.1 | 100 | reverse split | 2026-06-29 |
| DD | 224.3 | 200 | reverse split | 2026-06-24 |
各数値の背後にある正確な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は、forward splitによって一株当たり価格が-96%動いた後、調整前のスクリーニングでは-96.4%と表示されます。一方、KLACは、forward splitによって価格が-90%動いた後、-86.3%と表示されます。いずれも、分割の効力発生日に保有者の資産価値が失われたわけではありません。一株当たり価格が分割係数で割られ、株式数は同じ係数で増えただけです。分割効果の欄は、分割だけによる価格変化を切り分けています。これが、調整前のスクリーニングでパフォーマンスとして表示される部分です。
パネルの最終行は逆方向の動きを示しています。DDは、reverse splitによって一株当たり価格が200%上昇した後、224.3%となっています。価格を引き下げるのではなく、引き上げる分割です。この処理を省くリストは、上位と下位の両方で同時に事実と異なる表示を行うことになります。そのため、このスクリーニングでは分割銘柄を別扱いとし、価格を後から修正しようとはしていません。ファンドも企業と同じように、このパネルに入る可能性があります。インデックスファンドも株式分割を実施するため、このスクリーニングは双方を対象としています。
このスクリーニングの測定方法
各段階を通過した後に残った銘柄数です。
| スクリーニング手順 | 銘柄名 |
|---|---|
| Traded the first and the last full session | 4471 |
| Averaging $100m+ a day over the past month | 1000 |
| Opened 2026 above $10 a share | 970 |
| Not on the excluded-fund list | 938 |
| No split or stock dividend in 2026 | 922 |
各数値の背後にある正確な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年の最初の完全な取引セッションから、テープ上で直近の完全なセッションまでです。両端の日付は分足から取得します。通常取引時間のバーが完全な本数そろっている場合だけセッションとして数えるため、取引途中の日は終了済みとして扱いません。
- リターン。 年初の最初の通常取引時間の始値と、直近の通常取引時間の終値を分足から比較します。プレマーケットと時間外取引の約定は除外します。これは価格リターンであり、配当は再投資しません。そのため、高利回り銘柄はトータルリターンで見た場合よりやや低く表示されます。
- 流動性の下限。 過去20暦日における通常取引時間の売買代金について、1セッション当たり平均1億ドル以上を条件とします。対象は開始から終了まで取引が行われたセッションだけです。途中までのセッションを含めると、1日分の売買代金の一部を丸一日分として割ることになり、全銘柄の売買代金が過小評価されます。この単一のフィルターにより、対象銘柄は4471ティッカーから1000ティッカーになります。
- 株価の下限。 年初の始値が1株10ドルを上回っていることを条件とします。10ドル未満の銘柄は、小さな値幅でも大きな上昇率が生じるためです。
- レバレッジ型・インバース型ファンドは、銘柄リストに基づいて除外します。リストは各テーブル下のSQLに全文を掲載しています。指数連動型のレバレッジファンドと、単一企業の日々の値動きを倍増させる単一銘柄ファンドを対象とします。レバレッジ型ファンドは、企業ニュースが一つもない場合でも、単純な値上がり率ランキングの上位に入る可能性があります。このリストは手作業で管理しているため、新たに設定されたファンドは追加されるまで除外されません。
- 通常のファンドは除外しません。 レバレッジのない指数ETFやセクターETFで、流動性と株価の下限を満たすものは、事業会社と同じランキングに含めます。銘柄の裾野を示す集計にも含まれます。ファンドは同じ対象ユニバースにすでに含まれる銘柄のバスケットです。そのため、該当行は一企業の年間実績ではなく、バスケット全体の実績として読んでください。
- 株式分割。 2026年中に株式分割または株式配当が効力を生じたティッカーは、比率の大小にかかわらず除外します。これは保守的な判断です。実際に好成績だった銘柄の一部をランキングから外すことになりますが、株式数の変化をリターンとして公表することはありません。上のパネルには、分割規模が値動きを偽装するほど大きかった除外銘柄を示しています。
- 年途中の上場。 年初の最初のセッション後に上場した企業には1月の株価がないため、これらのテーブルには含まれません。新規上場が多い年には、実質的な空白となります。
- 結果。 922銘柄をランキング化し、その上位10銘柄と下位10銘柄をこのページの二つのボードに示します。
三つの期間で見る同じ問い
年初来は、はしごの一段にすぎません。期間が変われば、値動きの見え方も変わります。週次では今週の株価上昇銘柄と下落銘柄、月次では今月の株価変動が大きい銘柄を確認します。このページは年初来の動きを扱います。
各段で集計基準が異なります。このページでは、過去一カ月の一日平均売買代金が一億ドル以上の銘柄を対象としています。一方、週次・月次のページでは、それぞれの期間内の累計売買代金を基準にしています。そのため、一方の一覧には入っても、もう一方には入らない銘柄があります。
決算発表への反応で週次ランキングの首位になった銘柄が、年初来では中位にとどまることもあります。年初来の相場をより広く捉えるには、上半期の市場総括で指数、金利、セクターの動きを確認できます。また、レバレッジETFをここで除外している理由は、レバレッジETFの仕組みで説明しています。
FAQ
2026年に最も好調な銘柄はどれですか?
一日の平均売買代金が少なくとも1億ドルで、年初の株価が10ドルを上回り、2026年に株式分割を実施しておらず、レバレッジドファンドのリストにも含まれていない銘柄のうち、SNDKが2026年の年初来で最も好調な銘柄です。年初最初のセッションから536.4%上昇しています。MRNAが399%で続いています。
2026年に最も下落した銘柄はどれですか?
このスクリーニングでは、TTDが2026年に最も低調な銘柄で、下落率は-60.5%です。WINGが-54.4%で続いています。2026年に最も下落した銘柄の全リストは上の2番目の表に掲載しており、年の経過に応じて更新しています。
年初来の株式リターンはどのように計算されますか?
年初来リターンは、最新の株価と暦年の開始時点の株価を比較し、その変化率をパーセンテージで示したものです。ここでは、2026年の最初の通常取引セッションの始値を、直近で終了したセッションの終値と比較しています。年内に株式分割を実施した銘柄は調整せず、対象から除外しています。そのため、読者と実際の値動きの間に調整係数は入りません。
2026年の上昇銘柄リストにレバレッジETFは含まれますか?
いいえ。レバレッジ型またはインバース型のファンドは、指数や単一銘柄の日々の値動きを増幅するため、企業関連のニュースがなくても、単純な値上がりランキングの上位に入ることがよくあります。こうしたファンドは銘柄名で事前に除外しており、除外リストは各表の下にあるSQLで確認できます。通常の指数ETFやセクターETFは扱いが異なります。これらは株式と同じ基準を満たせばランキング対象となるため、いずれの表にもファンドが含まれる可能性があります。
ここに掲載するすべての表は、SQLを付属した保存済みクエリです。各パネルを展開してスクリーニング条件を確認するか、Strasmore terminalで独自の基準を設定して再構築できます。