{"slug":"what-is-the-efficient-market-hypothesis","qid":"next_day","label":"What followed each kind of session: next-day outcome by the prior day's move, same twelve names","post_title":"What Is the Efficient Market Hypothesis?","post_url":"/blog/what-is-the-efficient-market-hypothesis#q-next_day","columns":["prior_day_move","observations","next_day_median_pct","next_day_up_share_pct"],"rows":[{"prior_day_move":"1. down 3% or more","observations":664,"next_day_median_pct":0.175,"next_day_up_share_pct":52.9},{"prior_day_move":"2. down 1 to 3%","observations":2432,"next_day_median_pct":0.002,"next_day_up_share_pct":50},{"prior_day_move":"3. flat, within 1%","observations":8503,"next_day_median_pct":0.076,"next_day_up_share_pct":53.1},{"prior_day_move":"4. up 1 to 3%","observations":2737,"next_day_median_pct":0.104,"next_day_up_share_pct":53.6},{"prior_day_move":"5. up 3% or more","observations":696,"next_day_median_pct":0.186,"next_day_up_share_pct":53.9}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS dt,\n           argMax(toFloat64(close), window_start) AS close_px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY','AAPL','MSFT','KO','JNJ','XOM','JPM','WMT','NVDA','TSLA','PG','HD')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-07-01')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY ticker, dt\n),\nreturns AS (\n    SELECT ticker, dt,\n           close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret\n    FROM daily\n),\npaired AS (\n    SELECT ticker, ret * 100 AS ret_pct,\n           lagInFrame(ret) OVER (PARTITION BY ticker ORDER BY dt) * 100 AS prev_pct\n    FROM returns\n    WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5\n)\nSELECT multiIf(prev_pct <= -3, '1. down 3% or more',\n               prev_pct <= -1, '2. down 1 to 3%',\n               prev_pct < 1,  '3. flat, within 1%',\n               prev_pct < 3,  '4. up 1 to 3%',\n               '5. up 3% or more') AS prior_day_move,\n       count() AS observations,\n       round(median(ret_pct), 3) AS next_day_median_pct,\n       round(100 * countIf(ret_pct > 0) / count(), 1) AS next_day_up_share_pct\nFROM paired\nWHERE prev_pct IS NOT NULL\nGROUP BY prior_day_move\nORDER BY prior_day_move","computed_at":"2026-07-31T03:10:47.864041+00:00","elapsed":0.00395987}