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.
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.
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)