Skip to content

Concealing Baby Swallow Pattern

The Concealing Baby Swallow is a rare and reliable four-candle bullish reversal pattern that appears in downtrends. It consists of a series of black (bearish) candles followed by a final black candle that completely engulfs the previous candle, signaling an exhaustion of selling pressure. The pattern is unique as it uses bearish candles to signal a bullish reversal, similar to how a baby bird conceals itself before emerging.

Pattern Type

  • Type: Reversal (Bullish)
  • Candles Required: 4
  • Trend Context: Appears at the end of downtrends
  • Reliability: High (when complete)
  • Frequency: Rare (appears less than 1% of the time)

Usage

require 'sqa/tai'

# Concealing Baby Swallow example
open  = [95.0, 92.0, 90.0, 88.5, 91.0]
high  = [95.5, 93.0, 90.2, 88.7, 91.5]
low   = [91.5, 88.0, 87.0, 86.5, 86.0]
close = [92.0, 89.0, 87.5, 87.0, 86.5]

# Detect Concealing Baby Swallow pattern
pattern = SQA::TAI.cdl_concealbabyswall(open, high, low, close)

if pattern.last == 100
  puts "Concealing Baby Swallow detected - Rare bullish reversal!"
end

Parameters

Parameter Type Required Description
open Array Yes Array of opening prices
high Array Yes Array of high prices
low Array Yes Array of low prices
close Array Yes Array of closing prices

Returns

Returns an array of integers: - 0: No Concealing Baby Swallow pattern detected - +100: Bullish Concealing Baby Swallow pattern (bullish reversal signal)

Pattern Recognition Rules

Four-Candle Formation

  1. First Candle: Black Marubozu or long black candle
  2. Continues the downtrend
  3. Preferably a strong bearish candle
  4. Shows strong selling pressure

  5. Second Candle: Black candle that gaps down

  6. Opens below first candle's close
  7. Continues downward momentum
  8. Should also be bearish

  9. Third Candle: Small black candle

  10. May have shadows (not marubozu)
  11. Shows potential slowing of downtrend
  12. Body is smaller than second candle

  13. Fourth Candle: Black Marubozu

  14. Completely engulfs third candle (body and shadows)
  15. Opens above third candle's open
  16. Closes below third candle's low
  17. Signals exhaustion despite bearish appearance

Key Characteristics

  • All four candles are black (bearish)
  • Gap down between first and second candles
  • Fourth candle engulfs third candle completely
  • Pattern shows selling exhaustion through engulfing
  • Despite bearish appearance, signals bullish reversal
  • Volume typically decreases through pattern
  • Final engulfing shows last push by sellers

Ideal Pattern Features

  • Clear downtrend: Strong trend before pattern
  • Definite gap: Clear gap between first and second candles
  • Complete engulfment: Fourth candle fully engulfs third
  • Marubozu candles: First and fourth are marubozu-type
  • Volume decline: Volume decreases through pattern
  • Oversold conditions: RSI below 30 strengthens signal

Visual Pattern

Concealing Baby Swallow:

[====]              First: Black Marubozu in downtrend
 |   |

     [====]         Second: Black candle gaps down
      |   |

        [==]        Third: Small black candle
         ||

         [====]     Fourth: Black Marubozu engulfs third
          |   |

Pattern complete when fourth engulfs third
All candles black, but reversal signal

Interpretation

The Concealing Baby Swallow is paradoxical - it uses all bearish candles to signal a bullish reversal. The fourth candle's engulfing action, despite being black, shows that sellers have exhausted their strength. The pattern suggests that bears made one final push down (the engulfing move) but this represents the last of the selling pressure. The complete engulfment of the third candle, despite making new lows, indicates that the downtrend is ending and a reversal is imminent.

Reliability Factors

Factor Low Reliability Medium Reliability High Reliability
Downtrend Weak or choppy Clear downtrend Extended downtrend
Gap Small or absent Modest gap Clear gap
Engulfment Partial Complete body Complete with shadows
Candle Quality Mixed types Mostly strong Marubozu types
Volume Increasing Stable Decreasing
RSI Above 40 30-40 Below 30

Note: Array elements should be ordered from oldest to newest (chronological order)

Example: Pattern Detection and Analysis

open, high, low, close = load_ohlc_data('AAPL')

pattern = SQA::TAI.cdl_concealbabyswall(open, high, low, close)
rsi = SQA::TAI.rsi(close, period: 14)
sma_50 = SQA::TAI.sma(close, period: 50)

