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.
| volume_bucket | signal_count | next_day_up_pct |
|---|---|---|
| Volume under the 20 day average | 598 | 47 |
| Volume 1x to 1.5x the average | 260 | 51.2 |
| Volume above 1.5x the average | 60 | 48.3 |
- Rows × columns
- 3 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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)
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.