STRASMORE/EXPLORE 2,595 QUERIES

engulfing_by_volume

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-25, from bullish-candlestick-patterns.

as of ranking 3×3read in context →
engulfing_by_volume — 3 rows by 3 columns, computed from US exchange, SIP and OPRA data.
volume_bucketsignal_countnext_day_up_pct
Volume under the 20 day average59847
Volume 1x to 1.5x the average26051.2
Volume above 1.5x the average6048.3
Rows × columns
3 × 3
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for engulfing_by_volume, derived from the stored result.
ColumnTypeRangeNotes
volume_bucket text 3 distinct values
signal_count number 60 to 598 count
next_day_up_pct number 47 to 51.2 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

SELECT
    volume_bucket,
    count()                      AS signal_count,
    round(100 * avg(next_up), 1) AS next_day_up_pct
FROM
(
    SELECT
        multiIf(rvol < 1,   'Volume under the 20 day average',
                rvol < 1.5, 'Volume 1x to 1.5x the average',
                            'Volume above 1.5x the average') AS volume_bucket,
        if(next_c > c, 1, 0)                                 AS next_up
    FROM
    (
        SELECT
            toFloat64(open)               AS o,
            toFloat64(close)              AS c,
            toFloat64(volume) / nullIf(avg(toFloat64(volume)) OVER prior20, 0) AS rvol,
            lagInFrame(toFloat64(open))   OVER back AS prev_o,
            lagInFrame(toFloat64(close))  OVER back AS prev_c,
            leadInFrame(toFloat64(close)) OVER fwd  AS next_c
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('AAPL','MSFT','NVDA','JPM','JNJ','KO','PG','WMT','XOM','HD')
          AND date >= '2016-01-01'
          AND date <= '2025-12-31'
        WINDOW
            back    AS (PARTITION BY ticker ORDER BY date
                        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
            prior20 AS (PARTITION BY ticker ORDER BY date
                        ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING),
            fwd     AS (PARTITION BY ticker ORDER BY date
                        ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
    )
    WHERE prev_c > 0 AND next_c > 0 AND rvol > 0
      AND prev_c < prev_o AND c > o AND c >= prev_o AND o <= prev_c
)
GROUP BY volume_bucket
ORDER BY multiIf(volume_bucket = 'Volume under the 20 day average', 1,
                 volume_bucket = 'Volume 1x to 1.5x the average', 2, 3)
⌘/Ctrl + Enter

Use dis data for your AI assistant

E go open ready to query, with dis page data. Free, no account.