recent_wedges
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-10-06, from falling-wedge-pattern.
| signal_date | signal_label | ticker | five_day_fall_pct | fwd_20_pct |
|---|---|---|---|---|
| 2026-01-05 | Jan 5, 2026 | PG | 3.02 | 10.65 |
| 2026-01-05 | Jan 5, 2026 | MCD | 3.48 | 6.54 |
| 2026-01-06 | Jan 6, 2026 | PEP | 3.66 | 19.59 |
| 2026-03-09 | Mar 9, 2026 | NKE | 7.34 | -24.48 |
| 2026-04-28 | Apr 28, 2026 | HD | 4.32 | -3.41 |
| 2026-04-29 | Apr 29, 2026 | HD | 4.92 | -0.5 |
| 2026-05-11 | May 11, 2026 | T | 4.71 | -8.69 |
| 2026-07-24 | Jul 24, 2026 | AMZN | 6.12 | 11.43 |
| 2026-08-12 | Aug 12, 2026 | NKE | 4.57 | -9.6 |
| 2026-08-20 | Aug 20, 2026 | INTC | 11.89 | 17.88 |
| 2026-08-31 | Aug 31, 2026 | GS | 1 | -10.69 |
| 2026-09-01 | Sep 1, 2026 | HD | 5.36 | -11.03 |
- Rows × columns
- 12 × 5
- Period covered
- to
- 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 |
|---|---|---|---|
signal_date |
date | 2026-01-05 to 2026-09-01 | |
signal_label |
text | 11 distinct values (Apr 28, 2026, Apr 29, 2026, Aug 12, 2026…) | |
ticker |
text | 9 distinct values (AMZN, GS, HD…) | |
five_day_fall_pct |
number | 1 to 11.89 | percent |
fwd_20_pct |
number | -24.48 to 19.59 | 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.
WITH
bars AS (
SELECT
ticker,
date,
toFloat64(high) AS hi,
toFloat64(low) AS lo,
toFloat64(close) AS px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','META','TSLA','AVGO','JPM','BAC','WFC','GS','KO','PEP','PG','JNJ','PFE','MRK','XOM','CVX','WMT','HD','MCD','NKE','CSCO','INTC','IBM','T','VZ','DIS')
AND date >= '2010-01-04'
AND date <= '2026-09-30'
),
split_dates AS (
SELECT
ticker,
groupArray(execution_date) AS split_days
FROM
(
SELECT ticker, execution_date
FROM global_markets.stocks_splits
WHERE execution_date >= '2009-10-01'
GROUP BY ticker, execution_date
)
GROUP BY ticker
),
stepped AS (
SELECT
ticker,
date,
px,
hi - lo AS rng,
if(hi < lagInFrame(hi, 1) OVER w AND lo < lagInFrame(lo, 1) OVER w, 1, 0) AS lower_both
FROM bars
WINDOW w AS (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
),
feat AS (
SELECT
ticker,
date,
px,
sum(lower_both) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS wedge_streak,
avg(rng) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS rng5,
groupArray(rng) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 64 PRECEDING AND 5 PRECEDING) AS prior_rng,
lagInFrame(px, 5) OVER wf AS px_back5,
leadInFrame(px, 5) OVER wf AS px_fwd5,
leadInFrame(px, 10) OVER wf AS px_fwd10,
leadInFrame(px, 20) OVER wf AS px_fwd20
FROM stepped
WINDOW wf AS (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
),
scored AS (
SELECT
f.ticker AS ticker,
f.date AS date,
f.px AS px,
f.px_back5 AS px_back5,
f.px_fwd20 AS px_fwd20,
if(f.wedge_streak = 4 AND f.rng5 < arraySort(f.prior_rng)[15], 1, 0) AS is_wedge
FROM feat AS f
LEFT JOIN split_dates AS s ON s.ticker = f.ticker
WHERE length(f.prior_rng) = 60
AND f.px_back5 > 0
AND f.px_fwd5 > 0
AND f.px_fwd10 > 0
AND f.px_fwd20 > 0
AND NOT arrayExists(d -> (d >= f.date - 10) AND (d <= f.date + 32), s.split_days)
)
SELECT
signal_date,
signal_label,
ticker,
five_day_fall_pct,
fwd_20_pct
FROM
(
SELECT
toString(date) AS signal_date,
formatDateTime(date, '%b %e, %Y') AS signal_label,
ticker,
round(abs(100 * (px / px_back5 - 1)), 2) AS five_day_fall_pct,
round(100 * (px_fwd20 / px - 1), 2) AS fwd_20_pct
FROM scored
WHERE is_wedge = 1
ORDER BY date DESC
LIMIT 12
)
ORDER BY signal_date ASC
Use dis data for your AI assistant
E go open ready to query, with dis page data. Free, no account.