Strategi SAR Parabolik Trailing Stop Berdasarkan Indikator ATR

Penulis:ChaoZhang, Tanggal: 2023-09-13 15:53:00
Tag:

Strategi ini disebut Parabolic SAR Trailing Stop Strategy Based on ATR Indicator. Ini menggunakan indikator ATR untuk menyesuaikan faktor akselerasi Parabolic SAR untuk beradaptasi dengan perubahan volatilitas pasar.

Faktor akselerasi dari SAR Parabolik tradisional tetap tetap dan tidak dapat beradaptasi dengan meningkatnya volatilitas. Strategi ini membuat kontrak kurva SAR lebih cepat karena nilai ATR berkembang, sehingga stop dapat memperketat lebih cepat di sekitar harga ketika volatilitas meningkat untuk secara efektif mengendalikan risiko.

Secara khusus, setelah menentukan tren harga, faktor akselerasi adaptif dihitung berdasarkan nilai ATR untuk memetakan kurva stop trailing Parabolic SAR.

Keuntungan dari strategi ini adalah membuat berhenti SAR Parabolik tradisional dinamis berdasarkan volatilitas pasar.

Secara umum, stop adaptif penting untuk melindungi keuntungan dan membatasi risiko. Pedagang harus memilih indikator stop yang sesuai berdasarkan kondisi pasar, dan menguji dan mengoptimalkan parameter, untuk memaksimalkan utilitas strategi 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)

Lebih banyak