{"slug":"day-trading-strategies-explained","qid":"gap_buckets","label":"gap_buckets","post_title":"day-trading-strategies-explained","post_url":"/blog/lang/pcm/day-trading-strategies-explained#q-gap_buckets","columns":["gap_bucket","sessions","median_rvol","median_range_pct"],"rows":[{"gap_bucket":"under 0.5%","sessions":1043,"median_rvol":0.89,"median_range_pct":1.68},{"gap_bucket":"0.5% to 1%","sessions":485,"median_rvol":0.92,"median_range_pct":2.08},{"gap_bucket":"1% to 2%","sessions":317,"median_rvol":0.97,"median_range_pct":2.63},{"gap_bucket":"2% to 4%","sessions":142,"median_rvol":0.97,"median_range_pct":3.56},{"gap_bucket":"4% and up","sessions":45,"median_rvol":1.38,"median_range_pct":5.2}],"shape":"ranking","sql":"WITH dedup AS (\n    SELECT\n        ticker,\n        date,\n        toFloat64(any(open))   AS o,\n        toFloat64(any(close))  AS c,\n        toFloat64(any(high))   AS h,\n        toFloat64(any(low))    AS l,\n        toFloat64(max(volume)) AS vol\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'AMD', 'F', 'T')\n      AND date >= today() - 420\n      AND date <  today()\n    GROUP BY ticker, date\n),\nwindowed AS (\n    SELECT\n        ticker,\n        date,\n        o, c, h, l, vol,\n        lagInFrame(c, 1) OVER (\n            PARTITION BY ticker ORDER BY date\n            ROWS BETWEEN 1 PRECEDING AND CURRENT ROW\n        ) AS prev_close,\n        avg(vol) OVER (\n            PARTITION BY ticker ORDER BY date\n            ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING\n        ) AS base_vol\n    FROM dedup\n),\ngaps AS (\n    SELECT\n        ticker,\n        date,\n        abs(o / prev_close - 1) * 100 AS gap_pct,\n        vol / base_vol                AS rvol,\n        (h - l) / o * 100             AS range_pct\n    FROM windowed\n    WHERE prev_close > 0\n      AND base_vol > 0\n      AND o > 0\n      AND date >= today() - 370\n)\nSELECT\n    multiIf(gap_pct < 0.5, 'under 0.5%',\n            gap_pct < 1.0, '0.5% to 1%',\n            gap_pct < 2.0, '1% to 2%',\n            gap_pct < 4.0, '2% to 4%',\n            '4% and up') AS gap_bucket,\n    count()                                                                   AS sessions,\n    round(quantileDeterministic(0.5)(rvol, cityHash64(ticker, date)), 2)      AS median_rvol,\n    round(quantileDeterministic(0.5)(range_pct, cityHash64(ticker, date)), 2) AS median_range_pct\nFROM gaps\nGROUP BY gap_bucket\nORDER BY min(gap_pct)","computed_at":"2026-10-09T16:04:09.668230+00:00","elapsed":0.179046261}