Potenciá tu análisis técnico con múltiples herramientas visuales
🔍 Este script fue diseñado para ofrecerte una visión completa y dinámica del mercado. Integra 8 medias móviles configurables, Bandas de Bollinger, cruces dorados y de la muerte, y un Parabolic SAR personalizado que se ajusta automáticamente a la tendencia.
🧰 Funciones principales:
✅ Hasta 8 medias móviles:
Personalizá tipo y periodo de cada una (EMA, SMA, WMA, VWMA, RMA).
✅ Bandas de Bollinger ajustables:
Visualizá la volatilidad del mercado con suavidad profesional.
✅ Cruces dinámicos:
Activá alertas visuales en hasta 5 combinaciones de cruces clave (dorados o de la muerte).
✅ SAR Manual:
Cálculo manual del Parabolic SAR con etiquetas y lógica precisa de reversión.
✅ Diseño visual optimizado:
Colores diferenciados, etiquetas limpias y gráficos sobre el precio.
💡 Ideal para traders que trabajan con:
- Tendencias de mediano y largo plazo
- Confirmaciones de entrada/salida
- Sistemas visuales multicapas
🔧 Parámetros totalmente editables desde el panel de inputs.
//@version=4
study("INFORMATE BOLUDO MULTI 21", shorttitle='IB MULTI 21',max_bars_back=1000, overlay=true)
// ==============================
// ENTRADAS
// ==============================
// Tipo de media móvil usada para las bandas de Bollinger
tipoMA_Bollinger = input("EMA",title=' TIPO Bollinger MA', options=["OFF","SMA","EMA","WMA","VWMA","RMA"])
// Periodo de la media móvil para calcular Bollinger
ValorMA_Bollinger = input(21,title='VALOR Bollinger MA ')
// Tipo de media para las medias móviles principales (MA 1 a MA 5)
Ma_tipo1 = input("EMA",title="MA TIPO 1", options=["OFF","SMA","EMA","WMA","VWMA","RMA"])
// Periodos de medias móviles principales
m1 = input(8,title="Media Movil 1")
m2 = input(21,title="Media Movil 2")
m3 = input(50,title="Media Movil 3")
m4 = input(100,title="Media Movil 4")
m5 = input(200,title="Media Movil 5")
// Tipo de media para el segundo grupo de medias móviles (MA 6 a MA 8)
Ma_tipo2 = input("OFF",title="MA TIPO 2", options=["OFF","SMA","EMA","WMA","VWMA","RMA"])
// Periodos para medias móviles secundarias
m6 = input(10,title="Media Movil 6")
m7 = input(30,title="Media Movil 7")
m8 = input(200,title="Media Movil 8")
// Mostrar cruces dorados (alcistas)
mostrar_dorado = input(true,title='Mostrar Cruce Dorado')
// Mostrar cruces de la muerte (bajistas)
mostrar_muerte = input(true,title='Mostrar Cruce de la Muerte')
// Selección de hasta 5 combinaciones de cruces para evaluar
cruce_1 = input("OFF",title="1 cruce MA", options=["OFF","MA 1 <=> MA 2","MA 1 <=> MA 3","MA 1 <=> MA 4","MA 1 <=> MA 5","MA 2 <=> MA 3","MA 2 <=> MA 4","MA 2 <=> MA 5","MA 3 <=> MA 4","MA 3 <=> MA 5","MA 4 <=> MA 5"])
cruce_2 = input("OFF",title="2 cruce MA", options=["OFF","MA 1 <=> MA 2","MA 1 <=> MA 3","MA 1 <=> MA 4","MA 1 <=> MA 5","MA 2 <=> MA 3","MA 2 <=> MA 4","MA 2 <=> MA 5","MA 3 <=> MA 4","MA 3 <=> MA 5","MA 4 <=> MA 5"])
cruce_3 = input("OFF",title="3 cruce MA", options=["OFF","MA 1 <=> MA 2","MA 1 <=> MA 3","MA 1 <=> MA 4","MA 1 <=> MA 5","MA 2 <=> MA 3","MA 2 <=> MA 4","MA 2 <=> MA 5","MA 3 <=> MA 4","MA 3 <=> MA 5","MA 4 <=> MA 5"])
cruce_4 = input("OFF",title="4 cruce MA", options=["OFF","MA 1 <=> MA 2","MA 1 <=> MA 3","MA 1 <=> MA 4","MA 1 <=> MA 5","MA 2 <=> MA 3","MA 2 <=> MA 4","MA 2 <=> MA 5","MA 3 <=> MA 4","MA 3 <=> MA 5","MA 4 <=> MA 5"])
cruce_5 = input("OFF",title="5 cruce MA", options=["OFF","MA 1 <=> MA 2","MA 1 <=> MA 3","MA 1 <=> MA 4","MA 1 <=> MA 5","MA 2 <=> MA 3","MA 2 <=> MA 4","MA 2 <=> MA 5","MA 3 <=> MA 4","MA 3 <=> MA 5","MA 4 <=> MA 5"])
// ==============================
// FUNCIÓN DE SELECCIÓN DE MA
// ==============================
// Devuelve la media móvil correspondiente según el tipo elegido
seleccion_ma(type, value) =>
if type=='EMA'
ema(close, value)
else if type=='WMA'
wma(close, value)
else if type=='SMA'
sma(close, value)
else if type=='VWMA'
vwma(close, value)
else if type=='RMA'
rma(close, value)
else
na
// ==============================
// BANDAS DE BOLLINGER
// ==============================
// Límite superior de la banda de Bollinger
bolliMax = seleccion_ma(tipoMA_Bollinger, ValorMA_Bollinger) + 2* stdev(close, ValorMA_Bollinger)
// Límite inferior
bolliMin = seleccion_ma(tipoMA_Bollinger, ValorMA_Bollinger) - 2* stdev(close, ValorMA_Bollinger)
// Dibuja las bandas y el fondo entre ellas
b1 = plot(bolliMax, color=color.silver, linewidth=1, title='Bollinger_Max')
b2 = plot(bolliMin, color=color.silver, linewidth=1, title='Bollinger_Min')
fill(b1,b2,color=color.white, title='Bollinger_Background')
// ==============================
// MEDIAS MÓVILES
// ==============================
// Cálculo de medias móviles principales
ma1 = seleccion_ma(Ma_tipo1, m1)
ma2 = seleccion_ma(Ma_tipo1, m2)
ma3 = seleccion_ma(Ma_tipo1, m3)
ma4 = seleccion_ma(Ma_tipo1, m4)
ma5 = seleccion_ma(Ma_tipo1, m5)
// Cálculo de medias móviles secundarias
ma6 = seleccion_ma(Ma_tipo2, m6)
ma7 = seleccion_ma(Ma_tipo2, m7)
ma8 = seleccion_ma(Ma_tipo2, m8)
// Dibujado de las medias móviles
plot(ma1, color=color.green, linewidth=1, title="Media Movil 1")
plot(ma2, color=color.red, linewidth=1, title="Media Movil 2")
plot(ma3, color=color.purple, linewidth=1, title="Media Movil 3")
plot(ma4, color=color.orange, linewidth=1, title="Media Movil 4")
plot(ma5, color=color.yellow, linewidth=1, title="Media Movil 5")
plot(ma6, color=color.aqua, linewidth=1, title="Media Movil 6")
plot(ma7, color=color.blue, linewidth=1, title="Media Movil 7")
plot(ma8, color=color.fuchsia, linewidth=1, title="Media Movil 8")
// ==============================
// CRUCES DE MEDIAS MÓVILES
// ==============================
// Función para detectar un cruce alcista (dorado)
cruce_dorado(media1, media2) =>
IB1 = seleccion_ma(Ma_tipo1, media1)
IB2 = seleccion_ma(Ma_tipo1, media2)
if crossover(IB1,IB2) and mostrar_dorado
label.new(bar_index, seleccion_ma(Ma_tipo1, media1), yloc=yloc.belowbar, color=color.white, style=label.style_label_up, text=(tostring(media1)+"▲"+tostring(media2)), textcolor=color.green)
// Función para detectar un cruce bajista (de la muerte)
cruce_mortal(media1, media2) =>
IB1 = seleccion_ma(Ma_tipo1, media1)
IB2 = seleccion_ma(Ma_tipo1, media2)
if crossunder(IB1,IB2) and mostrar_muerte
label.new(bar_index, IB1, yloc=yloc.abovebar, color=color.white, style=label.style_label_down, text=(tostring(media1)+"▼"+tostring(media2)), textcolor=color.red)
// Función para evaluar cruces según input del usuario
seleccion_cruce(cruces) =>
if cruces == "MA 1 <=> MA 2"
cruce_dorado(m1,m2)
cruce_mortal(m1,m2)
else if cruces == "MA 1 <=> MA 3"
cruce_dorado(m1,m3)
cruce_mortal(m1,m3)
else if cruces == "MA 1 <=> MA 4"
cruce_dorado(m1,m4)
cruce_mortal(m1,m4)
else if cruces == "MA 1 <=> MA 5"
cruce_dorado(m1,m5)
cruce_mortal(m1,m5)
else if cruces == "MA 2 <=> MA 3"
cruce_dorado(m2,m3)
cruce_mortal(m2,m3)
else if cruces == "MA 2 <=> MA 4"
cruce_dorado(m2,m4)
cruce_mortal(m2,m4)
else if cruces == "MA 2 <=> MA 5"
cruce_dorado(m2,m5)
cruce_mortal(m2,m5)
else if cruces == "MA 3 <=> MA 4"
cruce_dorado(m3,m4)
cruce_mortal(m3,m4)
else if cruces == "MA 3 <=> MA 5"
cruce_dorado(m3,m5)
cruce_mortal(m3,m5)
else if cruces == "MA 4 <=> MA 5"
cruce_dorado(m4,m5)
cruce_mortal(m4,m5)
else
na
// Ejecutar los cruces seleccionados por el usuario
seleccion_cruce(cruce_1)
seleccion_cruce(cruce_2)
seleccion_cruce(cruce_3)
seleccion_cruce(cruce_4)
seleccion_cruce(cruce_5)
// ==============================
// PARABOLIC SAR
// ==============================
// Mostrar o no el SAR
mostrarSAR = input(true,title='Parabolic SAR')
// Parámetros del SAR
iniciar = input(title = "Parabolic SAR - Iniciar", defval = 0.02, step = 0.001)
incremento = input(title = "Parabolic SAR - Incremento", defval = 0.02, step = 0.001)
maximo = input(title = "Parabolic SAR - Valor MAximo", defval = 0.2, step = 0.01)
Labels = input(title = "Parabolic SAR - Mostrarbels", defval = true)
// Variables internas del SAR
int tendencia = 0
float sar = 0.0
float ep = 0.0
float af = 0.0
// Inicialización de variables con valor previo si existe
tendencia := nz(tendencia[1])
ep := nz(ep[1])
af :=nz(af[1])
sar := sar[1]
// Cálculo inicial del SAR si no hay tendencia previa
if tendencia == 0 and not na(high[1])
tendencia := high >= high[1] or low >= low[1] ? 1 : -1
sar := tendencia > 0 ? low[1] : high[1]
ep := tendencia > 0 ? high[1] : low[1]
af := iniciar
else
// SAR alcista
nextsar = sar
if tendencia > 0
if high[1] > ep
ep := high[1]
af := min(maximo, af + incremento)
nextsar := sar + af * (ep - sar)
nextsar := min(min(low[1], low[2]), nextsar)
// Reversión bajista
if nextsar > low
tendencia := -1
nextsar := ep
ep := low
af := iniciar
else
// SAR bajista
if low[1] < ep
ep := low[1]
af := min(maximo, af + incremento)
nextsar := sar + af * (ep - sar)
nextsar := max(max(high[1], high[2]), nextsar)
// Reversión alcista
if nextsar < high
tendencia := 1
nextsar := ep
ep := high
af := iniciar
sar := nextsar
// Graficar el SAR si está habilitado
plot(iff(mostrarSAR,sar,na), title = "Parabolic SAR", color = tendencia > 0 ? color.green : color.red, linewidth = 1, style = plot.style_circles)
// Mostrar etiquetas cuando hay cambio de tendencia
if change(tendencia) > 0 and Labels
label.new(bar_index, sar, color = color.lime, style=label.style_labelup, size = size.tiny)
if change(tendencia) < 0 and Labels
label.new(bar_index, sar, color = color.red, style=label.style_labeldown, size = size.tiny)