Estrategia basada en múltiples bandas de medias móviles


Fecha de creación: 2023-12-18 12:29:19 Última modificación: 2023-12-18 12:29:19
Copiar: 1 Número de Visitas: 807
1
Seguir
1621
Seguidores

Estrategia basada en múltiples bandas de medias móviles

Descripción general

La estrategia de banda de media móvil es una estrategia de seguimiento de tendencias basada en múltiples medias móviles. Monitoriza simultáneamente las medias móviles rápidas y las medias móviles lentas, generando señales de negociación cuando los precios rompen la banda de media móvil.

Principio de estrategia

La estrategia utiliza simultáneamente cinco medias móviles rápidas (líneas 5, 8, 13, 20, y 30) y cuatro medias móviles lentas (líneas 45, 70, 105, y 150), las cuales forman un promedio móvil interno de la línea rápida y un promedio móvil externo de la línea lenta. Se produce una señal de compra cuando el precio se encuentra por encima de la línea media interna y una señal de venta cuando el precio se encuentra por debajo de la línea media interna.

Además, la estrategia también determina la tendencia a largo plazo. Sólo se considera la posibilidad de generar una señal de compra cuando el precio está por encima de la media móvil de 200 días. Por el contrario, sólo se considera la posibilidad de generar una señal de venta cuando el precio cae por debajo de la media móvil de 200 días.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El diseño de múltiples medias móviles permite determinar con precisión la dirección de la tendencia. Las bandas de medias móviles internas y externas se combinan con medias rápidas y lentas para identificar tendencias de líneas medias y largas.

  2. El mecanismo de ruptura continua puede filtrar eficazmente las falsas rupturas. Al mismo tiempo, se requiere la mayor parte de las rupturas de línea media rápida para asegurar el cambio de tendencia.

  3. Para determinar la tendencia a largo plazo, evitar ser ajustado en la liquidación. Junto con el juicio de la línea de 200 días, solo considere la creación de posiciones cuando se produzca un cambio de tendencia.

  4. El promedio móvil tiene una función de seguimiento de tendencias y, en combinación con el indicador de sobreventa y sobreventa, establece un punto de parada para controlar el riesgo.

Análisis de riesgos

El principal riesgo de esta estrategia es:

  1. El riesgo de fracaso de la ruptura. Cuando se produce una falsa ruptura en el precio, la estrategia no puede evitar por completo la pérdida.

  2. Riesgo de pérdidas en una tendencia a la oscilación. Cuando las condiciones del mercado son inestables por un tiempo prolongado, el punto de parada puede ser golpeado con frecuencia, lo que aumenta las pérdidas.

  3. El riesgo de optimización de parámetros. La configuración incorrecta de los parámetros de la media móvil también puede causar errores en las señales de negociación, lo que aumenta las pérdidas.

Resolución de las mismas:

  1. La liberación adecuada de los puntos de detención, dando al precio suficiente espacio para operar. o la adopción de un método de detención de ljetrail, para que la línea de detención funcione con el precio.

  2. Incrementar los indicadores de tendencia para evitar que los mercados se queden sin rumbo durante la oscilación. Por ejemplo, se puede filtrar con indicadores como DMI, MACD, etc.

  3. Utiliza el historial de retroalimentación y la optimización de parámetros para seleccionar la combinación de parámetros óptima. En el disco real, también debe seguir el efecto de los parámetros para optimizar dinámicamente.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes dimensiones:

  1. Optimización de los parámetros de las medias móviles para seleccionar el mejor número de periodos. Se puede encontrar la combinación de parámetros óptima mediante la retroalimentación de las medias móviles de los diferentes números de periodos.

  2. Aumentar la tendencia de los indicadores de juicio para filtrar. Por ejemplo, el indicador de RSI para determinar la sobrecompra, sobreventa, la brecha de los canales de juicio de Brin, etc. Evite la posición ciega cuando la tendencia no es clara.

  3. Adoptar una media móvil adaptada. Optimizar en tiempo real los parámetros de la media móvil de acuerdo con los cambios y la volatilidad del mercado para adaptarla mejor a la situación actual del mercado.

  4. Combinación de modelos de aprendizaje automático para determinar la probabilidad de tendencia. Creación de modelos de probabilidad para evaluar la probabilidad de éxito de la ruptura y ayudar a los sistemas de toma de decisiones a determinar el momento de entrada.

  5. Optimización de las estrategias de stop loss para que los stops sigan mejor los precios. Por ejemplo, traillig stop loss o stop loss automático de reducción, para que las líneas de stop loss sean más inteligentes.

Resumir

La estrategia de banda de media móvil es una de las estrategias de seguimiento de tendencias más comunes. Combina al mismo tiempo la línea rápida y la línea lenta para juzgar la tendencia de la línea media y larga, y establece un mecanismo de filtrado de ruptura continua para decidir la entrada. La estrategia combina el seguimiento de la tendencia y el juicio de sobreventa y sobreventa, y puede mejorar aún más la eficacia de la operación mediante la optimización de los parámetros y la mejora de los indicadores.

Código Fuente de la Estrategia
//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)