{"slug":"bullish-candlestick-patterns","qid":"engulfing_by_volume","label":"engulfing_by_volume","post_title":"bullish-candlestick-patterns","post_url":"/blog/lang/pcm/bullish-candlestick-patterns#q-engulfing_by_volume","columns":["volume_bucket","signal_count","next_day_up_pct"],"rows":[{"volume_bucket":"Volume under the 20 day average","signal_count":598,"next_day_up_pct":47},{"volume_bucket":"Volume 1x to 1.5x the average","signal_count":260,"next_day_up_pct":51.2},{"volume_bucket":"Volume above 1.5x the average","signal_count":60,"next_day_up_pct":48.3}],"shape":"ranking","sql":"SELECT\n    volume_bucket,\n    count()                      AS signal_count,\n    round(100 * avg(next_up), 1) AS next_day_up_pct\nFROM\n(\n    SELECT\n        multiIf(rvol < 1,   'Volume under the 20 day average',\n                rvol < 1.5, 'Volume 1x to 1.5x the average',\n                            'Volume above 1.5x the average') AS volume_bucket,\n        if(next_c > c, 1, 0)                                 AS next_up\n    FROM\n    (\n        SELECT\n            toFloat64(open)               AS o,\n            toFloat64(close)              AS c,\n            toFloat64(volume) / nullIf(avg(toFloat64(volume)) OVER prior20, 0) AS rvol,\n            lagInFrame(toFloat64(open))   OVER back AS prev_o,\n            lagInFrame(toFloat64(close))  OVER back AS prev_c,\n            leadInFrame(toFloat64(close)) OVER fwd  AS next_c\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker IN ('AAPL','MSFT','NVDA','JPM','JNJ','KO','PG','WMT','XOM','HD')\n          AND date >= '2016-01-01'\n          AND date <= '2025-12-31'\n        WINDOW\n            back    AS (PARTITION BY ticker ORDER BY date\n                        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n            prior20 AS (PARTITION BY ticker ORDER BY date\n                        ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING),\n            fwd     AS (PARTITION BY ticker ORDER BY date\n                        ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)\n    )\n    WHERE prev_c > 0 AND next_c > 0 AND rvol > 0\n      AND prev_c < prev_o AND c > o AND c >= prev_o AND o <= prev_c\n)\nGROUP BY volume_bucket\nORDER BY multiIf(volume_bucket = 'Volume under the 20 day average', 1,\n                 volume_bucket = 'Volume 1x to 1.5x the average', 2, 3)","computed_at":"2026-09-25T15:12:05.015632+00:00","elapsed":0.00464276}