Estratégia de trail stop para ES baseada no ATR

Autora:ChaoZhang, Data: 2024-01-12 14:52:23
Tags:

img

Resumo

Esta estratégia é uma estratégia de trailing stop aplicada aos futuros (ES) do E-mini S&P500. Ele usa o ATR de 10 dias como referência e define o intervalo de stop loss para 3 vezes o ATR para definir linhas de stop longas e curtas. A estratégia julga a tendência pela mudança de direção das linhas ATR e gera sinais de entrada em pontos de virada da tendência. Uma vez inserido, ele ajustará as linhas de stop loss em tempo real para seguir o movimento do preço, protegendo os lucros.

Estratégia lógica

A estratégia usa hl2 como fonte de preço. Primeiro, ele calcula o ATR de 10 dias e permite que o usuário escolha entre usar o método SMA ou a função ATR incorporada para calcular o ATR. Depois de obter o ATR, ele adiciona 3 vezes o ATR para cima e para baixo para formar o intervalo. As duas linhas de intervalo são as linhas de stop loss.

O método para julgar a tendência é quando o preço excede o limite superior, ele é longo; quando o preço quebra o limite inferior, ele é curto. Quando o preço retrocede de volta para a faixa, ele confirma a inversão da tendência. Neste momento, se virado de curto para longo, ele gerará um sinal de entrada longa; se virado de longo para curto, ele gerará um sinal de entrada curto.

Após entrar, a linha de stop loss longa é definida no limite superior menos 1 tick, e a linha de stop loss curta é definida no limite inferior mais 1 tick, atrás para proteger os lucros.

Vantagens

  1. A utilização do ATR pode adaptar-se automaticamente às alterações na volatilidade do mercado e reduzir a probabilidade de ação da parada de perdas.
  2. O método de acompanhamento da tendência é simples e eficaz para evitar riscos de perseguir altos e baixos.
  3. O trailing stops bloqueia os lucros e evita a devolução de negócios lucrativos.

Análise de riscos

  1. A definição incorreta dos parâmetros ATR pode fazer com que o intervalo de perda de parada seja demasiado grande ou demasiado pequeno.
  2. As variações drásticas na volatilidade do subjacente podem provocar uma activação anormal do stop loss.
  3. As paradas de tração podem ser conservadoras demais para seguir a tendência.

Orientações de otimização

  1. Considerar a otimização dos parâmetros ATR combinados com métricas de volatilidade.
  2. Teste diferentes algoritmos de trailing stop como percentual de trailing stops etc.
  3. Filtrar sinais de entrada combinados com indicadores de tendência para evitar falsos sinais de tendência.

Conclusão

Em geral, esta é uma estratégia de seguimento de tendência robusta. Resolve o problema de determinar a faixa de stop loss e reduz os riscos ajustando as paradas dinamicamente com base no ATR. Ao mesmo tempo, as paradas de rastreamento bloqueiam os lucros. Mas ainda há espaço para otimizar parâmetros como períodos de ATR, algoritmos de parada, etc. Com mais testes e ajustes, essa estratégia pode se tornar uma estratégia de seguimento de tendência com alta robustez.


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

//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)

// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
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

// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1

// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1

strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)


Mais.