Estratégia de Supertrend de rastreamento

Autora:ChaoZhang, Data: 2023-12-26 15:58:55
Tags:

img

Resumo

Esta é uma estratégia de supertrend de rastreamento que combina principalmente indicadores de supertrend com diferentes configurações de parâmetros para alcançar um efeito de rastreamento e usa um indicador de filtro para controle de risco.

Princípio da estratégia

Esta estratégia consiste principalmente de três grupos de indicadores de supertrend com configurações de parâmetros diferentes. O primeiro grupo é o principal indicador de supertrend que usa os parâmetros padrão para julgamento básico das tendências do mercado. O segundo grupo é o indicador de supertrend adjunto, que alcança um rastreamento mais sensível das mudanças de preço reduzindo o período ATR e aumentando o multiplicador ATR. O terceiro grupo é o indicador de supertrend de filtro, que aumenta adequadamente o período ATR e o multiplicador ATR para filtrar falhas.

Quando a supertendência principal emite um sinal de compra, se a supertendência vice também emite um sinal sincronizado e a direção da supertendência do filtro é para cima, a estratégia tomará a compra de rastreamento.

Vantagens

  1. A ideia de estratégia é simples e clara, fácil de entender, adequada para iniciantes a aprender
  2. A definição dos parâmetros de estratégia é razoável para acompanhar eficazmente o mercado e controlar os riscos
  3. O sinal de estratégia é mais preciso e confiável com maior taxa de vitória
  4. Combinação de diferentes combinações de parâmetros para obter efeito de rastreamento
  5. A adição de um mecanismo de filtragem pode filtrar efetivamente falsos sinais e controlar riscos

Riscos

  1. Riscos sistemáticos inerentes ao próprio estoque
  2. Indicador de supertendência pode atrasar em alguns mercados
  3. Ajustes incorretos dos parâmetros ATR podem causar desvios de sinal
  4. O volume de negociação insuficiente pode dificultar a redução total das perdas

Principais medidas de prevenção dos riscos:

  1. Escolha ações com boa liquidez e grandes flutuações
  2. Otimizar razoavelmente os parâmetros para reduzir a possibilidade de atraso
  3. Teste e otimização de parâmetros para melhorar a precisão do sinal
  4. Aumentar adequadamente o volume de transacções para garantir espaço de redução de perdas

Orientações de otimização

  1. Teste diferentes combinações de períodos ATR para otimizar o efeito de rastreamento
  2. Tentar outros indicadores de volatilidade para substituir o ATR
  3. Aumentar ou diminuir o número de combinações de supertendências para testar o efeito
  4. Tente combinar com outros indicadores para otimização de filtragem de sinal
  5. Teste diferentes métodos de stop loss para encontrar a solução ideal

Resumo

A ideia geral desta estratégia é clara e simples. Ao coordenar vários grupos de indicadores de supertrend com diferentes configurações de parâmetros, ele realiza o rastreamento de entrada e controle de risco. O sinal de estratégia é mais preciso com bom desempenho ao vivo. É adequado para iniciantes aprenderem e também pode ser usado como um modelo para testar e otimizar vários indicadores e parâmetros. Esta é uma estratégia de supertrend que vale a pena recomendar.


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

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

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hl2, 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

sPeriods=input(title="ATR Period", type=input.integer, defval=8)
sMultiplier=input(title="dop ATR Multiplier", type=input.float, step=0.1, defval=1.5)
satr2 = sma(tr, sPeriods)
satr= changeATR ? atr(sPeriods) : satr2
ssup=ohlc4-(sMultiplier*satr)
ssup1 = nz(ssup[1],ssup)
ssup := close[1] > ssup1 ? max(ssup,ssup1) : ssup
sdn=ohlc4+(sMultiplier*satr)
sdn1 = nz(sdn[1], sdn)
sdn := close[1] < sdn1 ? min(sdn, sdn1) : sdn
strend = 1
strend := nz(strend[1], strend)
strend := strend == -1 and close > sdn1 ? 1 : strend == 1 and close < ssup1 ? -1 : strend
sbuySignal = strend == 1 and strend[1] == -1
ssellSignal = strend == -1 and strend[1] == 1

fPeriods=input(title="ATR Period", type=input.integer, defval=10)
fMultiplier=input(title="filter ATR Multiplier", type=input.float, step=0.1, defval=5)
fatr2 = sma(tr, fPeriods)
fatr= changeATR ? atr(fPeriods) : fatr2
fup=ohlc4-(fMultiplier*fatr)
fup1 = nz(fup[1],fup)
fup := close[1] > fup1 ? max(fup,fup1) : fup
fdn=ohlc4+(fMultiplier*fatr)
fdn1 = nz(fdn[1], fdn)
fdn := close[1] < fdn1 ? min(fdn, fdn1) : fdn
ftrend = 1
ftrend := nz(ftrend[1], ftrend)
ftrend := ftrend == -1 and close > fdn1 ? 1 : ftrend == 1 and close < fup1 ? -1 : ftrend
fbuySignal = ftrend == 1 and ftrend[1] == -1
fsellSignal = ftrend == -1 and ftrend[1] == 1
tcolor=color.new(color.gray,50)
fdnPlot = plot(ftrend == 1 ? na : fdn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=tcolor)
fupPlot = plot(ftrend == 1 ? fup : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=tcolor)



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 and  ftrend==1) or (sbuySignal and trend==1 and  ftrend==1)) 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if ((sellSignal and ftrend==-1) or (ssellSignal and trend==-1 and  ftrend==-1)) 
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))


Mais.