{"slug":"biggest-stock-movers-2026","qid":"splits_excluded","label":"Excluded from the boards: 2026 splits large enough to fake a year-to-date move","post_title":"Biggest Stock Gainers & Losers of 2026","post_url":"/blog/biggest-stock-movers-2026#q-splits_excluded","columns":["ticker","unadjusted_ytd_pct","split_price_effect_pct","split_type","split_date"],"rows":[{"ticker":"BKNG","unadjusted_ytd_pct":-96,"split_price_effect_pct":-96,"split_type":"forward split","split_date":"2026-04-06"},{"ticker":"KLAC","unadjusted_ytd_pct":-85.1,"split_price_effect_pct":-90,"split_type":"forward split","split_date":"2026-06-12"},{"ticker":"VGT","unadjusted_ytd_pct":-84.4,"split_price_effect_pct":-87.5,"split_type":"forward split","split_date":"2026-04-21"},{"ticker":"CVNA","unadjusted_ytd_pct":-83.3,"split_price_effect_pct":-80,"split_type":"forward split","split_date":"2026-05-08"},{"ticker":"VUG","unadjusted_ytd_pct":-82.1,"split_price_effect_pct":-83.3,"split_type":"forward split","split_date":"2026-04-21"},{"ticker":"HDV","unadjusted_ytd_pct":-75.4,"split_price_effect_pct":-80,"split_type":"forward split","split_date":"2026-04-29"},{"ticker":"IWF","unadjusted_ytd_pct":-74.3,"split_price_effect_pct":-75,"split_type":"forward split","split_date":"2026-04-29"},{"ticker":"VO","unadjusted_ytd_pct":-71.5,"split_price_effect_pct":-75,"split_type":"forward split","split_date":"2026-04-21"},{"ticker":"CRWD","unadjusted_ytd_pct":-57.5,"split_price_effect_pct":-75,"split_type":"stock dividend","split_date":"2026-07-02"},{"ticker":"MNST","unadjusted_ytd_pct":-38.1,"split_price_effect_pct":-50,"split_type":"stock dividend","split_date":"2026-08-11"},{"ticker":"HON","unadjusted_ytd_pct":13.3,"split_price_effect_pct":100,"split_type":"reverse split","split_date":"2026-06-29"},{"ticker":"DD","unadjusted_ytd_pct":245.5,"split_price_effect_pct":200,"split_type":"reverse split","split_date":"2026-06-24"}],"shape":"series","sql":"WITH complete AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2026-01-01 00:00:00')\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960\n    GROUP BY d\n    HAVING count() >= 380\n),\nuniverse AS (\n    SELECT ticker,\n           sum(toFloat64(close) * toFloat64(volume)) / uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS adv\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE window_start >= now() - INTERVAL 21 DAY\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= today() - 20\n      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM complete)\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960\n    GROUP BY ticker\n    HAVING adv >= 100000000\n),\nsplit_terms AS (\n    SELECT ticker,\n        argMax(split_to, execution_date) AS new_shares,\n        argMax(split_from, execution_date) AS old_shares,\n        round((old_shares / new_shares - 1) * 100, 1) AS split_price_effect_pct,\n        replaceAll(argMax(adjustment_type, execution_date), '_', ' ') AS split_type,\n        toString(max(execution_date)) AS split_date\n    FROM global_markets.stocks_splits\n    WHERE execution_date BETWEEN toDate('2026-01-01') AND today()\n    GROUP BY ticker\n    HAVING new_shares > 0 AND old_shares > 0\n       AND greatest(new_shares / old_shares, old_shares / new_shares) >= 1.25\n),\nedges AS (\n    SELECT ticker,\n        argMinIf(toFloat64(open), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS year_open,\n        argMaxIf(toFloat64(close), toTimeZone(window_start, 'America/New_York'), toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS latest_close,\n        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT min(d) FROM complete)) AS bars_open,\n        countIf(toDate(toTimeZone(window_start, 'America/New_York')) = (SELECT max(d) FROM complete)) AS bars_close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ((window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-01-10 00:00:00'))\n        OR (window_start >= now() - INTERVAL 8 DAY))\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570\n      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960\n      AND ticker NOT IN ('SPCX')\n      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')\n      AND ticker IN (SELECT ticker FROM split_terms)\n    GROUP BY ticker\n    HAVING bars_open >= 100 AND bars_close >= 100\n),\nranked AS (\n    SELECT e.ticker AS ticker,\n        round((e.latest_close / e.year_open - 1) * 100, 1) AS unadjusted_ytd_pct,\n        s.split_price_effect_pct AS split_price_effect_pct,\n        s.split_type AS split_type,\n        s.split_date AS split_date\n    FROM edges AS e\n    INNER JOIN split_terms AS s ON e.ticker = s.ticker\n    WHERE e.year_open >= 10 AND e.ticker IN (SELECT ticker FROM universe)\n)\nSELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date\nFROM (\n    SELECT ticker, unadjusted_ytd_pct, split_price_effect_pct, split_type, split_date,\n           row_number() OVER (ORDER BY unadjusted_ytd_pct ASC) AS rn_low,\n           row_number() OVER (ORDER BY unadjusted_ytd_pct DESC) AS rn_high\n    FROM ranked\n)\nWHERE rn_low <= 14 OR rn_high = 1\nORDER BY unadjusted_ytd_pct ASC","computed_at":"2026-08-25T13:02:51.051852+00:00","elapsed":6.123741765}