{"slug":"ai-daily-market-research-reports","qid":"next_session_followthrough","label":"What the next session did: 36 large caps bucketed by the prior day's move, Aug 2024 to Jul 2026","post_title":"AI Daily Market Research Reports: What Breaks","post_url":"/blog/ai-daily-market-research-reports#q-next_session_followthrough","columns":["prior_day_bucket","ticker_day_count","prior_day_move_pct","next_day_move_pct","same_direction_pct"],"rows":[{"prior_day_bucket":"fell 3% or more","ticker_day_count":649,"prior_day_move_pct":-4.33,"next_day_move_pct":0.474,"same_direction_pct":47.3},{"prior_day_bucket":"fell 1% to 3%","ticker_day_count":3219,"prior_day_move_pct":-1.69,"next_day_move_pct":0.046,"same_direction_pct":49.5},{"prior_day_bucket":"moved less than 1%","ticker_day_count":10100,"prior_day_move_pct":0.01,"next_day_move_pct":0.009,"same_direction_pct":50.3},{"prior_day_bucket":"rose 1% to 3%","ticker_day_count":3430,"prior_day_move_pct":1.67,"next_day_move_pct":-0.039,"same_direction_pct":50.2},{"prior_day_bucket":"rose 3% or more","ticker_day_count":602,"prior_day_move_pct":4.57,"next_day_move_pct":-0.102,"same_direction_pct":49.3}],"shape":"table","sql":"WITH daily AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           (argMax(close, window_start) / argMin(open, window_start) - 1) * 100 AS move_pct\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','META','TSLA','AVGO','JPM','XOM',\n                     'JNJ','WMT','PG','KO','HD','CVX','MRK','PEP','COST','CSCO',\n                     'ORCL','CRM','AMD','NFLX','DIS','BA','CAT','IBM','T','VZ',\n                     'PFE','NKE','MCD','UNH','BAC','QCOM')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')\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, d\n),\npaired AS (\n    SELECT ticker,\n           d,\n           move_pct,\n           leadInFrame(move_pct) OVER (PARTITION BY ticker ORDER BY d ASC\n                                       ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_move_pct,\n           row_number() OVER (PARTITION BY ticker ORDER BY d ASC) AS rn,\n           count() OVER (PARTITION BY ticker) AS session_total\n    FROM daily\n),\nlabelled AS (\n    SELECT multiIf(move_pct <= -3, 'fell 3% or more',\n                   move_pct <= -1, 'fell 1% to 3%',\n                   move_pct < 1, 'moved less than 1%',\n                   move_pct < 3, 'rose 1% to 3%',\n                   'rose 3% or more') AS prior_day_bucket,\n           multiIf(move_pct <= -3, 1,\n                   move_pct <= -1, 2,\n                   move_pct < 1, 3,\n                   move_pct < 3, 4,\n                   5) AS bucket_rank,\n           move_pct,\n           next_move_pct\n    FROM paired\n    WHERE rn < session_total\n)\nSELECT prior_day_bucket,\n       count() AS ticker_day_count,\n       round(avg(move_pct), 2) AS prior_day_move_pct,\n       round(avg(next_move_pct), 3) AS next_day_move_pct,\n       round(100 * countIf((move_pct > 0) = (next_move_pct > 0)) / count(), 1) AS same_direction_pct\nFROM labelled\nGROUP BY prior_day_bucket, bucket_rank\nORDER BY bucket_rank ASC","computed_at":"2026-08-01T08:50:21.890048+00:00","elapsed":0.004858325}