Estratégia de acompanhamento de tendências baseada em SuperTrend

Autora:ChaoZhang, Data: 2023-12-08 17:07:53
Tags:

img

Resumo

Esta estratégia é construída com base no indicador Average True Range (ATR) para construir uma linha SuperTrend para julgar a direção da tendência do mercado e gerar sinais de negociação.

Estratégia lógica

A estratégia calcula o ATR durante um determinado período e o compara com o preço para determinar se o preço está dentro de um canal de tendência de alta. Especificamente, primeiro calcula o ATR, em seguida, usa o valor do ATR multiplicado por um fator para traçar as bandas superior e inferior. Quando o preço é maior que a banda superior, uma tendência de alta é identificada. Quando o preço está abaixo da banda inferior, uma tendência de queda é identificada. Em uma tendência de alta, se o preço mudar de tendência de baixa para tendência de alta, um sinal de compra é gerado. Em uma tendência de baixa, se o preço mudar de tendência de alta para tendência de baixa, um sinal de venda é ativado.

A chave está na construção do benchmark de julgamento de tendência - linha SuperTrend. A linha SuperTrend é baseada no ATR, que muda dinamicamente, o que pode efetivamente filtrar o ruído do mercado e determinar a direção da tendência principal. Enquanto isso, a linha SuperTrend tem um certo efeito de atraso, o que ajuda a confirmar pontos de reversão da tendência e evitar a geração de sinais de negociação incorretos.

Vantagens

A maior vantagem desta estratégia é a combinação de capacidades de identificação e acompanhamento de tendências:

  1. A linha SuperTrend baseada em ATR pode identificar eficazmente as tendências do mercado e filtrar o ruído.
  2. O efeito de atraso da linha SuperTrend ajuda a reduzir sinais incorretos.
  3. Pode dar tanto o julgamento da tendência e sinais de negociação para fácil operação.
  4. Os parâmetros podem ser otimizados para se adequarem a mercados mais diversos.
  5. Os indicadores visuais permitem julgamentos intuitivos da tendência.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. A configuração incorreta dos parâmetros ATR pode causar linhas SuperTrend demasiado sensíveis ou atrasadas.
  2. Não pode evitar completamente o impacto do ruído, que pode ocasionalmente desencadear sinais incorretos.
  3. A precisão diminui durante as violentas flutuações do mercado.
  4. Não pode prever pontos de reversão da tendência, mas só pode rastrear tendências existentes.

As possíveis soluções incluem a otimização de parâmetros como o período ATR e o fator SuperTrend, combinando-os com outros indicadores para verificação e reduzindo as probabilidades de sinal incorreto.

Orientações de otimização

Existe ainda espaço de otimização em áreas como:

  1. Adotar aprendizado de máquina para otimização automática de parâmetros.
  2. Adicionando indicadores como médias móveis exponenciais para verificação.
  3. Estabelecer estratégias de stop loss/profit taking para uma gestão refinada do dinheiro.
  4. Combinando indicadores de sentimento e análise de notícias para prever potenciais inversões de tendência.
  5. Aproveitando a aprendizagem profunda para analisar mais dados históricos e melhorar a precisão.

A otimização aprofundada promete aumentar ainda mais a estabilidade, a adaptabilidade e a rentabilidade da estratégia.

Conclusão

A estratégia demonstra grande estabilidade, confiabilidade e lucratividade em geral. A construção da linha SuperTrend para o julgamento de tendências principais e sinais de negociação é seu maior destaque. Mas certo grau de efeito de atraso e riscos de julgamento errado existem. A otimização de parâmetros e modelos promete melhor desempenho da estratégia. Em resumo, como uma estratégia típica baseada em tendências, vale a pena verificá-la e utilizá-la na negociação ao vivo.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend Strategy", overlay = true)

Periods = input(10, title="ATR Period")
src = input(hl2, title="Source")
Multiplier = input(3.0, title="ATR Multiplier", step=0.1)
changeATR = input(true, title="Change ATR Calculation Method?")
showsignals = input(true, title="Show Buy/Sell Signals?")
highlighting = input(true, title="Highlighter On/Off?")

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)

longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white

fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)

alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


Mais.