
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.
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.
A estratégia tem as seguintes vantagens:
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.
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.
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.
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.
A estratégia tem os seguintes riscos:
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.
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.
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:
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.
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.
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.
A estratégia pode ser otimizada a partir das seguintes dimensões:
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.
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.
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.
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.
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.
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.
//@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)