Strasmore Research
Learn am Matt ConnorBy Matt Connor

Bullish Candlestick Patterns: Dem Dey Work?

Bullish candlestick pattern like hammer and engulfing: we count how many time the next day close up for big US stock, and we show the base rate beside am.

Bullish candlestick pattern na the green candle shape wey trader dey point at when dem wan talk say buyer hold the day. Four number dey make am: the open, the high, the low and the close of one trading day. Wetin dis page go do na to break the anatomy first, name the common bullish ones for plain talk with the English term beside am, then count how many time the next day really close up, so you go see number instead of story.

Wetin one candle carry inside

One candle na one whole trading day wey dem squeeze enter one small picture. The fat part for the middle na the body, and e dey run from the open price to the close price. When the close pass the open, the body dey green (plenty app dey paint am white or hollow). When the close drop below the open, e dey red. The thin line wey dey comot for top and for bottom na the wick, some people dey call am shadow. The tip of the upper wick na the highest price wey the day touch, the bottom of the lower wick na the lowest. If you wan see how the four number dey take enter one bar for the first place, how OHLCV bar dey take form break am down step by step.

The panel below pin real AAPL session for one fixed stretch of May 2025, so the number no go shift under you.

QueryFifteen AAPL session: open, high, low, close
session_dateday_labelcandle_colouropen_pricehigh_pricelow_priceclose_price
2025-05-01May 1green209.08214.56208.9213.32
2025-05-02May 2red206.09206.99202.16205.35
2025-05-05May 5red203.1204.1198.21198.89
2025-05-06May 6green198.21200.65197.02198.51
2025-05-07May 7red199.17199.44193.25196.25
2025-05-08May 8red197.72200.05194.68197.49
2025-05-09May 9red199200.54197.54198.53
2025-05-12May 12red210.97211.27206.75210.79
2025-05-13May 13green210.43213.4209212.93
2025-05-14May 14red212.43213.94210.58212.33
2025-05-15May 15green210.95212.96209.54211.45
2025-05-16May 16red212.36212.57209.77211.26
2025-05-19May 19green207.91209.48204.26208.78
2025-05-20May 20red207.67208.47205.03206.86
2025-05-21May 21red205.17207.04200.71202.09
The exact SQL behind every number
SELECT
    toString(date)                    AS session_date,
    formatDateTime(date, '%b %e')     AS day_label,
    if(close >= open, 'green', 'red') AS candle_colour,
    round(toFloat64(open), 2)         AS open_price,
    round(toFloat64(high), 2)         AS high_price,
    round(toFloat64(low), 2)          AS low_price,
    round(toFloat64(close), 2)        AS close_price
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
  AND date >= '2025-05-01'
  AND date <= '2025-05-21'
ORDER BY date
Run am yourself

Check the first row. For May 1, AAPL open for $209.08 and close for $213.32, so the candle for that day na green. The same day touch $214.56 for up and $208.9 for down. The distance between the close line and the high line na the upper wick. The distance between the close line and the low line na the lower wick. Na those wick, plus how big the body be inside the full range of the day, na im every bullish pattern dey read. The panel carry 15 session, and na the same four number dey repeat for every single one of dem.

Which candle pattern dem dey call bullish?

Four name dey show for almost every beginner list. Make we put dem for plain talk.

  • Hammer: the body small and e sit near the top of the day range, then one long lower wick dey hang under am like hammer handle. The description na say price fall well well inside the day, then e climb back before the bell.
  • Bullish engulfing, the candle wey swallow: yesterday candle red and small, today candle green and e wide pass am, so today body cover yesterday body finish.
  • Piercing line: yesterday red, today open below yesterday close, then today close climb back pass the middle of yesterday body without reaching yesterday open.
  • Morning star: three candle for a row. One big red, then one small candle wey barely move (na the star), then one strong green wey recover better part of the first one.

