// -----------------------------------------
// PRC_Fibonacci Trend
// version = 0
// 14.11.2025
// Iván González @ www.prorealcode.com
// Sharing ProRealTime knowledge
// -----------------------------------------
defparam drawonlastbaronly=true
// -----------------------------------------
// inputs
// -----------------------------------------
// --- Trend
mult = 4.0
len = 25
trendon = 1 // 1=true, 0=false
cloud=1 // 1=true, 0=false
// Color 1 (Verde)
col1r = 38
col1g = 144
col1b = 93
// Color 2 (Púrpura)
col2r = 116
col2g = 40
col2b = 109
// --- Fibonacci
extend = 15
showfib=1 //1=true, 0=false
v236 = 0.236 * 100
v382 = 0.382 * 100
v618 = 0.618 * 100
v786 = 0.786 * 100
// Color neutro para líneas Fib
fibR = 200
fibG = 100
fibB = 200
// -----------------------------------------
// Supertrend Indicator calculations
// -----------------------------------------
// --- Cálculo Manual de Supertrend
atr = AverageTrueRange[len](close)
hl2 = (high + low) / 2
// --- UpperBand
up = hl2 - (mult * atr)
up1=up[1]
if close[1] > up1 then
up = max(up,up1)
else
up = up
endif
// --- LowerBand
dn = hl2 + (mult * atr)
dn1=dn[1]
if close[1] < dn1 then
dn = min(dn,dn1)
else
dn = dn
endif
// --- Trend direction
once trend = 1
if trend = -1 and close > dn1 then
trend = 1
elsif trend = 1 and close < up1 then
trend = -1
else
trend = trend
endif
// --- Supertrend Calculation and Color
if trend = 1 then
mysupertrend = up
r=0
g=255
b=0
else
mysupertrend = dn
r=255
g=0
b=0
endif
// -----------------------------------------
// --- Detección de Anclas de Tendencia (High/Low/Inicio)
// -----------------------------------------
ONCE trendHigh = high
ONCE trendLow = low
ONCE trendStartIndex = barindex
trendChanged = (trend <> trend[1])
IF trendChanged THEN
trendHigh = high
trendLow = low
trendStartIndex = barindex
ELSE
trendHigh = max(high, trendHigh[1])
trendLow = min(low, trendLow[1])
trendStartIndex = trendStartIndex[1]
ENDIF
// -----------------------------------------
// --- Cálculo y Dibujo de Fibs
// -----------------------------------------
irange = trendHigh - trendLow
IF irange > 0 AND showfib = 1 THEN
// Calcular niveles
level0 = trendHigh
level1 = trendLow
level236 = trendHigh - (irange * v236 / 100)
level382 = trendHigh - (irange * v382 / 100)
level50 = trendHigh - (irange * 0.5)
level618 = trendHigh - (irange * v618 / 100)
level786 = trendHigh - (irange * v786 / 100)
// Coordenadas de dibujo
x1 = trendStartIndex
x2 = barindex + extend
// Dibujar líneas
DRAWSEGMENT(x1, level0, x2, level0) COLOURED(fibR, fibG, fibB)style(line,2)
DRAWSEGMENT(x1, level1, x2, level1) COLOURED(fibR, fibG, fibB)style(line,2)
DRAWSEGMENT(x1, level236, x2, level236) COLOURED(fibR, fibG, fibB)
DRAWSEGMENT(x1, level382, x2, level382) COLOURED(fibR, fibG, fibB)
DRAWSEGMENT(x1, level50, x2, level50) COLOURED(fibR, fibG, fibB) STYLE(dottedline)
DRAWSEGMENT(x1, level618, x2, level618) COLOURED(fibR, fibG, fibB)
DRAWSEGMENT(x1, level786, x2, level786) COLOURED(fibR, fibG, fibB)
// Dibujar etiquetas
DRAWTEXT("0%", x2+5, level0) COLOURED(fibR, fibG, fibB)
DRAWTEXT("100%", x2+5, level1) COLOURED(fibR, fibG, fibB)
DRAWTEXT("23.6%", x2+5, level236) COLOURED(fibR, fibG, fibB)
DRAWTEXT("38.2%", x2+5, level382) COLOURED(fibR, fibG, fibB)
DRAWTEXT("50.0%", x2+5, level50) COLOURED(fibR, fibG, fibB)
DRAWTEXT("61.8%", x2+5, level618) COLOURED(fibR, fibG, fibB)
DRAWTEXT("78.6%", x2+5, level786) COLOURED(fibR, fibG, fibB)
ENDIF
// -----------------------------------------
// visualization
// -----------------------------------------
// --- Plot Supertrend
IF trendon = 1 THEN
IF trend = 1 THEN
r = col1r
g = col1g
b = col1b
ELSE
r = col2r
g = col2g
b = col2b
ENDIF
ELSE
r = 0
g = 0
b = 0
ENDIF
plotValue = mysupertrend
IF trendon = 0 THEN
plotValue = undefined
ENDIF
// -----------------------------------------
colorbetween(hl2,plotValue,r,g,b,50*trendon*cloud)
// -----------------------------------------
RETURN plotValue COLOURED(r, g, b) AS "Trend"