if pattern.last == 100
  puts "RARE: Concealing Baby Swallow detected!"

  # Verify downtrend context
  extended_downtrend = close[-5] < sma_50[-5] &&
                       close[-10] > close[-5]

  puts "\nTrend Analysis:"
  puts "Extended downtrend: #{extended_downtrend}"
  puts "Current RSI: #{rsi.last.round(2)}"

  # Verify engulfment
  fourth_open = open.last
  fourth_close = close.last
  third_high = high[-2]
  third_low = low[-2]

  complete_engulfment = fourth_open > third_high &&
                        fourth_close < third_low

  puts "\nEngulfment Analysis:"
  puts "Fourth opens above third high: #{fourth_open > third_high}"
  puts "Fourth closes below third low: #{fourth_close < third_low}"
  puts "Complete engulfment: #{complete_engulfment}"

  if extended_downtrend && complete_engulfment && rsi.last < 30
    puts "\n*** TEXTBOOK CONCEALING BABY SWALLOW ***"
    puts "High-probability reversal signal"
  end
end

Example: Volume Confirmation

open, high, low, close, volume = load_ohlc_volume_data('TSLA')

pattern = SQA::TAI.cdl_concealbabyswall(open, high, low, close)

if pattern.last == 100
  puts "Concealing Baby Swallow Pattern"
  puts "=" * 60

  # Analyze volume through pattern
  vol1, vol2, vol3, vol4 = volume[-4], volume[-3], volume[-2], volume[-1]
  avg_vol = volume[-20..-5].sum / 16.0

  puts "\nVolume Analysis:"
  puts "Candle 1: #{vol1.round(0)} (#{(vol1/avg_vol).round(2)}x avg)"
  puts "Candle 2: #{vol2.round(0)} (#{(vol2/avg_vol).round(2)}x avg)"
  puts "Candle 3: #{vol3.round(0)} (#{(vol3/avg_vol).round(2)}x avg)"
  puts "Candle 4: #{vol4.round(0)} (#{(vol4/avg_vol).round(2)}x avg)"

  # Ideal: declining volume through pattern
  declining = vol1 > vol2 && vol2 > vol3 && vol3 > vol4

  if declining
    puts "\nIDEAL: Declining volume through pattern"
    puts "Shows diminishing selling pressure"
    puts "VERY STRONG reversal signal"
  elsif vol4 < avg_vol
    puts "\nGOOD: Low volume on final candle"
    puts "Suggests selling exhaustion"
  else
    puts "\nCAUTION: High volume on final candle"
    puts "May indicate continued selling"
  end
end

Trading Strategies

Entry Rules

Conservative Entry (Recommended)

# Wait for bullish confirmation candle
if pattern[-2] == 100  # Pattern 2 candles ago
  # Look for bullish confirmation
  if close[-1] > open[-1] && close.last > close[-1]
    puts "Concealing Baby Swallow CONFIRMED"
    entry = close.last
    pattern_low = [low[-4], low[-3], low[-2], low[-1]].min

    puts "Enter LONG at #{entry.round(2)}"
    puts "Pattern validated by bullish follow-through"
  end
end

Aggressive Entry

# Enter on pattern completion
if pattern.last == 100
  entry = close.last
  pattern_low = [low[-4], low[-3], low[-2], low[-1]].min

  puts "Concealing Baby Swallow completed"
  puts "Entry: #{entry.round(2)}"
  puts "Note: Rare pattern with high reliability"
end

Stop Loss Placement

if pattern.last == 100
  # Stop below pattern low
  pattern_low = [low[-4], low[-3], low[-2], low[-1]].min
  stop = pattern_low * 0.99  # 1% buffer

  entry = close.last
  risk = entry - stop
  risk_pct = (risk / entry * 100).round(2)

  puts "\nStop Loss Analysis:"
  puts "Pattern low: #{pattern_low.round(2)}"
  puts "Stop loss: #{stop.round(2)}"
  puts "Risk: $#{risk.round(2)} (#{risk_pct}%)"

  # Alternative: tighter stop below fourth candle only
  tight_stop = low.last * 0.995
  tight_risk = entry - tight_stop

  puts "\nTighter Stop (below 4th candle):"
  puts "Stop: #{tight_stop.round(2)}"
  puts "Risk: $#{tight_risk.round(2)} (#{(tight_risk/entry*100).round(2)}%)"
end

Profit Targets

if pattern.last == 100
  entry = close.last
  pattern_low = [low[-4], low[-3], low[-2], low[-1]].min
  stop = pattern_low * 0.99
  risk = entry - stop

  # Risk-based targets
  target_1 = entry + (risk * 2)
  target_2 = entry + (risk * 3)
  target_3 = entry + (risk * 4)

  puts "\nProfit Targets:"
  puts "T1 (2R): #{target_1.round(2)}"
  puts "T2 (3R): #{target_2.round(2)}"
  puts "T3 (4R): #{target_3.round(2)}"

  # Technical target: first candle high
  resistance = high[-4]
  puts "\nTechnical Target:"
  puts "First candle high: #{resistance.round(2)}"

  # Move stop to breakeven after T1
  puts "\nTrailing Stop Strategy:"
  puts "After T1: Move stop to breakeven"
  puts "After T2: Move stop to T1"
  puts "After T3: Trail with 2x ATR"
