Tendência seguindo uma estratégia baseada na média móvel dinâmica

Autora:ChaoZhang, Data: 2024-01-02 10:44:53
Tags:

img

Resumo

Esta estratégia baseia-se no indicador de média móvel dinâmica para rastrear a tendência de preços em tempo real e gerar sinais de negociação quando a média móvel é quebrada.

Estratégia lógica

Esta estratégia utiliza indicadores de média móvel dinâmica, incluindo ALMA, EMA, SMA e mais. O princípio é ir longo quando o preço quebra acima da média móvel e ir curto quando quebra abaixo. Ou seja, a média móvel serve como um barómetro para a tendência de preços, e os sinais podem ser gerados quando ocorre uma inversão de tendência.

Especificamente, a estratégia usa médias móveis formadas por preços altos e baixos. O MA de preço baixo serve como linha de sinal para sinais longos, enquanto o MA de preço alto serve como linha para shorts. Quando o preço de fechamento sobe acima do MA de preço baixo, vá longo. Quando o fechamento cai abaixo do MA de preço alto, vá curto.

Ao julgar a tendência do preço com MA e combinando com o princípio de ruptura para gerar sinais, uma estratégia de tendência simples e prática é formada.

Vantagens

  • Configuração de parâmetros simples com indicador MA, fácil de operar
  • Regras claras de sinalização sem falsos sinais
  • Tipos flexíveis de autorização de importação para se adaptarem às alterações do mercado
  • Períodos MA ajustáveis adequados a diferentes ciclos de tendência
  • A validação do sinal em vários prazos melhora a fiabilidade

Riscos e soluções

  • O MA lag pode perder algumas oportunidades.
    • Redução do período de MA ou utilização da EMA
  • Grandes riscos de variação a curto prazo
    • Ampliar a margem de perda de paragem para flexibilidade
  • Riscos de detenção de longo prazo, incapaz de garantir o lucro a tempo
    • Combine outros indicadores, evite perseguir altos e matar baixos

Orientações de otimização

  • Ajustar o tipo de MA e os parâmetros com base nas características do símbolo
  • Adicionar indicadores auxiliares para melhorar a estratégia
  • Adicionar mecanismos de stop loss e take profit
  • Avaliação da fiabilidade do sinal em intervalos de tempo
  • Utilize o aprendizado de máquina para encontrar melhores parâmetros

Conclusão

Esta estratégia julga a direção da tendência com MA e gera sinais com base nos princípios de breakout. É simples de usar e adequado para a detenção de médio a longo prazo. Os parâmetros também podem ser ajustados para se adaptar às mudanças do mercado. Os riscos de flutuações de curto prazo e a detenção longa precisam ser gerenciados com stop loss / take profit. Há espaço para melhoria incorporando mais indicadores e encontrando parâmetros ideais por meio de aprendizado de máquina.


/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true)

//INPUTS
mat =               input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"])
baseline =          input(55, title="MA Length")
src =               input(ohlc4, title="Closing Source")

offset =            input(0.85, step=0.05, title="Offset (alma only)")
sigma =             input(10, title="Sigma (alma only)")

useCurrentRes =     input(true, title="Use Current Resolution")
resCustom =         input("1440", title="Timeframe")

showsignals =       input(false, title="Show Signals ?")

//BASELINE
baselinehigh = 

 mat=="SMA" ? sma(high,baseline) : 
 mat=="EMA" ? ema(high,baseline) : 
 mat=="WMA" ? wma(high,baseline) : 
 mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(high,baseline) : 
 mat=="RMA" ? rma(high,baseline) :
 mat=="ALMA" ? alma(high, baseline, offset, sigma) : na

baselinelow = 

 mat=="SMA" ? sma(low,baseline) : 
 mat=="EMA" ? ema(low,baseline) : 
 mat=="WMA" ? wma(low,baseline) : 
 mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(low,baseline) : 
 mat=="RMA" ? rma(low,baseline) : 
 mat=="ALMA" ? alma(low, baseline, offset, sigma) : na

//RESOLUTION
res =               useCurrentRes ? timeframe.period : resCustom

mtfhigh =           security(syminfo.tickerid, res, baselinehigh)
mtflow =            security(syminfo.tickerid, res, baselinelow)

//PLOTS
plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High")
plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low")

long =              src > mtfhigh
short =             src < mtflow

barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor")

signal = 0
signal := long ? 1 : short ? 2 : nz(signal[1])

plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00)
plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000)

alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !")

if (long)
    strategy.entry("Long", strategy.long)
if (short)
    strategy.entry("Short", strategy.short)

Mais.