Esta estratégia é chamada de estratégia de parada de paralisação baseada no indicador ATR. A estratégia usa o indicador ATR para ajustar a velocidade de contração da curva de parada de paralisação para que ela possa se adaptar às mudanças na volatilidade do mercado.
O fator de aceleração do stop loss de uma linha de paralisação tradicional é fixo e não pode lidar com o aumento da taxa de flutuação. Esta estratégia acelera a velocidade de contração da linha de paralisação com o aumento do valor do ATR, de modo que, quando a flutuação aumenta, a curva de parada pode se aproximar mais rapidamente do preço, controlando o risco de forma eficaz.
Concretamente, a estratégia determina a direção da tendência do preço, calcula um fator de aceleração adaptativo com base no valor do ATR e, com base nisso, traça a curva de parada de paralisação. Quando o preço quebra a linha de parada, execute a parada de perda.
A vantagem desta estratégia é que a parada de paralisação tradicional permite um ajuste dinâmico com base na volatilidade do mercado. No entanto, os parâmetros do ATR precisam ser otimizados e a parada de paralisação é muito sensível e facilmente quebrada.
De um modo geral, a auto-adaptação de stop loss é importante para proteger os lucros e controlar os riscos. O comerciante deve escolher o indicador de stop loss apropriado de acordo com as condições do mercado e testar e otimizar os parâmetros para obter a máxima eficácia da estratégia de stop loss.
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="ATR Parabolic SAR Strategy [QuantNomad]", shorttitle="ATR PSAR Strategy [QN]", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
atr_length = input(14)
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
entry_bars = input(1, title = "Entry on Nth trend bar")
atr = atr(atr_length)
atr := na(atr) ? tr : atr
psar = 0.0 // PSAR
af = 0.0 // Acceleration Factor
trend_dir = 0 // Current direction of PSAR
ep = 0.0 // Extreme point
trend_bars = 0
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1] // PSAR switches from short to long
trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long
// Calculate trend direction
trend_dir := barstate.isfirst[1] and close[1] > open[1] ? 1 :
barstate.isfirst[1] and close[1] <= open[1] ? -1 :
sar_long_to_short ? -1 :
sar_short_to_long ? 1 : nz(trend_dir[1])
trend_bars := sar_long_to_short ? -1 :
sar_short_to_long ? 1 :
trend_dir == 1 ? nz(trend_bars[1]) + 1 :
trend_dir == -1 ? nz(trend_bars[1]) - 1 :
nz(trend_bars[1])
// Calculate Acceleration Factor
af := trend_change ? start :
(trend_dir == 1 and high > ep[1]) or
(trend_dir == -1 and low < ep[1]) ?
min(maximum, af[1] + increment) :
af[1]
// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high :
trend_change and trend_dir == -1 ? low :
trend_dir == 1 ? max(ep[1], high) :
min(ep[1], low)
// Calculate PSAR
psar := barstate.isfirst[1] and close[1] > open[1] ? low[1] :
barstate.isfirst[1] and close[1] <= open[1] ? high[1] :
trend_change ? ep[1] :
trend_dir == 1 ? psar[1] + af * atr :
psar[1] - af * atr
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red, linewidth = 2)
// Strategy
strategy.entry("Long", true, when = trend_bars == entry_bars)
strategy.entry("Short", false, when = trend_bars == -entry_bars)