end

Example: Complete Trading System

open, high, low, close, volume = load_ohlc_volume_data('NVDA')

pattern = SQA::TAI.cdl_concealbabyswall(open, high, low, close)
rsi = SQA::TAI.rsi(close, period: 14)
sma_20 = SQA::TAI.sma(close, period: 20)
sma_50 = SQA::TAI.sma(close, period: 50)

if pattern.last == 100
  puts "Concealing Baby Swallow Pattern Analysis"
  puts "=" * 60
  puts "(RARE PATTERN - High significance)"

  # 1. Trend context
  downtrend = close[-5] < sma_20[-5] && sma_20[-5] < sma_50[-5]
  extended = close[-10] > close[-5]
  context_score = downtrend && extended

  # 2. Engulfment quality
  fourth_open = open.last
  fourth_close = close.last
  third_high = high[-2]
  third_low = low[-2]
  complete_engulf = fourth_open > third_high && fourth_close < third_low

  # 3. Gap present
  first_close = close[-4]
  second_open = open[-3]
  gap_down = second_open < first_close

  # 4. Volume declining
  volumes = [volume[-4], volume[-3], volume[-2], volume[-1]]
  declining_volume = volumes.each_cons(2).all? { |a, b| a > b }

  # 5. Marubozu characteristics
  first_body = (first_close - open[-4]).abs
  first_range = high[-4] - low[-4]
  first_marubozu = first_body / first_range > 0.8

  fourth_body = (fourth_close - open.last).abs
  fourth_range = high.last - low.last
  fourth_marubozu = fourth_body / fourth_range > 0.8

  strong_candles = first_marubozu && fourth_marubozu

  # 6. RSI oversold
  oversold = rsi[-5] < 30

  # Calculate quality score
  score = 0
  score += 3 if context_score      # Critical
  score += 3 if complete_engulf    # Critical
  score += 2 if gap_down           # Very important
  score += 2 if declining_volume   # Very important
  score += 2 if strong_candles     # Important
  score += 2 if oversold           # Important

  puts "\nQuality Checks:"
  puts "1. Downtrend context: #{context_score} #{context_score ? '✓✓✓' : '✗'}"
  puts "2. Complete engulfment: #{complete_engulf} #{complete_engulf ? '✓✓✓' : '✗'}"
  puts "3. Gap down present: #{gap_down} #{gap_down ? '✓✓' : '✗'}"
  puts "4. Declining volume: #{declining_volume} #{declining_volume ? '✓✓' : '✗'}"
  puts "5. Strong marubozu candles: #{strong_candles} #{strong_candles ? '✓✓' : '✗'}"
  puts "6. RSI oversold: #{oversold} #{oversold ? '✓✓' : '✗'}"
  puts "\nTotal Score: #{score}/14"

  if score >= 10
    # Calculate trade
    entry = close.last
    pattern_low = [low[-4], low[-3], low[-2], low[-1]].min
    stop = pattern_low * 0.99
    risk = entry - stop
    target = entry + (risk * 3)
    reward = target - entry
    rr = (reward / risk).round(1)

    puts "\n*** EXCEPTIONAL SETUP ***"
    puts "-" * 60
    puts "Entry: $#{entry.round(2)}"
    puts "Stop: $#{stop.round(2)}"
    puts "Target: $#{target.round(2)}"
    puts "Risk: $#{risk.round(2)} (#{(risk/entry*100).round(2)}%)"
    puts "Reward: $#{reward.round(2)} (#{(reward/entry*100).round(2)}%)"
    puts "R:R: 1:#{rr}"

    # Position sizing
    account = 100000
    risk_amount = account * 0.02  # 2% risk
    shares = (risk_amount / risk).floor

    puts "\nPosition Sizing (2% risk):"
    puts "Shares: #{shares}"
    puts "Position: $#{(shares * entry).round(2)}"
    puts "Risk: $#{risk_amount.round(2)}"
    puts "Potential profit: $#{(shares * reward).round(2)}"

  elsif score >= 7
    puts "\nGOOD SETUP - Decent quality"
    puts "Rare pattern worth considering"
  else
    puts "\nWEAK SETUP - Missing critical elements"
    puts "Pattern incomplete or context wrong"
  end
end

Pattern Statistics

