hammer_by_ticker
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.
| ticker | hammer_count | hammer_next_up_pct | any_day_up_pct |
|---|---|---|---|
| KO | 224 | 58.9 | 52.5 |
| AAPL | 201 | 58.2 | 53.6 |
| WMT | 193 | 57 | 53.5 |
| MSFT | 233 | 56.7 | 53.7 |
| PG | 188 | 56.4 | 52.7 |
| HD | 210 | 53.8 | 52.5 |
| JNJ | 216 | 53.2 | 51.8 |
| NVDA | 214 | 51.4 | 54.6 |
| JPM | 210 | 50.5 | 52.1 |
| XOM | 213 | 49.3 | 50.9 |
- Rows × columns
- 10 × 4
- 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 |
|---|---|---|---|
ticker |
text | 10 distinct values (AAPL, HD, JNJ…) | |
hammer_count |
number | 188 to 233 | count |
hammer_next_up_pct |
number | 49.3 to 58.9 | percent |
any_day_up_pct |
number | 50.9 to 54.6 | 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
ticker,
countIf(is_hammer) AS hammer_count,
round(100 * avgIf(next_up, is_hammer), 1) AS hammer_next_up_pct,
round(100 * avg(next_up), 1) AS any_day_up_pct
FROM
(
SELECT
ticker,
if(least(o, c) - l >= 2 * abs(c - o)
AND h - greatest(o, c) <= 0.25 * (h - l), 1, 0) AS is_hammer,
if(next_c > c, 1, 0) AS next_up
FROM
(
SELECT
ticker,
toFloat64(open) AS o,
toFloat64(high) AS h,
toFloat64(low) AS l,
toFloat64(close) AS 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
fwd AS (PARTITION BY ticker ORDER BY date
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
)
WHERE h > l AND next_c > 0
)
GROUP BY ticker
HAVING countIf(is_hammer) >= 20
ORDER BY hammer_next_up_pct DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.