Home / TRADINGVIEW / INDICADOR MULTI 21 – PARABOLIC SAR, BOLLINGER Y MEDIAS MOVILES

INDICADOR MULTI 21 – PARABOLIC SAR, BOLLINGER Y MEDIAS MOVILES

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)


Deje un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *