{"slug":"what-happens-after-a-big-one-day-gain","qid":"path_split","label":"How the next session split: gapped up, gapped up and faded, closed higher","post_title":"What Happens After a Big One-Day Gain","post_url":"/blog/what-happens-after-a-big-one-day-gain#q-path_split","columns":["gain_bucket","observations","gapped_up_pct","gapped_up_then_faded_pct","closed_higher_pct"],"rows":[{"gain_bucket":"under 10%","observations":639,"gapped_up_pct":49.3,"gapped_up_then_faded_pct":24.6,"closed_higher_pct":47.1},{"gain_bucket":"10 to 15%","observations":2647,"gapped_up_pct":48,"gapped_up_then_faded_pct":27.3,"closed_higher_pct":44.6},{"gain_bucket":"15 to 25%","observations":5689,"gapped_up_pct":45.6,"gapped_up_then_faded_pct":26,"closed_higher_pct":43},{"gain_bucket":"25 to 50%","observations":4188,"gapped_up_pct":41.9,"gapped_up_then_faded_pct":24.2,"closed_higher_pct":41.1},{"gain_bucket":"50% and up","observations":1817,"gapped_up_pct":30.3,"gapped_up_then_faded_pct":18.5,"closed_higher_pct":32.9}],"shape":"table","sql":"WITH bars AS\n(\n    SELECT\n        ticker,\n        date,\n        max(toFloat64(open))   AS o,\n        max(toFloat64(close))  AS c,\n        max(toFloat64(volume)) AS vol\n    FROM global_markets.stocks_daily_aggs\n    WHERE date >= today() - 1095\n      AND date <= today() - 2\n      AND ifNull(otc, 0) = 0\n      AND ticker NOT IN ('SPCX')\n    GROUP BY ticker, date\n),\nseq AS\n(\n    SELECT\n        ticker,\n        date,\n        c,\n        vol,\n        lagInFrame(c)     OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_c,\n        leadInFrame(o)    OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_o,\n        leadInFrame(c)    OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_c,\n        leadInFrame(date) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_date\n    FROM bars\n),\nmovers AS\n(\n    SELECT\n        date,\n        ticker,\n        100 * (c / prev_c - 1)      AS gain_pct,\n        100 * (next_o / c - 1)      AS next_gap_pct,\n        100 * (next_c / next_o - 1) AS next_oc_pct,\n        100 * (next_c / c - 1)      AS next_cc_pct,\n        row_number() OVER (PARTITION BY date ORDER BY c / prev_c DESC, ticker ASC) AS rnk\n    FROM seq\n    WHERE prev_c >= 5\n      AND next_o > 0\n      AND next_c > 0\n      AND c * vol >= 5000000\n      AND dateDiff('day', date, next_date) <= 6\n)\nSELECT\n    multiIf(gain_pct < 10, 'under 10%',\n            gain_pct < 15, '10 to 15%',\n            gain_pct < 25, '15 to 25%',\n            gain_pct < 50, '25 to 50%',\n                           '50% and up')                                       AS gain_bucket,\n    count()                                                                    AS observations,\n    round(100 * countIf(next_gap_pct > 0) / count(), 1)                         AS gapped_up_pct,\n    round(100 * countIf(next_gap_pct > 0 AND next_oc_pct < 0) / count(), 1)     AS gapped_up_then_faded_pct,\n    round(100 * countIf(next_cc_pct > 0) / count(), 1)                          AS closed_higher_pct\nFROM movers\nWHERE rnk <= 20\nGROUP BY gain_bucket\nORDER BY min(gain_pct) ASC","computed_at":"2026-09-27T15:38:14.614770+00:00","elapsed":31.818963846}