Estratégia de faixa de média móvel

Autora:ChaoZhang, Data: 2023-12-18 12:29:19
Tags:

img

Resumo

A estratégia de faixa de média móvel é uma estratégia de tendência baseada em várias médias móveis. Monitora médias móveis rápidas e lentas simultaneamente e gera sinais de negociação quando os preços atravessam a faixa de média móvel. A estratégia combina determinação de tendência e indicadores de sobrecompra / sobrevenda, que podem capturar efetivamente tendências de médio e longo prazo.

Estratégia lógica

A estratégia usa 5 médias móveis rápidas (linhas de 5, 8, 13, 20 e 30 dias) e 4 médias móveis lentas (linhas de 45, 70, 105 e 150 dias). As linhas rápidas formam uma fita de média móvel interna e as linhas lentas formam uma fita de média móvel externa.

Além disso, a estratégia também julga tendências de longo prazo. Ele só considera a geração de sinais de compra quando os preços estão acima da média móvel de 200 dias. Pelo contrário, ele só considera a geração de sinais de venda quando os preços quebram abaixo da média móvel de 200 dias. Ao determinar tendências de longo prazo, ele evita ser preso durante as consolidações.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A combinação de fitas de média móvel interna e externa com linhas rápidas e lentas funciona bem na identificação de tendências de médio a longo prazo.

  2. O mecanismo de ruptura consecutiva pode efetivamente filtrar falsas rupturas.

  3. O uso da linha de 200 dias para determinar permite abrir posições apenas quando as tendências começam a se inverter.

  4. As médias móveis em si têm capacidade de seguir a tendência, enquanto a combinação de indicadores de sobrecompra/supervenda para definir pontos de stop loss garante um bom controlo do risco.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. Quando ocorrem falhas, a estratégia não pode evitar completamente perdas.

  2. Quando o mercado varia por longos períodos, os pontos de stop loss podem ser frequentemente atingidos, levando a perdas maiores.

  3. Risco de otimização de parâmetros: configurações inadequadas de parâmetros da média móvel também podem levar a erros nos sinais de negociação, resultando em maiores perdas.

As soluções correspondentes são:

  1. Ampliar adequadamente os pontos de stop loss para dar aos preços espaço suficiente para se moverem ou adotar um método de stop loss para permitir que a linha de stop loss siga os preços.

  2. Adicionar indicadores de avaliação de tendências para evitar o estabelecimento de posições sem direção durante as consolidações, tais como a filtragem com o DMI, MACD e outros indicadores.

  3. Use métodos de backtesting histórico e otimização de parâmetros para selecionar as melhores combinações de parâmetros.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Optimize os parâmetros da média móvel para selecionar os melhores números de ciclo.

  2. Adicione indicadores de avaliação de tendências para filtragem, tais como RSI para sobrecompra/supervenda, Bandas de Bollinger para rupturas de canal, etc. Evite estabelecer posições cegamente quando as tendências não são claras.

  3. Adotar médias móveis adaptativas. Otimizar os parâmetros das médias móveis de forma dinâmica de acordo com a mudança das condições e volatilidade do mercado, de modo a que se adequem melhor aos estados atuais do mercado.

  4. Combinar modelos de aprendizagem de máquina para julgar as probabilidades de tendência. Estabelecer modelos de probabilidade para avaliar as chances de uma ruptura bem sucedida, ajudando o sistema de decisão a julgar o momento ideal de entrada.

  5. Otimize estratégias de stop loss para melhor rastreamento de preços, como trailing stop loss ou dimensionamento dinâmico de posição para tornar a linha de stop loss mais inteligente.

Resumo

A estratégia de faixa de média móvel é uma das estratégias mais comuns de tendência. Combina linhas rápidas e lentas para julgar tendências de médio e longo prazo e define mecanismos de ruptura consecutivos para decidir entradas. A estratégia equilibra as condições de tendência e sobrecompra / sobrevenda. Com otimização de parâmetros e aprimoramento do indicador, seu desempenho pode ser melhorado.


//@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)



Mais.