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​