Notice say every single one of dem na description of shape. Nobody promise you anything inside the definition. The question wey matter na simple: when the shape show, wetin the next day do?

The pattern dey work? Make we count am

Make we settle am with counting. The panel below take ten liquid US large cap (AAPL, MSFT, NVDA, JPM, JNJ, KO, PG, WMT, XOM and HD), waka through ten year of daily bar from the start of 2016 to the end of 2025, flag every day wey match the shape rule, then check one simple thing: the next session close higher pass today close, yes or no. The last column na the base rate, meaning wetin any ordinary day for the same ten name over the same ten year dey do.

QueryNext day up rate after each bullish pattern, against the base rate
patternsignal_countnext_day_up_pctany_day_up_pct
Hammer210054.552.8
Bullish engulfing90748.352.8
Piercing line38049.752.8
The exact SQL behind every number
WITH marked AS
(
    SELECT
        multiIf(
            least(o, c) - l >= 2 * abs(c - o) AND h - greatest(o, c) <= 0.25 * (h - l),
                'Hammer',
            prev_c < prev_o AND c > o AND c >= prev_o AND o <= prev_c,
                'Bullish engulfing',
            prev_c < prev_o AND o < prev_c AND c < prev_o
                AND c > prev_c + (prev_o - prev_c) / 2,
                'Piercing line',
            'Ordinary day')  AS pattern,
        if(next_c > c, 1, 0) AS next_up
    FROM
    (
        SELECT
            toFloat64(open)               AS o,
            toFloat64(high)               AS h,
            toFloat64(low)                AS l,
            toFloat64(close)              AS c,
            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),
            fwd  AS (PARTITION BY ticker ORDER BY date
                     ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
    )
    WHERE h > l AND prev_c > 0 AND next_c > 0
)
SELECT
    m.pattern                      AS pattern,
    count()                        AS signal_count,
    round(100 * avg(m.next_up), 1) AS next_day_up_pct,
    any(b.base_up_pct)             AS any_day_up_pct
FROM marked AS m
CROSS JOIN
(
    SELECT round(100 * avg(next_up), 1) AS base_up_pct
    FROM marked
) AS b
WHERE m.pattern != 'Ordinary day'
GROUP BY m.pattern
ORDER BY multiIf(m.pattern = 'Hammer', 1, m.pattern = 'Bullish engulfing', 2, 3)
Run am yourself

Hammer show 2100 time across the ten name, and the next day close up 54.5% of the time. Bullish engulfing show 907 time with 48.3%. Piercing line show 380 time with 49.7%. Now put all of dem beside the last column: any day at all for the same basket over the same ten year close up 52.8% of the time.

That last number na the whole lesson. Big US stock dey close green a little over half the time when you stretch am across years, candle or no candle. So any hit rate wey sit near that base rate never tell you anything special, e just tell you say the market dey do wetin e dey always do. Wetin you suppose look na the distance between the pattern column and the base column, no be the height of the pattern column by itself.

Wetin exactly we count

Hammer for here mean the lower wick reach two times the body or more, and the upper wick no pass a quarter of the full day range. Bullish engulfing mean yesterday close below yesterday open, today close above today open, today close reach yesterday open or pass am, and today open sit for yesterday close or below am. Piercing line mean yesterday red, today open below yesterday close, and today close land above the middle of yesterday body but still below yesterday open. Any day wey fit match two rule dey counted once, under the first rule wey catch am, hammer first. The outcome test na one thing only: next session close against today close, no stop, no target, no holding period pass one day.

Same hammer, different name

One thing wey beginner list no dey mention na say the same rule no dey behave the same way on every stock. The panel below split the hammer test per ticker.

QueryHammer next day up rate, name by name
tickerhammer_counthammer_next_up_pctany_day_up_pct
KO22458.952.5
AAPL20158.253.6
WMT1935753.5
MSFT23356.753.7
PG18856.452.7
HD21053.852.5
JNJ21653.251.8
NVDA21451.454.6
JPM21050.552.1
XOM21349.350.9
The exact SQL behind every number
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
Run am yourself

KO sit for the top of the panel with 58.9% after 224 hammer, while XOM dey for the bottom with 49.3% after 213. Na the same shape rule, same ten year, same one day test. When number spread reach like that across ten ordinary large cap, the correct reading no be say one stock like hammer pass the other one. The correct reading na say the count small and the noise plenty. Number wey stand on two hundred observation fit swing well well the next ten year.

Volume and where the candle land matter pass the candle

People wey don tey for chart dey always talk say the candle alone no mean anything until you check volume. Relative volume na today volume divided by the recent average volume for the same stock, and relative volume show you how the calculation dey work. The panel below take only the bullish engulfing day from the same ten name, then split dem three way by how today volume take compare to the twenty session average before am.

QueryBullish engulfing, split by relative volume
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
The exact SQL behind every number
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)
Run am yourself

For the quiet bucket, wey be Volume under the 20 day average, the next session close up 47% of the time across 598 day. For the loud bucket, Volume above 1.5x the average, e be 48.3% across 60 day. Carry the two number go back to the 52.8% base rate for the section before and measure the distance yourself. Na that distance be the evidence, no be the story wey person attach to the picture.

The honest caveat

Candle na context clue, e no be signal. Two thing dey change wetin the same shape mean, and the two no dey inside the candle at all.

The first one na where the candle land inside the trend. One hammer wey show after price don dey fall for three week no be the same situation as one hammer wey show inside one flat sideways stretch, even if the two look exactly alike on your screen. The shape no carry the trend inside am. Na you dey bring the trend.

The second one na the tape around am. A candle wey open far away from yesterday close na gap, and gap get im own behaviour wey whether gap dey fill cover with number. A green candle wey print for fresh yearly high no dey sit for the same place as the same green candle for the middle of the range, and 52 week high and low show how those level dey take behave. Volume dey talk too, as the panel above show.

And sample size na the quiet one wey dey scatter plenty argument. Four hammer on one ticker no be evidence. Na why every panel for dis page carry the count column beside the percentage. Nothing for here na advice to buy or sell anything, na how to read the picture, and how to count am so you no go fall for sweet mouth.

FAQ

Bullish candlestick pattern dey really work?

Dem dey describe wetin happen for the day, dem no dey predict tomorrow. For the ten year count on this page, the pattern hit rate land close to the 52.8% base rate wey any random day for the same big US stock already dey give. Anybody wey tell you say one candle shape get magic edge suppose show you the count first.

Wetin be the difference between hammer and hanging man?

Na exactly the same shape: small body for top, long lower wick under am. The only difference na where e land. When e show after price don dey drop, people dey call am hammer. When the same shape show after price don dey climb, dem dey call am hanging man. The candle alone no fit tell you which one e be.

Body or wick, which one matter pass?

The body tell you where the day open and where e close, so na the part wey show who finish the day with control. The wick tell you how far price waka and come back. Hammer and morning star both dey lean on the wick, while bullish engulfing dey lean on the body. You need the two, plus the day before am.

Candle pattern dey work for five minute chart too?

The anatomy na the same for any timeframe, five minute, one hour or one week, na just the period wey change. But the number for this page na daily bar for US large cap only. If you change the timeframe or you change the market, you gats count am fresh for that timeframe before you believe any hit rate.

How many candle dey make morning star?

Three. One big red day, then one small quiet day, then one strong green day wey recover better part of the first one. E need three day for a row, and e dey show far less than hammer or bullish engulfing on the same stretch of history.


Every panel for this page carry the exact SQL under am, open any one make you see how we count each number. If you wan run the same count with your own ticker or your own stretch of year, you fit ask the question for plain English for the Strasmore terminal.

#candlesticks#chart patterns#technical analysis#price action#beginners