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
| Pattern | Stop Location |
|---|---|
| Gartley | Beyond X (worst case) |
| Bat | Beyond X |
| Butterfly | Beyond X or D (conservative) |
| Crab | Beyond X |
| Shark | Beyond 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
| Pattern | Typical Duration |
|---|---|
| Gartley | 1-4 weeks |
| Bat | 1-3 weeks |
| Butterfly | 2-6 weeks |
| Crab | 3-8 weeks |
| Shark | 1-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
| Pattern | Win Rate | Average R:R |
|---|---|---|
| Gartley | 65-75% | 1:2 to 1:3 |
| Bat | 70-80% | 1:2 to 1:4 |
| Butterfly | 60-70% | 1:2 to 1:5 |
| Crab | 55-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
- Multiple Patterns: Sometimes patterns form within patterns
- Pattern Failure: If D extends beyond X, it might be an AB=CD pattern instead
- Volume Analysis: Decreasing volume to D = stronger reversal potential
- Divergence: RSI/MACD divergence at D = higher probability
- 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
- Candlestick Patterns — Price action signals
- Chart Patterns — Classic structures
- Drawing Tools — Mark patterns