Skip to main content

Harmonic Patterns

Fibonacci-based reversal patterns with precise mathematical structure.

Overview

Harmonic patterns use specific Fibonacci ratios to identify high-probability reversal zones. These patterns require precise measurements and offer defined risk/reward opportunities.

Core Principle

Price movements follow natural Fibonacci ratios. When these ratios align in specific geometric patterns, reversals are likely.

Gartley Pattern

The original harmonic pattern (1935).

Structure

Bullish Gartley:

Point X = Swing low
Point A = Retracement high
Point B = 61.8% retracement of XA
Point C = 38.2% or 88.6% retracement of AB
Point D = 78.6% retracement of XA (Target zone)

Bearish Gartley:

Mirror image - forms at top

Fibonacci Requirements

AB = 61.8% of XA
BC = 38.2% or 88.6% of AB
CD = 127.2% or 161.8% of BC
AD = 78.6% of XA

Trading Strategy

Entry:

  • At point D (78.6% retracement)
  • Wait for price action confirmation (pin bar, engulfing)

Stop:

  • Beyond X (swing point)

Target:

  • 38.2% retracement of AD
  • 61.8% retracement of AD

Example Calculation

XA = $100 to $150 = $50 move
AB = 61.8% of $50 = $30.90 retracement
B = $150 - $30.90 = $119.10
BC = 38.2% of AB = $11.83 advance
C = $119.10 + $11.83 = $130.93
CD = 127.2% of BC = $15.04 decline
D = $130.93 - $15.04 = $115.89
AD = $150 - $115.89 = $34.11
AD/XA ratio = $34.11/$50 = 68.2% (close to 78.6%)

Bat Pattern

Discovered by Scott Carney (more accurate than Gartley).

Key Difference

Point B retraces 38.2% or 50% of XA (not 61.8%)

Fibonacci Requirements

AB = 38.2% or 50.0% of XA
BC = 38.2% or 88.6% of AB
CD = 88.6% or 261.8% of BC
AD = 88.6% of XA (Most accurate test)

Advantages

  • More accurate test (88.6% vs 78.6%)
  • Better risk/reward ratio
  • Higher success rate

Trading Strategy

Entry:

  • At D (88.6% retracement)
  • Strong reversal signal required

Stop:

  • Beyond X

Target:

  • 38.2%, 61.8% retracements of AD
  • A (aggressive)

Example

XA = $100 to $160 = $60 move
AB = 50% of $60 = $30 retracement
B = $160 - $30 = $130
BC = 38.2% of $30 = $11.46 advance
C = $130 + $11.46 = $141.46
CD = 261.8% of $11.46 = $30.00 decline
D = $141.46 - $30.00 = $111.46
AD = $160 - $111.46 = $48.54
AD/XA = $48.54/$60 = 80.9% (close to 88.6%)

Butterfly Pattern

Deep retracement pattern.

Key Feature

Point B retraces 78.6% of XA (not 61.8%)

Fibonacci Requirements

AB = 78.6% of XA
BC = 38.2% or 88.6% of AB
CD = 161.8% or 261.8% of BC
AD = 127.2% or 161.8% of XA (Extension beyond X)

Characteristics

  • D extends beyond X (127.2% or 161.8%)
  • Deep correction
  • Strong reversal potential

Trading Strategy

Entry:

  • At D (127.2% or 161.8% extension)
  • Wait for confirmation

Stop:

  • Beyond X (for bullish) or beyond D (conservative)

Target:

  • Multiple: 38.2%, 61.8%, 100% of AD
  • B or C levels

Example

XA = $100 to $150 = $50 move
AB = 78.6% of $50 = $39.30 retracement
B = $150 - $39.30 = $110.70
BC = 38.2% of $39.30 = $15.01 advance
C = $110.70 + $15.01 = $125.71
CD = 161.8% of $15.01 = $24.28 decline
D = $125.71 - $24.28 = $101.43
AD = $150 - $101.43 = $48.57
AD/XA = $48.57/$50 = 97.1% (extends beyond X!)

Crab Pattern

Extreme ratios (discovered by Scott Carney).

Key Feature

Point B retraces 38.2% or 61.8% of XA

Fibonacci Requirements

AB = 38.2% or 61.8% of XA
BC = 38.2% or 88.6% of AB
CD = 261.8% or 361.8% of BC
AD = 161.8% of XA

Characteristics

  • Very deep D extension
  • Extreme reversal potential
  • Higher risk/reward

