Estratégia de acompanhamento de tendências dinâmicas

ATR
Data de criação: 2024-06-03 16:57:51 última modificação: 2024-06-03 16:57:51
cópia: 4 Cliques: 628
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências dinâmicas

Visão geral

A estratégia usa o indicador Supertrend para capturar a tendência do mercado. O indicador Supertrend combina preço e volatilidade, indicando uma tendência ascendente quando a linha do indicador é verde e uma tendência descendente quando é vermelha. A estratégia gera um sinal de compra e venda detectando mudanças na cor da linha do indicador, enquanto usa a linha do indicador como um ponto de parada dinâmico.

Princípio da estratégia

  1. Calcule a trajetória ascendente (up) e descendente (dn) do indicador Supertrend e julgue a direção da tendência atual (trend) de acordo com a relação entre o preço de fechamento e a trajetória ascendente (down).
  2. Quando a tendência passa de baixa (-1) para alta (-1), gera um sinal de compra (buySignal); quando a tendência passa de alta (-1) para baixa (-1), gera um sinal de venda (sellSignal).
  3. Ao gerar um sinal de compra, abrir uma posição a mais e definir o ponto de parada para o downtrend ((dn); ao gerar um sinal de venda, abrir uma posição a zero e definir o ponto de parada para o uptrend ((up)).
  4. A introdução da lógica de stop loss móvel, quando o preço sobe / desce um determinado número de pontos (trailingValue), o stop loss será movido para cima / para baixo, para obter a proteção de stop loss.
  5. A introdução de uma lógica de parada fixa, que permite que a posição em aberto seja lucrativa quando a tendência muda.

Vantagens estratégicas

  1. Adaptabilidade: O indicador Supertrend combina preço e volatilidade, adaptando-se a diferentes condições de mercado e variedades de negociação.
  2. Stop Loss Dinâmico: O uso da linha de indicadores como ponto de stop-loss dinâmico pode controlar o risco de forma eficaz e reduzir os prejuízos.
  3. Stop loss móvel: A introdução da lógica de stop loss móvel pode proteger os lucros e aumentar a rentabilidade da estratégia enquanto a tendência persiste.
  4. Sinais claros: Os sinais de compra e venda gerados pela estratégia são claros, fáceis de operar e executar.
  5. Flexibilidade de parâmetros: os parâmetros da estratégia (como o ciclo ATR, o multiplicador ATR, etc.) podem ser ajustados de acordo com as características do mercado e o estilo de negociação, aumentando a adaptabilidade.

Risco estratégico

  1. Risco de parâmetros: Diferentes configurações de parâmetros podem causar grandes diferenças no desempenho da estratégia, necessitando de um bom feedback e otimização de parâmetros.
  2. Risco de mercado de turbulência: Em mercados de turbulência, mudanças frequentes de tendência podem levar a estratégias que produzem mais sinais de negociação, aumentando os custos de negociação e o risco de deslizamento.
  3. Risco de ruptura de tendência: quando a tendência do mercado muda de repente, a estratégia pode ajustar a posição mais tarde do que o esperado, resultando em maiores perdas.
  4. Risco de otimização excessiva: a otimização excessiva da estratégia pode levar à curva de ajuste e ao mau desempenho no mercado futuro.

Direção de otimização da estratégia

  1. A introdução de análises de múltiplos quadros temporais, a confirmação da solidez das tendências e a redução da frequência de transações em mercados turbulentos.
  2. Em combinação com outros indicadores técnicos ou fatores fundamentais, para melhorar a precisão do julgamento de tendências.
  3. Otimizar a lógica de stop loss e stop loss, como a introdução de stop loss dinâmico ou o risco-benefício-rácio, para aumentar o lucro-perda da estratégia.
  4. Teste de robustez dos parâmetros, selecionando um conjunto de parâmetros que podem manter um bom desempenho em diferentes condições de mercado.
  5. Introdução de regras de gerenciamento de posições e de gestão de fundos para controlar o risco de transações individuais e o risco global.

Resumir

A estratégia de acompanhamento de tendências dinâmicas usa o indicador Supertrend para capturar a tendência do mercado, controlar o risco de perda por meio de stop loss dinâmico e móvel, e bloquear os lucros usando o stop loss fixo. A estratégia é adaptável, o sinal é claro e fácil de operar.

Código-fonte da estratégia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2)
Periods = input.int(title='ATR Period', defval=10)
src = input.source(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true)
showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input.bool(title='Highlighter On/Off ?', defval=true)

// ATR calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend calculations
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

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

// Plotting
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
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.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))

dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
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.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

// Highlighting
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 Highligter', color=longFillColor, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90)

// Alerts
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!')

// Pip and trailing stop calculation
pips = 50
pipValue = syminfo.mintick * pips
trailingPips = 10
trailingValue = syminfo.mintick * trailingPips

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy")
if (sellSignal)
    strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell")

// Take profit on trend change
if (changeCond and trend == -1)
    strategy.close("Long", comment="SuperTrend Direction Change")
if (changeCond and trend == 1)
    strategy.close("Short", comment="SuperTrend Direction Change")

// Initial Stop Loss
longStopLevel = up - pipValue
shortStopLevel = dn + pipValue

// Trailing Stop Loss
var float longTrailStop = na
var float shortTrailStop = na

if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        if (longTrailStop == na or close > strategy.position_avg_price + trailingValue)
            longTrailStop := high - trailingValue
        strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop)
    if (strategy.position_size < 0)  // Short position
        if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue)
            shortTrailStop := low + trailingValue
        strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop)

// Initial Exit
strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel)
strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)