Frequency

  • Occurrence: Rare (less than 1% of the time)
  • Best Timeframes: Daily charts (most reliable)
  • Markets: All markets, most effective in trending stocks

Success Rate

  • Perfect pattern: 78-85% success rate
  • Good pattern: 68-78% success rate
  • With confirmation: 80-88% success rate
  • At support: 82-90% success rate

Average Move

  • Initial reversal: 8-15% from pattern
  • Major reversals: 20-40% move
  • Time to target: 10-25 candles
  • Follow-through: 80% show bullish continuation

Best Practices

Do's

  1. Verify all four candles are black
  2. Confirm clear gap down between first and second
  3. Ensure fourth candle completely engulfs third
  4. Check for extended downtrend before pattern
  5. Look for declining volume through pattern
  6. Verify RSI oversold conditions
  7. Wait for bullish confirmation if uncertain
  8. Use proper stop below pattern low
  9. Take advantage of rarity - high reliability
  10. Document the pattern for learning

Don'ts

  1. Don't trade without clear downtrend
  2. Don't accept partial engulfment
  3. Don't ignore volume patterns
  4. Don't skip gap verification
  5. Don't use tight stops initially
  6. Don't confuse with other engulfing patterns
  7. Don't ignore the rarity signal
  8. Don't overtrade - wait for perfect setup
  9. Don't chase after confirmation candles
  10. Don't skip risk management

Common Mistakes

  1. Misidentifying pattern: All four candles must be black
  2. Accepting partial engulfment: Fourth must fully engulf third
  3. Ignoring gap: Gap between first and second is important
  4. Wrong trend context: Needs clear downtrend
  5. No volume analysis: Declining volume strengthens pattern
  6. Poor stop placement: Must protect pattern structure
  7. Rushing entry: Confirmation adds reliability

Similar Patterns

Component Patterns

  • Marubozu - First and fourth candle characteristics
  • Engulfing - Fourth candle engulfs third

Pattern Variations

Perfect Concealing Baby Swallow

  • Extended downtrend (10+ candles)
  • Clear gap down between first and second
  • First and fourth are perfect marubozu
  • Complete engulfment with shadows
  • Steadily declining volume
  • RSI below 30
  • Success Rate: 82-90%

Good Concealing Baby Swallow

  • Clear downtrend present
  • Gap visible
  • Strong first and fourth candles
  • Complete body engulfment
  • Some volume decline
  • Success Rate: 72-82%

Weak Concealing Baby Swallow

  • Unclear trend
  • Small or no gap
  • Weak candle bodies
  • Partial engulfment
  • Rising volume
  • Success Rate: 60-70%

Advanced Concepts

Pattern Quality Scorer

def score_concealing_baby_swallow(open, high, low, close, volume)
  return 0 if pattern.last == 0

  score = 0

  # Engulfment quality (0-4 points)
  fourth_open = open.last
  fourth_close = close.last
  third_high = high[-2]
  third_low = low[-2]

  body_engulf = fourth_open > open[-2] && fourth_close < close[-2]
  shadow_engulf = fourth_open > third_high && fourth_close < third_low

  score += 2 if body_engulf
  score += 2 if shadow_engulf

  # Gap quality (0-2 points)
  gap_size = close[-4] - open[-3]
  gap_pct = gap_size / close[-4] * 100

  score += 2 if gap_pct > 1.0
  score += 1 if gap_pct > 0.5

  # Volume decline (0-2 points)
  volumes = [volume[-4], volume[-3], volume[-2], volume[-1]]
  declining = volumes.each_cons(2).all? { |a, b| a > b }
  mostly_declining = volumes[-3..-1].each_cons(2).all? { |a, b| a > b }

  score += 2 if declining
  score += 1 if mostly_declining

  # Marubozu quality (0-2 points)
  first_body = (close[-4] - open[-4]).abs
  first_range = high[-4] - low[-4]
  fourth_body = (close.last - open.last).abs
  fourth_range = high.last - low.last

  first_strong = first_body / first_range > 0.8
  fourth_strong = fourth_body / fourth_range > 0.8

  score += 1 if first_strong
  score += 1 if fourth_strong

  score  # 0-10
end

Key Takeaways

  1. Extremely rare - distinctive four-candle pattern
  2. All black candles - paradoxically bullish
  3. Engulfing action - fourth engulfs third completely
  4. Selling exhaustion - despite new lows, reversal imminent
  5. Gap important - gap down strengthens pattern
  6. Volume decline - shows diminishing selling pressure
  7. High reliability - when conditions are right
  8. Needs confirmation - wait for bullish follow-through
  9. Proper stops - below pattern low
  10. Rare opportunity - don't ignore when it appears

See Also