Shark Pattern

Similar to Crab, discovered by Scott Carney.

Fibonacci Requirements

AB = (any)
BC = 113% of XA
CD = 161.8% to 224% of XB

Key Feature

  • Point C extends beyond X
  • Point D is precise target

Pattern Identification Steps

1. Find Swing Points

function findSwings(data: BarData[]): SwingPoint[] {
// Look for local maxima/minima
// Confirm with neighboring bars
return swings;
}

2. Measure Ratios

function measureFibonacci(swings: SwingPoint[]): PatternResult {
const XA = Math.abs(swings.A.price - swings.X.price);
const AB = Math.abs(swings.B.price - swings.A.price);
const ratioAB = AB / XA;

if (ratioAB > 0.61 && ratioAB < 0.62) {
return { type: 'Gartley', confidence: 'high' };
}

// More ratio checks...
}

3. Validate Pattern

function validatePattern(pattern: PatternResult): boolean {
// Check all required ratios
// Ensure point D is within tolerance (±3%)
// Verify structure
return isValid;
}

Risk Management

Stop Loss Placement

PatternStop Location
GartleyBeyond X (worst case)
BatBeyond X
ButterflyBeyond X or D (conservative)
CrabBeyond X
SharkBeyond C or X

Position Sizing

function calculatePositionSize(
accountSize: number,
riskPercent: number,
stopDistance: number
): number {
const riskAmount = accountSize * (riskPercent / 100);
return riskAmount / stopDistance;
}

Example

Account: $10,000
Risk: 1% = $100
Pattern: Bullish Gartley
Entry: $115.89
Stop: $150.00 (beyond X)
Risk per share: $34.11

Position size = $100 / $34.11 = 2.93 shares
Round down to 2 shares
Actual risk = 2 × $34.11 = $68.22 (0.68% of account)

Time Considerations

PatternTypical Duration
Gartley1-4 weeks
Bat1-3 weeks
Butterfly2-6 weeks
Crab3-8 weeks
Shark1-4 weeks

Confluence Factors

Increase Probability

✅ Support/Resistance at D
✅ Trend line confluence
✅ Oscillator divergence
✅ Volume spike at D
✅ Multiple timeframes align

Decrease Probability

❌ No clear swing points
❌ Ratios off by >5%
❌ Against major trend
❌ Low volume
❌ News event pending

Backtesting Results

Historical Success Rates

PatternWin RateAverage R:R
Gartley65-75%1:2 to 1:3
Bat70-80%1:2 to 1:4
Butterfly60-70%1:2 to 1:5
Crab55-65%1:2 to 1:4

Note: Results vary by market, timeframe, and experience level

Practical Implementation

Using Charting Library

// Draw Fibonacci retracement
chart.createDrawing('fibonacci', {
start: { time: swingX.time, price: swingX.price },
end: { time: swingA.time, price: swingA.price }
});

// Add horizontal lines at key levels
chart.createDrawing('horizontal_line', {
price: dTargetPrice,
text: 'D Zone - Potential Reversal'
});

Automation Considerations

class HarmonicPatternScanner {
scan(data: BarData[], patterns: PatternType[]): PatternResult[] {
const results: PatternResult[] = [];

for (const pattern of patterns) {
const swings = this.findSwings(data);
const measured = this.measurePattern(swings, pattern);

if (this.validate(measured)) {
results.push(measured);
}
}

return results;
}
}

Best Practices

✅ Wait for price action confirmation at D
✅ Use tight stops (beyond pattern extreme)
✅ Take partial profits at first target
✅ Move stop to breakeven at 50% target
✅ Don't force patterns - let them form naturally
✅ Use multiple timeframes for confirmation
✅ Practice on historical data first

❌ Don't trade unconfirmed patterns
❌ Avoid patterns with sloppy structure
❌ Don't ignore trend direction
❌ Never move stops further away
❌ Don't overtrade - quality over quantity

Advanced Tips

  1. Multiple Patterns: Sometimes patterns form within patterns
  2. Pattern Failure: If D extends beyond X, it might be an AB=CD pattern instead
  3. Volume Analysis: Decreasing volume to D = stronger reversal potential
  4. Divergence: RSI/MACD divergence at D = higher probability
  5. Multiple Timeframes: Harmonic on weekly, confirmation on daily = very high probability

Resources

  • Scott Carney's books on harmonic trading
  • Fibonacci retracement calculator
  • Historical pattern database
  • Backtesting software

See Also