Estratégia de negociação de breakout baseada no canal Super Trend


Data de criação: 2024-02-18 14:19:58 última modificação: 2024-02-18 14:19:58
cópia: 2 Cliques: 683
1
focar em
1617
Seguidores

Estratégia de negociação de breakout baseada no canal Super Trend

Visão geral

A estratégia é baseada no desenvolvimento de indicadores de canais de supertrend. Combina a movimentação dos preços com a direção do canal de supertrend para avaliar a tendência do mercado e emitir sinais de negociação quando a direção do canal é alterada.

Quando o preço quebra o canal de super-trend, compra mais; quando o preço cai abaixo do canal de super-trend, vende a zero. Ao mesmo tempo, possui um mecanismo de parada de seguimento de tendência.

Princípio da estratégia

O canal de tendência super é composto por um caminho de subida e um caminho de descida. O interior do canal é a região de equilíbrio e o exterior do canal é a região de tendência. Ele usa a amplitude do canal para determinar a largura do canal, multiplicando a amplitude real média por um múltiplo.

Quando o preço sobe de baixo para cima, é um sinal de compra. Isso significa que uma nova tendência ascendente é iniciada. Quando o preço desce de cima para baixo, é um sinal de venda. Isso significa que uma nova tendência descendente começa.

A estratégia usa o indicador de canal de supertrend para determinar a direção da tendência principal. Quando a direção do canal se inverte, ou seja, quando o preço quebra a trajetória do canal, emite um sinal de negociação; e, em seguida, usa a tendência para rastrear o stop loss e bloquear o lucro.

Análise de vantagens

Esta é uma estratégia de ruptura simples e intuitiva, que tem as seguintes vantagens:

  1. Utilize o canal de tendências super para determinar a direção das principais tendências, evitando o ruído do iB.

  2. Por outro lado, o preço de um canal pode influenciar o tempo de vaga.

  3. O mecanismo de parada de prejuízos é claro e permite controlar o risco de forma eficaz.

  4. O Stop Loss é um método de rastreamento de tendências que permite o bloqueio máximo de lucros.

Riscos e melhorias

A estratégia também apresenta alguns riscos, incluindo:

  1. Os parâmetros do canal de supertrend estão mal definidos, o que pode levar a falsos sinais.

  2. O sinal de ruptura pode ser um sinal de inversão de curto prazo, resultando em prejuízos.

  3. O método de parada de perda é apenas para acompanhar a tendência e pode parar prematuramente.

As medidas de melhoria correspondentes incluem:

  1. Teste de dados de diferentes mercados, parâmetros de otimização.

  2. Em combinação com outros indicadores, os sinais de filtragem

  3. Combinado com a estrutura de preços, para determinar a confiabilidade do sinal de ruptura.

  4. Aumentar a perda de fundo para controlar ainda mais o risco.

Resumir

A estratégia, em geral, é uma estratégia de acompanhamento de tendências mais simples e intuitiva. Ela usa o canal de tendências super claras para determinar a direção da tendência, gerando um sinal quando a conduta se reverte; e, em seguida, usa o método de parada de tendências para bloquear o lucro.

Em comparação com outros indicadores, o canal de super-trend é mais tolerante às flutuações de preços. No entanto, a estratégia também tem um certo espaço de lucro, que pode ser otimizado em termos de filtragem de sinais e paragem de perdas, para aumentar ainda mais a estabilidade.

Código-fonte da estratégia
/*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)))