2026년 주식 시장 상승률 및 하락률 상위 종목
2026년 거래소 테이프 데이터를 바탕으로 실질 유동성을 고려한 주식 수익률 순위를 제공합니다. 주식 분할 및 레버리지 펀드를 제외한 종목의 연초 대비 수익률을 집계하며, 일평균 거래대금 일억 달러 이상의 종목만을 대상으로 하여 객관적인 시장 성과를 분석합니다.
SNDK
2026년 현재까지 가장 우수한 성과를 보인 종목은 SNDK이며, 연초 첫 거래일부터 가장 최근 마감된 거래일까지 536.4% 상승했습니다. 이 페이지는 벤더 요약 자료가 아닌 거래소 테이프(exchange tape)를 기준으로, 실제로 거래되는 종목 중 2026년 최대 상승주와 하락주 순위를 집계하며 연중 실시간으로 갱신됩니다. 주식 분할과 레버리지 펀드는 순위 산정 전 제외되는데, 이는 대부분의 연초 대비(YTD) 수익률 목록에서 간과되는 부분입니다.
2026년 주가 상승률 상위 종목
아래 나열된 모든 종목은 순위 산정 전 유동성 기준을 충족했습니다. 지난 한 달간 매 거래일 평균 1억 달러 이상의 주식이 거래된 종목들입니다. 거래량이 거의 없는 종목의 높은 상승률은 실제 성과가 아닌 호가에 불과합니다.
| 티커 | 연초 대비 수익률(YTD %) | 일평균 거래대금($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의 일평균 거래대금은 약 131백만 달러입니다. 선두인 SNDK는 평균 15431백만 달러를 기록 중입니다. 여기에 포함된 모든 종목은 일평균 1억 달러 이상의 거래대금을 기록하고 있으나, 해당 기준을 넘어서는 범위가 넓어 동일한 상승률이라 하더라도 종목별로 의미하는 바가 다를 수 있습니다. 거래량이 적은 종목은 주가를 끌어올리기는 쉽지만, 화면에 표시된 가격으로 매도하여 빠져나오기는 더 어렵습니다.
2026년 최대 주가 하락 종목
동일한 기준을 반대로 적용한 결과입니다. 동일한 유동성 하한선을 충족하는 종목 중 연초 대비 가장 가파른 하락세를 보인 종목들입니다.
| 티커 | 연초 대비 수익률(YTD %) | 일평균 거래대금($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%를 기록 중입니다. 이 목록에 포함된 여러 종목은 투기적인 초소형주가 아니라 대형주이자 널리 보유된 기업들입니다. 이는 하락 종목 리스트에서 투자자들이 의외라고 느끼는 부분입니다. 유동성과 애널리스트의 커버리지가 주가의 하한선을 보장해주지는 않습니다. 포트폴리오에서 특정 종목의 비중을 과도하게 높게 가져간 투자자들은 이러한 하락세를 온전히 감당해야 했습니다. 이에 관한 내용은 단일 종목 보유 리스크 페이지에서 변동성과 최대 낙폭(drawdown) 수치를 통해 측정하고 있습니다.
2026년 시장의 상승 종목 비중
리더보드는 양극단의 종목만을 보여줍니다. 시장 폭(breadth)은 전체를 보여줍니다. 인덱스 펀드를 포함하여 스크리닝된 전체 유니버스가 상승 종목과 하락 종목으로 어떻게 나뉘는지, 변동 폭에 따라 분류하여 나타냅니다.
| 구간 | 명칭 | 측면 비중(%) |
|---|---|---|
| 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%는 하락했습니다. 상위 10개 종목 표는 이러한 분포를 가립니다. 18개의 종목은 한쪽 끝인 Down 40%+ 구간에, 103개의 종목은 반대쪽 끝인 Up 50%+ 구간에 위치합니다. 반면 보합권 양옆인 Down 0-10% 구간에는 162개가, Up 0-10% 구간에는 152개가 자리 잡고 있습니다. 어느 해든 시장의 대다수 종목은 평범한 움직임을 보이며, 앞선 두 표에 나타난 종목들은 평균을 구성하는 예외적인 사례들입니다.
시장 현황
개별 종목의 연간 성과는 시장 전체의 성과와는 다르게 해석됩니다. 동일한 기간 동안 주요 4대 지수 ETF의 성과는 다음과 같습니다.
| 라벨 | 연초 대비 수익률(YTD %) | 측정 시작일 | 측정 종료일 |
|---|---|---|---|
| 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%의 수익률을 보였습니다. 상승 종목 표에 포함된 모든 종목은 이 네 가지 지수를 큰 폭으로 상회했습니다. 이는 수백 개의 보유 종목이 하나의 지수로 합산되면서 개별 종목의 등락이 서로 상쇄되는 지수 산출 방식의 결과입니다. 지수 자체의 변동폭보다 그 하위 종목들의 수익률 편차가 훨씬 컸으며, 상반기 섹터별 성과표에서 11개 섹터의 상대적 성과를 확인할 수 있습니다.
연초 대비 수익률을 왜곡하는 주식 분할
주식 분할은 보유 가치의 변화 없이 발행 주식 수와 주당 가격만을 변경합니다. 이처럼 긴 기간 동안 많은 기업이 주식 분할을 단행하며, 조정되지 않은 연초 대비(YTD) 계산 방식은 주당 가격의 변화를 그대로 수익률로 인식합니다. 아래 나열된 종목들은 2026년에 주당 가격을 최소 5분의 1 이상 변동시킬 만큼 큰 규모의 주식 분할이나 주식 배당을 실시했습니다. 또한 각 종목은 동일한 유동성 기준을 충족했기에 분할 필터로 제외되기 전까지는 상단 보드에 포함될 자격이 있었습니다.
| 티커 | 미조정 연초 대비 수익률(YTD %) | 액면분할 가격 효과(%) | 분할 유형 | 분할일 |
|---|---|---|---|---|
| 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%로 표시됩니다. 분할 효력이 발생한 날, 두 종목의 보유자 중 누구도 손실을 보지 않았습니다. 주당 가격은 나누어졌고 주식 수는 동일한 비율로 곱해졌기 때문입니다. '분할 효과(split effect)' 열은 오직 분할로 인해 발생한 가격 변동만을 분리해 보여주며, 이는 조정되지 않은 화면에서 수익률로 오인되는 부분입니다.
패널의 마지막 행은 반대 방향으로 작동합니다. 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년 첫 정규 거래 세션부터 가장 최근의 정규 거래 세션까지를 대상으로 합니다. 양 끝점은 분 단위 차트(minute bars)를 기준으로 하며, 정규 거래 시간의 전체 봉(bar)이 완성된 세션만을 포함합니다. 따라서 진행 중인 당일 거래는 분석 대상에서 제외됩니다.
- 수익률: 연초 첫 정규 세션 시가와 최근 정규 세션 종가를 분 단위 차트로 비교하여 산출합니다. 프리마켓(premarket) 및 애프터마켓(after-hours) 거래는 제외됩니다. 이는 가격 수익률이며 배당금이 재투자되지 않으므로, 고배당 종목의 경우 총수익률(total return) 지표보다 다소 낮게 나타날 수 있습니다.
- 유동성 하한선: 최근 20일(캘린더 데이 기준) 동안 정규 거래 시간 내 일평균 거래대금이 1억 달러 이상인 종목으로 제한합니다. 전체 세션이 완성된 날만 계산에 포함합니다. 부분 세션이 포함될 경우 일평균 거래대금이 과소평가될 수 있기 때문입니다. 이 필터를 통해 대상 종목은 4471개에서 1000개로 조정됩니다.
- 가격 하한선: 연초 시가가 10달러 이상인 종목만 포함합니다. 10달러 미만 종목은 작은 가격 변동에도 수익률이 크게 왜곡될 수 있습니다.
- 레버리지 및 인버스 펀드: 별도로 관리되는 목록을 통해 제외합니다. 이 목록은 각 표 하단의 SQL에 명시되어 있습니다. 지수 추종 펀드와 특정 종목의 일일 변동폭을 배수로 추종하는 단일 종목 펀드가 포함됩니다. 레버리지 펀드는 기업 관련 뉴스 없이도 변동성만으로 상위권에 오를 수 있기 때문입니다. 이 목록은 수동으로 관리되므로, 신규 상장 펀드가 목록에 반영되기 전까지는 일시적으로 포함될 가능성이 있다는 한계가 있습니다.
- 일반 펀드: 레버리지가 없는 일반 지수 또는 섹터 ETF는 유동성 및 가격 하한선을 충족할 경우 일반 기업과 동일하게 순위에 포함됩니다. 펀드는 이미 스크리닝 대상에 포함된 종목들의 바스켓이므로, 해당 행은 개별 기업의 성과가 아닌 바스켓 전체의 성과로 해석해야 합니다.
- 주식 분할: 2026년 중 주식 분할이나 주식 배당이 발생한 종목은 비율과 관계없이 모두 제외합니다. 이는 보수적인 접근 방식으로, 우수한 성과를 낸 일부 종목이 제외될 수 있으나 주식 수 변화로 인한 가격 왜곡을 방지하기 위함입니다. 상단 패널에는 주식 분할로 인해 가격 변동이 왜곡된 제외 종목들이 표시됩니다.
- 신규 상장: 연초 첫 세션 이후 상장된 기업은 연초 가격 데이터가 없으므로 본 표에서 제외됩니다. 신규 상장이 활발한 해에는 데이터 공백이 발생할 수 있습니다.
- 결과: 총 922개의 종목을 순위화하며, 상위 10개와 하위 10개 종목을 본 페이지의 두 표에 게시합니다.
세 개의 창에서 보는 동일한 질문
연초 대비(Year to date) 수익률은 사다리의 한 칸과 같으며, 관찰하는 기간에 따라 움직임이 다르게 보입니다. 주간 단위는 이번 주 주식 상승 및 하락 상위 종목에서, 월간 단위는 이번 달 주식 변동 상위 종목에서 확인할 수 있으며, 본 페이지는 연간 기준입니다. 각 페이지의 기준은 서로 다릅니다. 본 페이지는 지난 한 달간 일평균 거래대금 1억 달러 이상인 종목을 선별하지만, 주간 및 월간 페이지는 해당 기간 내 총 거래대금을 기준으로 하므로 특정 종목이 한 게시판에는 포함되고 다른 곳에서는 제외될 수 있습니다. 실적 발표에 따른 반응으로 주간 상위권에 오른 종목이 연간 기준으로는 중간 순위에 머무는 경우가 많습니다. 올해 상반기에 대한 더 넓은 맥락을 파악하려면 상반기 시장 요약에서 지수, 금리, 섹터별 세부 내용을 확인하시기 바라며, 레버리지 ETF의 작동 원리에서는 왜 레버리지 펀드가 본 집계에서 제외되는지 설명합니다.
자주 묻는 질문(FAQ)
2026년 최고의 성과를 기록한 종목은 무엇입니까?
일평균 거래대금이 1억 달러 이상이고, 연초 주가가 10달러를 상회하며, 2026년 중 주식 분할이 없었고, 레버리지 펀드 목록에 포함되지 않은 종목 중 SNDK이 2026년 현재까지 가장 높은 성과를 기록하고 있으며, 연초 첫 거래일 대비 536.4% 상승했습니다. MRNA은 399% 상승으로 그 뒤를 잇고 있습니다.
2026년 가장 큰 하락 폭을 보인 종목은 무엇입니까?
TTD는 본 스크리닝 기준 2026년 최저 성과를 기록하며 -60.5% 하락했고, WING이 -54.4% 하락하며 그 뒤를 이었습니다. 2026년 최대 하락 종목 전체 목록은 위 두 번째 표에서 확인할 수 있으며, 연중 지속적으로 업데이트됩니다.
연초 대비 수익률(YTD)은 어떻게 계산됩니까?
연초 대비 수익률은 최신 주가를 연초 시점의 주가와 비교하여 그 변동 폭을 백분율로 나타낸 것입니다. 본 자료에서는 2026년 첫 정규장 시가와 가장 최근 완료된 거래일의 종가를 기준으로 계산합니다. 해당 연도에 주식 분할이 발생한 종목은 조정하지 않고 제외하므로, 독자와 시장 데이터 사이에 별도의 조정 계수가 개입하지 않습니다.
레버리지 ETF가 2026년 상승 종목 목록에 포함됩니까?
아니요. 레버리지 또는 인버스 펀드는 지수나 개별 종목의 일일 변동 폭을 배수로 추종하기 때문에, 기업 관련 뉴스 없이도 변동률 상위 목록을 차지하는 경우가 많습니다. 이러한 펀드는 순위 산정 전 명칭을 기준으로 제외하며, 각 표 하단의 SQL에서 해당 목록을 확인할 수 있습니다. 일반 지수 및 섹터 ETF는 이와 다릅니다. 이들은 일반 주식과 동일한 기준을 적용받아 순위에 포함되므로, 펀드 상품이 양쪽 게시판 어디에든 나타날 수 있습니다.
여기에 제시된 모든 표는 SQL이 첨부된 저장 쿼리입니다. 패널을 확장하여 스크리닝 조건을 검토하거나, Strasmore 터미널에서 원하는 기준을 설정하여 직접 재구성할 수 있습니다.