Estratégia de negociação de ruptura da Supertrend

Autora:ChaoZhang, Data: 2024-02-18 14:19:58
Tags:

img

Resumo

Esta estratégia é desenvolvida com base no indicador Supertrend, que combina a ação do preço e a direção do canal Supertrend para julgar as tendências do mercado e gerar sinais de negociação quando a direção do canal muda.

Quando o preço atravessa o canal Supertrend, vá longo; quando o preço quebra abaixo do canal inferior do Supertrend, vá curto.

Estratégia lógica

O canal Supertrend consiste de um trilho superior e um trilho inferior. A área dentro do canal é a área de consolidação e a área fora é a área de tendência. Ele usa a faixa média verdadeira multiplicada por um fator para determinar a largura do canal.

Quando o preço atravessa o trilho superior da parte inferior, é um sinal de compra. Isso significa que uma nova tendência de alta está começando. Quando o preço atravessa o trilho inferior da parte superior, é um sinal de venda. Isso significa que uma nova tendência de queda está começando.

A estratégia usa o indicador Supertrend para julgar a direção da tendência principal. Quando a direção do canal muda, ou seja, quando o preço quebra os trilhos do canal, são gerados sinais de negociação.

Análise das vantagens

Esta é uma estratégia de fuga relativamente simples e intuitiva.

  1. Utilize os canais de Supertrend para determinar a direção da tendência principal e evitar o ruído da negociação.

  2. Ir com a tendência, julgar oportunidades longas e curtas com base na relação do preço com o canal.

  3. Dispõe de um mecanismo de stop loss claro para controlar eficazmente os riscos.

  4. O método de stop loss é o rastreamento da tendência stop loss, que pode maximizar o bloqueio de lucro.

Riscos e melhorias

Esta estratégia apresenta também alguns riscos, nomeadamente:

  1. A configuração incorreta dos parâmetros do Supertrend pode conduzir a sinais falsos.

  2. Os sinais de ruptura podem ser sinais de reversão a curto prazo, resultando em perdas.

  3. O método de stop loss consiste apenas no rastreamento da tendência, o que pode impedir a perda prematuramente.

As medidas de melhoria correspondentes incluem:

  1. Testar dados de diferentes mercados e otimizar parâmetros.

  2. Os sinais de filtragem em combinação com outros indicadores.

  3. Julgar a fiabilidade dos sinais de ruptura combinados com a estrutura de preços.

  4. Aumentar a perda de parada de fundo para controlar ainda mais os riscos.

Resumo

Em geral, esta estratégia é uma estratégia de tendência relativamente simples e intuitiva. Ele usa canais Supertrend para determinar claramente a direção da tendência e gera sinais quando o canal muda de direção.

Em comparação com outros indicadores, o canal Supertrend tem uma melhor tolerância às flutuações de preços. Mas ainda há espaço para lucro para esta estratégia. Pode ser otimizado em termos de filtragem de sinal e métodos de stop loss para melhorar ainda mais a estabilidade.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend TEST Strategy", overlay = true, format=format.price, precision=2)

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hlc3, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=4.7)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
tp=close
sl=close

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 )
plotshape(buySignal and showsignals ? up : na, title="Лонг", text="Лонг", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white )
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 )
plotshape(sellSignal and showsignals ? dn : na, title="Шорт", text="Шорт", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white )
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



if (strategy.position_size > 0)
	tp:=tp[1]
	sl:=up
	strategy.exit("Long_TP/SL","Long",limit=tp, stop=sl)
	
if (strategy.position_size < 0)
	tp:=tp[1]
	sl:=dn
	strategy.exit("Short_TP/SL","Short",limit=tp, stop=sl)



if buySignal 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if sellSignal
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))




Mais.