Harmonic FIX (No Errors Version)//@version=5
indicator("Harmonic FIX (No Errors Version)", overlay=true)
//========================
// INPUTS
//========================
pivotLen = input.int(10, "Pivot Length")
//========================
// PIVOTS
//========================
ph = ta.pivothigh(high, pivotLen, pivotLen)
pl = ta.pivotlow(low, pivotLen, pivotLen)
var float X = na
var float A = na
var float B = na
var float C = na
var float D = na
var int xBar = na
var int aBar = na
var int bBar = na
var int cBar = na
var int dBar = na
if not na(ph) or not na(pl)
X := A
A := B
B := C
C := D
D := not na(ph) ? ph : pl
xBar := aBar
aBar := bBar
bBar := cBar
cBar := dBar
dBar := bar_index
//========================
// SAFE DIVISION
//========================
safeDiv(n, d) =>
d != 0 and not na(d) ? n / d : na
//========================
// RATIOS
//========================
xab = safeDiv(math.abs(B - A), math.abs(X - A))
abc = safeDiv(math.abs(C - B), math.abs(A - B))
bcd = safeDiv(math.abs(D - C), math.abs(B - C))
xad = safeDiv(math.abs(D - A), math.abs(X - A))
valid = not na(xab) and not na(abc) and not na(bcd) and not na(xad)
//========================
// PATTERNS (FLATTENED - NO FUNCTIONS)
//========================
// BAT
bat = valid and
xab >= 0.382 and xab <= 0.50 and
abc >= 0.382 and abc <= 0.886 and
bcd >= 1.618 and bcd <= 2.618 and
xad >= 0.85 and xad <= 0.92
// GARTLEY
gartley = valid and
xab >= 0.618 and xab <= 0.65 and
abc >= 0.382 and abc <= 0.886 and
bcd >= 1.27 and bcd <= 1.618 and
xad >= 0.75 and xad <= 0.80
// CYPHER
cypher = valid and
xab >= 0.382 and xab <= 0.618 and
abc >= 1.13 and abc <= 1.414 and
xad >= 1.27 and xad <= 1.414
pattern = bat or gartley or cypher
//========================
// DIRECTION
//========================
bull = valid and D < C
bear = valid and D > C
//========================
// DRAW STRUCTURE
//========================
if pattern and not na(xBar)
line.new(xBar, X, aBar, A, color=color.gray)
line.new(aBar, A, bBar, B, color=color.gray)
line.new(bBar, B, cBar, C, color=color.gray)
line.new(cBar, C, dBar, D, color=color.yellow, width=2)
//========================
// SIGNALS
//========================
plotshape(pattern and bull, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(pattern and bear, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
Pine Script® indicator






















