Parabolische SAR-Trailing Stop-Strategie auf Basis des ATR-Indikators

Schriftsteller:ChaoZhang, Datum: 2023-09-13
Tags:

Diese Strategie trägt den Namen Parabolic SAR Trailing Stop Strategy Based on ATR Indicator. Sie verwendet den ATR-Indikator, um den Beschleunigungsfaktor von Parabolic SAR anzupassen, um sich an die sich ändernde Marktvolatilität anzupassen.

Der Beschleunigungsfaktor des traditionellen Parabol SAR bleibt fest und kann sich nicht an die erhöhte Volatilität anpassen.

Insbesondere wird nach der Bestimmung des Kurstrends ein adaptiver Beschleunigungsfaktor auf Basis des ATR-Wertes berechnet, um die Parabolische SAR-Stopkurve zu zeichnen.

Der Vorteil dieser Strategie besteht darin, dass traditionelle Parabolische SAR-Stopps dynamisch basierend auf der Marktvolatilität sind. Aber die ATR-Parameter müssen optimiert werden, und die Stopplinie kann anfällig für vorzeitige Verletzungen sein.

Im Allgemeinen sind adaptive Stops wichtig, um Gewinne zu schützen und Risiken zu begrenzen. Händler sollten geeignete Stop-Indikatoren basierend auf den Marktbedingungen auswählen und Parameter testen und optimieren, um den Nutzen von Stop-Loss-Strategien zu maximieren.


/*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)

Mehr