OPEN-SOURCE SCRIPT
ULTRA RSI 2025

//version=6
indicator(title="ULTRA RSI 2025", shorttitle="ULTRA RSI 2025", format=format.price, precision=2)
// ==================== CONFIGURAÇÃO VISUAL FUTURISTA ====================
cyberTheme = input.string("IC", title="🎨 Tema Visual", options=["IC", "Matrix Green", "Tron Orange", "Blade Runner Pink"], group="🎨 Visual Settings")
showGradients = input.bool(true, title="🎨 Exibir Preenchimentos em Gradiente", group="🎨 Visual Settings")
glowIntensity = input.float(0.3, title="🎨 Intensidade do Brilho", minval=0.0, maxval=1.0, step=0.1, group="🎨 Visual Settings")
// Cores para hline (usando input.color)
overboughtColor = input.color(color.new(#ff0000, 20), title="📈 Cor Sobrevendido", group="🎨 Visual Settings")
oversoldColor = input.color(color.new(#31fc09, 20), title="📉 Cor Sobrecomprado", group="🎨 Visual Settings")
midlineColor = input.color(color.new(#ffffff, 81), title="⚡ Cor da Linha Média", group="🎨 Visual Settings")
// ==================== CORES FUTURISTAS ====================
getThemeColors() =>
switch cyberTheme
"IC" =>
[color.new(#ff0000, 0), color.new(#0371d8, 0), color.new(#da2808, 30), color.new(#9D4EDD, 30)]
"Matrix Green" =>
[color.new(#00ce33, 0), color.new(#008F11, 0), color.new(#00FF41, 30), color.new(#008F11, 30)]
"Tron Orange" =>
[color.new(#FF6600, 0), color.new(#FF3300, 0), color.new(#FF6600, 30), color.new(#FF3300, 30)]
"Blade Runner Pink" =>
[color.new(#FF1493, 0), color.new(#FF69B4, 0), color.new(#FF1493, 30), color.new(#FF69B4, 30)]
=>
[color.new(#ff0000, 0), color.new(#00ff0d, 0), color.new(#00D4FF, 30), color.new(#9D4EDD, 30)]
[neonPrimary, neonSecondary, glowPrimary, glowSecondary] = getThemeColors()
// Colores adicionales cyber
cyberGreen = color.new(#39FF14, 0)
cyberRed = color.new(#FF073A, 0)
darkCyber = color.new(#0D1117, 0)
neonWhite = color.new(#FFFFFF, 0)
// ==================== CÓDIGO RSI ORIGINAL (SIN MODIFICAR) ====================
rsiLengthInput = input.int(14, minval=1, title=" RSI Length", group=" RSI Settings")
rsiSourceInput = input.source(close, " Source", group=" RSI Settings")
calculateDivergence = input.bool(false, title=" Calculate Divergence", group=" RSI Settings", display = display.data_window, tooltip = "Calculating divergences is needed in order for divergence alerts to fire.")
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// ==================== VISUAL FUTURISTA ====================
// Color dinámico para el RSI
getRsiColor(rsiValue) =>
if rsiValue >= 80
neonPrimary // Azul neón para sobrecomprado
else if rsiValue >= 70
color.new(neonPrimary, 30)
else if rsiValue <= 20
cyberRed // Rojo cyber para sobrevendido
else if rsiValue <= 30
color.new(cyberRed, 30)
else if rsiValue > 50
color.new(cyberGreen, 40)
else
color.new(neonSecondary, 50)
rsiColor = getRsiColor(rsi)
glowColor = color.new(rsiColor, math.round(100 - glowIntensity * 100))
// Plot RSI con efecto glow futurista
rsiPlot = plot(rsi, "🔮 Cyber RSI", color=rsiColor, linewidth=3)
plot(rsi, "✨ RSI Glow 1", color=glowColor, linewidth=5)
plot(rsi, "✨ RSI Glow 2", color=color.new(rsiColor, 90), linewidth=7)
// Líneas de banda con estilo cyber
rsiUpperBand = hline(70, "🔥 Cyber Overbought", color=overboughtColor, linestyle=hline.style_dashed, linewidth=2)
midline = hline(50, " Cyber Midline", color=midlineColor, linestyle=hline.style_dotted)
rsiLowerBand = hline(30, "❄️ Cyber Oversold", color=oversoldColor, linestyle=hline.style_dashed, linewidth=2)
// Background fills futuristas
midLinePlot = plot(50, color = na, editable = false, display = display.none)
// Fill condicional usando operador ternario
backgroundFillColor = showGradients ? color.new(darkCyber, 90) : na
overboughtFillColor = showGradients ? color.new(neonPrimary, 0) : na
overboughtFillColorBottom = showGradients ? color.new(neonPrimary, 100) : na
oversoldFillColorTop = showGradients ? color.new(neonSecondary, 100) : na
oversoldFillColorBottom = showGradients ? color.new(neonSecondary, 0) : na
fill(rsiUpperBand, rsiLowerBand, color=backgroundFillColor, title="🌃 Cyber Background")
fill(rsiPlot, midLinePlot, 100, 70, top_color = overboughtFillColor, bottom_color = overboughtFillColorBottom, title = "🌌 Cyber Overbought Zone")
fill(rsiPlot, midLinePlot, 30, 0, top_color = oversoldFillColorTop, bottom_color = oversoldFillColorBottom, title = "🌌 Cyber Oversold Zone")
// ==================== SMOOTHING MA (CÓDIGO ORIGINAL) ====================
GRP = "🌊 Smoothing"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected. Determines the distance between the SMA and the bands."
maTypeInput = input.string("SMA", "Type", options = ["None", "SMA", "SMA + Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = GRP, display = display.data_window)
maLengthInput = input.int(14, "Length", group = GRP, display = display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval = 0.001, maxval = 50, step = 0.5, tooltip = TT_BB, group = GRP, display = display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"
// Smoothing MA Calculation (CÓDIGO ORIGINAL)
ma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// Smoothing MA plots con colores cyber
smoothingMA = enableMA ? ma(rsi, maLengthInput, maTypeInput) : na
smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput : na
plot(smoothingMA, "🌊 Cyber MA", color=color.new(color.yellow, 0), linewidth=2, display = enableMA ? display.all : display.none, editable = enableMA)
bbUpperBand = plot(smoothingMA + smoothingStDev, title = "🔺 Upper Cyber Band", color=neonPrimary, linewidth=2, display = isBB ? display.all : display.none, editable = isBB)
bbLowerBand = plot(smoothingMA - smoothingStDev, title = "🔻 Lower Cyber Band", color=neonSecondary, linewidth=2, display = isBB ? display.all : display.none, editable = isBB)
// Fill para Bollinger Bands
bbFillColor = isBB ? color.new(neonPrimary, 90) : na
fill(bbUpperBand, bbLowerBand, color=bbFillColor, title="🌌 Cyber Bollinger Fill", display = isBB ? display.all : display.none, editable = isBB)
// ==================== DIVERGENCE (CÓDIGO ORIGINAL CORREGIDO) ====================
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = cyberRed
bullColor = cyberGreen
textColor = neonWhite
noneColor = color.new(color.white, 100)
// Función _inRange calculada en cada barra
_inRange(bool cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
plFound = false
phFound = false
bullCond = false
bearCond = false
rsiLBR = rsi[lookbackRight]
// Calcular _inRange en cada barra para evitar inconsistencias
plFoundPrev = not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight)[1])
phFoundPrev = not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight)[1])
inRangeBull = _inRange(plFoundPrev)
inRangeBear = _inRange(phFoundPrev)
if calculateDivergence
//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low
plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and inRangeBull
// Price: Lower Low
lowLBR = low[lookbackRight]
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound
//------------------------------------------------------------------------------
// Regular Bearish
// rsi: Lower High
phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and inRangeBear
// Price: Higher High
highLBR = high[lookbackRight]
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound
// Divergence plots con estilo cyber
plot(
plFound ? rsiLBR : na,
offset = -lookbackRight,
title = "🚀 Cyber Bull Divergence",
linewidth = 3,
color = (bullCond ? bullColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bullCond ? rsiLBR : na,
offset = -lookbackRight,
title = "🚀 Cyber Bull Signal",
text = "🚀 BULL",
style = shape.labelup,
location = location.absolute,
color = bullColor,
textcolor = textColor,
size = size.normal,
display = display.pane,
editable = calculateDivergence)
plot(
phFound ? rsiLBR : na,
offset = -lookbackRight,
title = "🔻 Cyber Bear Divergence",
linewidth = 3,
color = (bearCond ? bearColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bearCond ? rsiLBR : na,
offset = -lookbackRight,
title = "🔻 Cyber Bear Signal",
text = "🔻 BEAR",
style = shape.labeldown,
location = location.absolute,
color = bearColor,
textcolor = textColor,
size = size.normal,
display = display.pane,
editable = calculateDivergence)
// ==================== TABLA DE INFORMACIÓN CYBER ====================
// Calcular ta.change en cada barra para consistencia
rsiChange3 = ta.change(rsi, 3)
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 5,
bgcolor=color.new(darkCyber, 10),
border_width=2,
border_color=neonPrimary,
frame_width=3,
frame_color=neonSecondary)
table.clear(infoTable, 0, 0, 1, 4)
table.cell(infoTable, 0, 0, " ULTRA RSI", bgcolor=neonPrimary, text_color=neonWhite, text_size=size.small)
table.cell(infoTable, 1, 0, " INFO", bgcolor=neonSecondary, text_color=neonWhite, text_size=size.small)
table.cell(infoTable, 0, 1, " VALOR RSI", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 1, str.tostring(math.round(rsi, 2)), bgcolor=color.new(darkCyber, 30), text_color=neonWhite, text_size=size.small)
rsiStatus = rsi >= 70 ? " SOBRENDIDO" : rsi <= 30 ? " SOBRECOMPRADO" : " NEUTRO"
statusColor = rsi >= 70 ? cyberRed : rsi <= 30 ? cyberGreen : neonWhite
table.cell(infoTable, 0, 2, " MOMENTO", bgcolor=color.new(darkCyber, 30), text_color=neonSecondary, text_size=size.small)
table.cell(infoTable, 1, 2, rsiStatus, bgcolor=color.new(darkCyber, 30), text_color=statusColor, text_size=size.small)
if enableMA
table.cell(infoTable, 0, 3, " EMA RSI", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 3, str.tostring(math.round(smoothingMA, 2)), bgcolor=color.new(darkCyber, 30), text_color=neonWhite, text_size=size.small)
momentum = rsiChange3 > 0 ? " SUBINDO" : " CAINDO"
momentumColor = rsiChange3 > 0 ? cyberGreen : cyberRed
table.cell(infoTable, 0, 4, " TENDÊNCIA", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 4, momentum, bgcolor=color.new(darkCyber, 30), text_color=momentumColor, text_size=size.small)
// ==================== ALERTS (CÓDIGO ORIGINAL) ====================
alertcondition(bullCond, title='🚀 Cyber Bullish Divergence', message="🎯 Found a new Cyber Bullish Divergence!")
alertcondition(bearCond, title='🔻 Cyber Bearish Divergence', message='🎯 Found a new Cyber Bearish Divergence!')
indicator(title="ULTRA RSI 2025", shorttitle="ULTRA RSI 2025", format=format.price, precision=2)
// ==================== CONFIGURAÇÃO VISUAL FUTURISTA ====================
cyberTheme = input.string("IC", title="🎨 Tema Visual", options=["IC", "Matrix Green", "Tron Orange", "Blade Runner Pink"], group="🎨 Visual Settings")
showGradients = input.bool(true, title="🎨 Exibir Preenchimentos em Gradiente", group="🎨 Visual Settings")
glowIntensity = input.float(0.3, title="🎨 Intensidade do Brilho", minval=0.0, maxval=1.0, step=0.1, group="🎨 Visual Settings")
// Cores para hline (usando input.color)
overboughtColor = input.color(color.new(#ff0000, 20), title="📈 Cor Sobrevendido", group="🎨 Visual Settings")
oversoldColor = input.color(color.new(#31fc09, 20), title="📉 Cor Sobrecomprado", group="🎨 Visual Settings")
midlineColor = input.color(color.new(#ffffff, 81), title="⚡ Cor da Linha Média", group="🎨 Visual Settings")
// ==================== CORES FUTURISTAS ====================
getThemeColors() =>
switch cyberTheme
"IC" =>
[color.new(#ff0000, 0), color.new(#0371d8, 0), color.new(#da2808, 30), color.new(#9D4EDD, 30)]
"Matrix Green" =>
[color.new(#00ce33, 0), color.new(#008F11, 0), color.new(#00FF41, 30), color.new(#008F11, 30)]
"Tron Orange" =>
[color.new(#FF6600, 0), color.new(#FF3300, 0), color.new(#FF6600, 30), color.new(#FF3300, 30)]
"Blade Runner Pink" =>
[color.new(#FF1493, 0), color.new(#FF69B4, 0), color.new(#FF1493, 30), color.new(#FF69B4, 30)]
=>
[color.new(#ff0000, 0), color.new(#00ff0d, 0), color.new(#00D4FF, 30), color.new(#9D4EDD, 30)]
[neonPrimary, neonSecondary, glowPrimary, glowSecondary] = getThemeColors()
// Colores adicionales cyber
cyberGreen = color.new(#39FF14, 0)
cyberRed = color.new(#FF073A, 0)
darkCyber = color.new(#0D1117, 0)
neonWhite = color.new(#FFFFFF, 0)
// ==================== CÓDIGO RSI ORIGINAL (SIN MODIFICAR) ====================
rsiLengthInput = input.int(14, minval=1, title=" RSI Length", group=" RSI Settings")
rsiSourceInput = input.source(close, " Source", group=" RSI Settings")
calculateDivergence = input.bool(false, title=" Calculate Divergence", group=" RSI Settings", display = display.data_window, tooltip = "Calculating divergences is needed in order for divergence alerts to fire.")
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// ==================== VISUAL FUTURISTA ====================
// Color dinámico para el RSI
getRsiColor(rsiValue) =>
if rsiValue >= 80
neonPrimary // Azul neón para sobrecomprado
else if rsiValue >= 70
color.new(neonPrimary, 30)
else if rsiValue <= 20
cyberRed // Rojo cyber para sobrevendido
else if rsiValue <= 30
color.new(cyberRed, 30)
else if rsiValue > 50
color.new(cyberGreen, 40)
else
color.new(neonSecondary, 50)
rsiColor = getRsiColor(rsi)
glowColor = color.new(rsiColor, math.round(100 - glowIntensity * 100))
// Plot RSI con efecto glow futurista
rsiPlot = plot(rsi, "🔮 Cyber RSI", color=rsiColor, linewidth=3)
plot(rsi, "✨ RSI Glow 1", color=glowColor, linewidth=5)
plot(rsi, "✨ RSI Glow 2", color=color.new(rsiColor, 90), linewidth=7)
// Líneas de banda con estilo cyber
rsiUpperBand = hline(70, "🔥 Cyber Overbought", color=overboughtColor, linestyle=hline.style_dashed, linewidth=2)
midline = hline(50, " Cyber Midline", color=midlineColor, linestyle=hline.style_dotted)
rsiLowerBand = hline(30, "❄️ Cyber Oversold", color=oversoldColor, linestyle=hline.style_dashed, linewidth=2)
// Background fills futuristas
midLinePlot = plot(50, color = na, editable = false, display = display.none)
// Fill condicional usando operador ternario
backgroundFillColor = showGradients ? color.new(darkCyber, 90) : na
overboughtFillColor = showGradients ? color.new(neonPrimary, 0) : na
overboughtFillColorBottom = showGradients ? color.new(neonPrimary, 100) : na
oversoldFillColorTop = showGradients ? color.new(neonSecondary, 100) : na
oversoldFillColorBottom = showGradients ? color.new(neonSecondary, 0) : na
fill(rsiUpperBand, rsiLowerBand, color=backgroundFillColor, title="🌃 Cyber Background")
fill(rsiPlot, midLinePlot, 100, 70, top_color = overboughtFillColor, bottom_color = overboughtFillColorBottom, title = "🌌 Cyber Overbought Zone")
fill(rsiPlot, midLinePlot, 30, 0, top_color = oversoldFillColorTop, bottom_color = oversoldFillColorBottom, title = "🌌 Cyber Oversold Zone")
// ==================== SMOOTHING MA (CÓDIGO ORIGINAL) ====================
GRP = "🌊 Smoothing"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected. Determines the distance between the SMA and the bands."
maTypeInput = input.string("SMA", "Type", options = ["None", "SMA", "SMA + Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = GRP, display = display.data_window)
maLengthInput = input.int(14, "Length", group = GRP, display = display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval = 0.001, maxval = 50, step = 0.5, tooltip = TT_BB, group = GRP, display = display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"
// Smoothing MA Calculation (CÓDIGO ORIGINAL)
ma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
// Smoothing MA plots con colores cyber
smoothingMA = enableMA ? ma(rsi, maLengthInput, maTypeInput) : na
smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput : na
plot(smoothingMA, "🌊 Cyber MA", color=color.new(color.yellow, 0), linewidth=2, display = enableMA ? display.all : display.none, editable = enableMA)
bbUpperBand = plot(smoothingMA + smoothingStDev, title = "🔺 Upper Cyber Band", color=neonPrimary, linewidth=2, display = isBB ? display.all : display.none, editable = isBB)
bbLowerBand = plot(smoothingMA - smoothingStDev, title = "🔻 Lower Cyber Band", color=neonSecondary, linewidth=2, display = isBB ? display.all : display.none, editable = isBB)
// Fill para Bollinger Bands
bbFillColor = isBB ? color.new(neonPrimary, 90) : na
fill(bbUpperBand, bbLowerBand, color=bbFillColor, title="🌌 Cyber Bollinger Fill", display = isBB ? display.all : display.none, editable = isBB)
// ==================== DIVERGENCE (CÓDIGO ORIGINAL CORREGIDO) ====================
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = cyberRed
bullColor = cyberGreen
textColor = neonWhite
noneColor = color.new(color.white, 100)
// Función _inRange calculada en cada barra
_inRange(bool cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
plFound = false
phFound = false
bullCond = false
bearCond = false
rsiLBR = rsi[lookbackRight]
// Calcular _inRange en cada barra para evitar inconsistencias
plFoundPrev = not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight)[1])
phFoundPrev = not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight)[1])
inRangeBull = _inRange(plFoundPrev)
inRangeBear = _inRange(phFoundPrev)
if calculateDivergence
//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low
plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and inRangeBull
// Price: Lower Low
lowLBR = low[lookbackRight]
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound
//------------------------------------------------------------------------------
// Regular Bearish
// rsi: Lower High
phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and inRangeBear
// Price: Higher High
highLBR = high[lookbackRight]
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound
// Divergence plots con estilo cyber
plot(
plFound ? rsiLBR : na,
offset = -lookbackRight,
title = "🚀 Cyber Bull Divergence",
linewidth = 3,
color = (bullCond ? bullColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bullCond ? rsiLBR : na,
offset = -lookbackRight,
title = "🚀 Cyber Bull Signal",
text = "🚀 BULL",
style = shape.labelup,
location = location.absolute,
color = bullColor,
textcolor = textColor,
size = size.normal,
display = display.pane,
editable = calculateDivergence)
plot(
phFound ? rsiLBR : na,
offset = -lookbackRight,
title = "🔻 Cyber Bear Divergence",
linewidth = 3,
color = (bearCond ? bearColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bearCond ? rsiLBR : na,
offset = -lookbackRight,
title = "🔻 Cyber Bear Signal",
text = "🔻 BEAR",
style = shape.labeldown,
location = location.absolute,
color = bearColor,
textcolor = textColor,
size = size.normal,
display = display.pane,
editable = calculateDivergence)
// ==================== TABLA DE INFORMACIÓN CYBER ====================
// Calcular ta.change en cada barra para consistencia
rsiChange3 = ta.change(rsi, 3)
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 5,
bgcolor=color.new(darkCyber, 10),
border_width=2,
border_color=neonPrimary,
frame_width=3,
frame_color=neonSecondary)
table.clear(infoTable, 0, 0, 1, 4)
table.cell(infoTable, 0, 0, " ULTRA RSI", bgcolor=neonPrimary, text_color=neonWhite, text_size=size.small)
table.cell(infoTable, 1, 0, " INFO", bgcolor=neonSecondary, text_color=neonWhite, text_size=size.small)
table.cell(infoTable, 0, 1, " VALOR RSI", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 1, str.tostring(math.round(rsi, 2)), bgcolor=color.new(darkCyber, 30), text_color=neonWhite, text_size=size.small)
rsiStatus = rsi >= 70 ? " SOBRENDIDO" : rsi <= 30 ? " SOBRECOMPRADO" : " NEUTRO"
statusColor = rsi >= 70 ? cyberRed : rsi <= 30 ? cyberGreen : neonWhite
table.cell(infoTable, 0, 2, " MOMENTO", bgcolor=color.new(darkCyber, 30), text_color=neonSecondary, text_size=size.small)
table.cell(infoTable, 1, 2, rsiStatus, bgcolor=color.new(darkCyber, 30), text_color=statusColor, text_size=size.small)
if enableMA
table.cell(infoTable, 0, 3, " EMA RSI", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 3, str.tostring(math.round(smoothingMA, 2)), bgcolor=color.new(darkCyber, 30), text_color=neonWhite, text_size=size.small)
momentum = rsiChange3 > 0 ? " SUBINDO" : " CAINDO"
momentumColor = rsiChange3 > 0 ? cyberGreen : cyberRed
table.cell(infoTable, 0, 4, " TENDÊNCIA", bgcolor=color.new(darkCyber, 30), text_color=neonPrimary, text_size=size.small)
table.cell(infoTable, 1, 4, momentum, bgcolor=color.new(darkCyber, 30), text_color=momentumColor, text_size=size.small)
// ==================== ALERTS (CÓDIGO ORIGINAL) ====================
alertcondition(bullCond, title='🚀 Cyber Bullish Divergence', message="🎯 Found a new Cyber Bullish Divergence!")
alertcondition(bearCond, title='🔻 Cyber Bearish Divergence', message='🎯 Found a new Cyber Bearish Divergence!')
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.