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)



Discover more from INFORMATE BOLUDO

Subscribe to get the latest posts sent to your email.

Dejá un comentario

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

Discover more from INFORMATE BOLUDO

Subscribe now to keep reading and get access to the full archive.

Continue reading