What is this?
Each pattern below carries its definition, the trading scenario where it works, and a complete strategy expression that runs end-to-end in the backtester. Tap Use Pattern to open Strategy Lab with the expression pre-filled — pick a universe and timeframe, then run it. Click a card to expand the trading-scenario notes and the underlying engine code. Use Multi-Pattern Mode (select 2+) to combine patterns with AND / OR / SUM logic.
Multi-Pattern Mode
0 selected
AND — all patterns must fire (strict)
OR — any pattern fires (broad)
SUM — combine ranks (weighted)
Use Selected Patterns
Clear
Click checkbox on each pattern to add. Click card to expand.
Select
Reversal
Hammer
Bullish
Small body at the top with a long lower shadow (at least 2x body). Signifies rejection of lower prices.
Trading Scenario
Most reliable during a downtrend. Look for a large bullish candle following this hammer to confirm the reversal.
Engine Expression
order(normalize(if_else(logical_and(gt(lower_shadow(), multiply(2, body_size())), lt(upper_shadow(), multiply(0.1, lower_shadow()))), rank('Close'), neg(rank('Close')))), 0.75, 0.25, 1)
Select
Reversal
Inverted Hammer
Bullish
Small body at the bottom with a long upper shadow. Suggests buyers are starting to push back after a downtrend.
Trading Scenario
Excellent for spotting early reversals in a downtrend. Ensure the next candle opens above the hammer's body.
Engine Expression
order(normalize(if_else(logical_and(gt(upper_shadow(), multiply(2, body_size())), lt(lower_shadow(), multiply(0.1, upper_shadow()))), rank('Close'), neg(rank('Close')))), 0.75, 0.25, 1)
Select
Reversal
Bullish Engulfing
Bullish
A large green body that completely covers the previous day's red body. Strong reversal signal.
Trading Scenario
Highly potent after a prolonged descent. Use as a strong signal to exit shorts or initiate long-only modes.
Engine Expression
order(normalize(if_else(logical_and(gt('Close', 'Open'), logical_and(lt(delay('Close', 1), delay('Open', 1)), logical_and(gt('Close', delay('Open', 1)), lt('Open', delay('Close', 1))))), rank('Close'), neg(rank('Close')))), 0.8, 0.2, 1)
Select
Reversal
Dragonfly Doji
Bullish
T-shaped candle with no body and a very long lower shadow. Bullish rejection at support.
Trading Scenario
Look for this near major support levels. It indicates total seller exhaustion and is a high-conviction reversal sign.
Engine Expression
order(normalize(if_else(logical_and(lt(body_size(), multiply(0.05, candle_range())), lt(upper_shadow(), multiply(0.05, candle_range()))), rank('Close'), neg(rank('Close')))), 0.8, 0.2, 1)
Select
Reversal
Piercing Line
Bullish
Current green candle opens below previous low but closes above the midpoint of the previous red body.
Trading Scenario
Best used in sideways markets or shallow pullbacks to identify where buyers are stepping back in.
Engine Expression
order(normalize(if_else(logical_and(lt(delay('Close', 1), delay('Open', 1)), logical_and(gt('Close', 'Open'), logical_and(lt('Open', delay('Low', 1)), gt('Close', add(delay('Close', 1), multiply(0.5, abs_val(subtract(delay('Open', 1), delay('Close', 1))))))))), rank('Close'), neg(rank('Close')))), 0.75, 0.25, 1)
Select
Reversal
Morning Star
Bullish
Three-candle pattern: Tall red, small indecisive middle, tall green candle. Classic reversal.
Trading Scenario
One of the most reliable 3-day patterns. Trade if the third candle's volume is higher than the first.
Engine Expression
order(normalize(if_else(logical_and(lt(delay('Close', 2), delay('Open', 2)), logical_and(lt(abs_val(subtract(delay('Open', 1), delay('Close', 1))), multiply(0.2, abs_val(subtract(delay('Open', 2), delay('Close', 2)))), gt('Close', delay('Open', 2)))), rank('Close'), neg(rank('Close')))), 0.85, 0.15, 1)
Select
Reversal
Shooting Star
Bearish
Small body at the bottom with a long upper shadow (2x body). Signifies rejection of higher prices.
Trading Scenario
Reliable at the peak of an uptrend. If price fails to break the star's high, expect a significant correction.
Engine Expression
order(normalize(if_else(logical_and(gt(upper_shadow(), multiply(2, body_size())), lt(lower_shadow(), multiply(0.1, upper_shadow()))), neg(rank('Close')), rank('Close'))), 0.25, 0.75, 1)
Select
Reversal
Hanging Man
Bearish
Looks like a Hammer but appears at the top of an uptrend, signaling potential exhaustion.
Trading Scenario
Beware: looks bullish but indicates that the price is finally vulnerable to selling pressure at the top.
Engine Expression
order(normalize(if_else(logical_and(gt(lower_shadow(), multiply(2, body_size())), lt(upper_shadow(), multiply(0.1, lower_shadow()))), neg(rank('Close')), rank('Close'))), 0.25, 0.75, 1)
Select
Reversal
Bearish Engulfing
Bearish
A large red body that completely covers the previous day's green body.
Trading Scenario
A classic 'Sell' signal. Most effective on daily timeframes following a multi-day rally.
Engine Expression
order(normalize(if_else(logical_and(lt('Close', 'Open'), logical_and(gt(delay('Close', 1), delay('Open', 1)), logical_and(lt('Close', delay('Open', 1)), gt('Open', delay('Close', 1))))), neg(rank('Close')), rank('Close'))), 0.2, 0.8, 1)
Select
Reversal
Gravestone Doji
Bearish
Upside-down T candle with no body and long upper shadow. Bearish rejection at resistance.
Trading Scenario
The counterpart to the Dragonfly. Signals a failed attempt to rally; target short positions towards previous lows.
Engine Expression
order(normalize(if_else(logical_and(lt(body_size(), multiply(0.05, candle_range())), lt(lower_shadow(), multiply(0.05, candle_range()))), neg(rank('Close')), rank('Close'))), 0.2, 0.8, 1)
Select
Reversal
Dark Cloud Cover
Bearish
Current red candle opens above previous high but closes below the midpoint of the previous green body.
Trading Scenario
Watch for this after an earnings rally or overextended move. Confirms sellers are returning in force.
Engine Expression
order(normalize(if_else(logical_and(gt(delay('Close', 1), delay('Open', 1)), logical_and(lt('Close', 'Open'), logical_and(gt('Open', delay('High', 1)), lt('Close', subtract(delay('Close', 1), multiply(0.5, body_size(delay('Open', 1), delay('Close', 1)))))))), neg(rank('Close')), rank('Close'))), 0.25, 0.75, 1)
Select
Reversal
Evening Star
Bearish
Three-candle pattern: Tall green, small middle, tall red candle closing deep into the first body.
Trading Scenario
Powerful top-reversal sign. Use to start profit-taking or switch to bearish momentum modes.
Engine Expression
order(normalize(if_else(logical_and(gt(delay('Close', 2), delay('Open', 2)), logical_and(lt(abs_val(subtract(delay('Open', 1), delay('Close', 1))), multiply(0.2, abs_val(subtract(delay('Open', 2), delay('Close', 2)))), lt('Close', delay('Open', 2)))), neg(rank('Close')), rank('Close'))), 0.15, 0.85, 1)
Select
Momentum
Bullish Marubozu
Bullish
Solid green body with little to no shadows. Shows total buyer dominance from open to close.
Trading Scenario
Best for trend confirmation. If this breaks a resistance level, the breakout is likely extremely strong.
Engine Expression
order(normalize(divide(body_size(), maximum(candle_range(), 0.001))), 0.6, 0.4, 1)
Select
Momentum
Bearish Marubozu
Bearish
Solid red body with little to no shadows. Shows total seller dominance.
Trading Scenario
Indicates panic selling. Use with high-frequency rebalancing to capture rapid downward moves.
Engine Expression
order(normalize(if_else(logical_and(lt('Close', 'Open'), gt(divide(body_size(), maximum(candle_range(), 0.001)), 0.95)), neg(rank('Close')), rank('Close'))), 0.2, 0.8, 1)
Select
Indecision
Doji
Neutral
Classic Doji where the range is large but the body is tiny. High indecision.
Trading Scenario
Don't trade blindly. Wait for a breakout of the Doji's high or low to determine the next trend direction.
Engine Expression
order(normalize(neg(divide(body_size(), maximum(candle_range(), 0.001)))), 0.55, 0.45, 1)
Select
Indecision
Spinning Top
Neutral
Small body with long upper and lower shadows of nearly equal length.
Trading Scenario
Often found at the end of trends. Signals exhausting momentum; prepare for a reversal or consolidation.
Engine Expression
order(normalize(if_else(logical_and(lt(body_size(), multiply(0.3, candle_range())), lt(abs_val(subtract(upper_shadow(), lower_shadow())), multiply(0.1, candle_range()))), neg(abs_val(returns())), rank('Close'))), 0.55, 0.45, 1)