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.
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.
A maior vantagem desta estratégia é a combinação de capacidades de identificação e acompanhamento de tendências:
Os principais riscos desta estratégia incluem:
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.
Existe ainda espaço de otimização em áreas como:
A otimização aprofundada promete aumentar ainda mais a estabilidade, a adaptabilidade e a rentabilidade da estratégia.
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!")