Estratégia de Bandas Múltiplas de Média Móvel


Data de criação: 2023-12-18 12:29:19 última modificação: 2023-12-18 12:29:19
cópia: 1 Cliques: 807
1
focar em
1621
Seguidores

Estratégia de Bandas Múltiplas de Média Móvel

Visão geral

A estratégia de banda de média móvel é uma estratégia de acompanhamento de tendências baseada em múltiplas médias móveis. Ela monitora simultaneamente a média móvel rápida e a média móvel lenta, gerando um sinal de negociação quando o preço quebra a banda de média móvel. A estratégia combina simultaneamente o discernimento de tendências e o indicador de sobrevenda e sobrevenda para capturar efetivamente as tendências de linha média e longa.

Princípio da estratégia

A estratégia usa ao mesmo tempo 5 médias móveis rápidas (linhas de 5 dias, 8 dias, 13 dias, 20 dias e 30 dias) e 4 médias móveis lentas (linhas de 45 dias, 70 dias, 105 dias e 150 dias), com as médias móveis internas da linha rápida e as médias externas da linha lenta. Um sinal de compra é gerado quando o preço atravessa a média interna acima e um sinal de venda quando o preço atravessa a média interna abaixo.

Além disso, a estratégia também julga a tendência de longo prazo. Só se considera um sinal de compra quando o preço está acima da média móvel de 200 dias. Por outro lado, só se considera um sinal de venda quando o preço cai abaixo da média móvel de 200 dias.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O design de múltiplas médias móveis permite determinar com precisão a direção da tendência. As médias móveis internas e externas combinadas com médias rápidas e lentas são eficazes para identificar tendências de linhas médias e longas.

  2. O mecanismo de ruptura contínua pode filtrar eficazmente as falsas rupturas. Ao mesmo tempo, a maioria das rupturas de linha média rápida são necessárias para garantir a mudança de tendência.

  3. Julgar a tendência de longo prazo, para evitar ser coberto na liquidação. Em conjunto com o julgamento da linha de 200 dias, apenas considerar a construção de posições quando a tendência ocorrer uma reversão.

  4. A média móvel tem a função de acompanhamento de tendências, mas, em combinação com o indicador de compra e venda, define o ponto de parada e controla o risco.

Análise de Riscos

A estratégia tem os seguintes riscos:

  1. Risco de falha de ruptura. Quando ocorre uma falsa ruptura no preço, a estratégia não pode evitar completamente a ocorrência de perdas.

  2. Risco de perda em tendências de turbulência. Quando as condições do mercado são turbulentas por um longo período, o ponto de parada pode ser atingido com frequência, aumentando os prejuízos.

  3. Risco de otimização de parâmetros. A configuração incorreta dos parâmetros da média móvel também pode causar erros nos sinais de negociação, aumentando os prejuízos.

Resolução:

  1. A liberação apropriada do ponto de parada, dando ao preço espaço suficiente para funcionar. Ou o método de parada de ljetrail, deixando a linha de parada funcionar com o preço.

  2. Aumentar os indicadores de julgamento de tendências, evitando a construção de posições sem direção durante os períodos de turbulência. Por exemplo, a filtragem de indicadores como DMI, MACD e outros.

  3. Selecionar a melhor combinação de parâmetros usando o histórico e a otimização de parâmetros. Também é necessário acompanhar os efeitos dos parâmetros no disco real para otimização dinâmica.

Direção de otimização

A estratégia pode ser otimizada a partir das seguintes dimensões:

  1. Optimizar os parâmetros de média móvel, escolher o melhor número de períodos. A combinação ideal de parâmetros pode ser encontrada por meio da retomada de diferentes médias móveis de períodos.

  2. Aumentar os indicadores de julgamento de tendências para filtragem. Por exemplo, o indicador RSI julga sobrecompra e sobrevenda, a correia de Bryn julga a ruptura do canal, etc. Evite a posição cega quando a tendência não é clara.

  3. Adotar uma média móvel adaptável. Optimizar os parâmetros da média móvel em tempo real, de acordo com as mudanças e oscilações do mercado, para melhor adaptá-la à situação atual do mercado.

  4. Combinação de modelos de aprendizagem de máquina para determinar a probabilidade de tendência. Estabelecer modelos de probabilidade para avaliar a probabilidade de sucesso da ruptura, ajudando o sistema de decisão a determinar o momento da entrada.

  5. Optimizar a estratégia de stop loss para que o stop loss acompanhe melhor o preço. Por exemplo, traillig stop loss ou stop loss de escala automática, para que a linha de stop loss seja mais inteligente.

Resumir

A estratégia de banda de média móvel é uma das estratégias de acompanhamento de tendências mais comuns. Combina a linha rápida e a linha lenta para julgar a tendência da linha média e a linha média, e define um mecanismo de filtragem de ruptura contínua para decidir o ingresso. A estratégia combina o acompanhamento de tendências e o julgamento de sobrevenda e sobrevenda, o que pode melhorar ainda mais a eficácia da operação por meio da otimização de parâmetros e do reforço do indicador.

Código-fonte da estratégia
//@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)