Chiến lược SAR Parabolic Trailing Stop dựa trên chỉ số ATR

Tác giả:ChaoZhang, Ngày: 2023-09-13 15:53:00
Tags:

Chiến lược này được gọi là Parabolic SAR Trailing Stop Strategy Based on ATR Indicator. Nó sử dụng chỉ số ATR để điều chỉnh yếu tố gia tốc của Parabolic SAR để thích nghi với sự biến động của thị trường.

Nhân tố tăng tốc của SAR Parabolic truyền thống vẫn cố định và không thể thích nghi với sự biến động tăng lên. Chiến lược này làm cho đường cong SAR rút ngắn nhanh hơn khi giá trị ATR mở rộng, do đó dừng có thể thắt chặt nhanh hơn xung quanh giá khi biến động tăng để kiểm soát rủi ro hiệu quả.

Cụ thể, sau khi xác định xu hướng giá, một nhân tố gia tốc thích nghi được tính dựa trên giá trị ATR để vẽ đường cong dừng kéo theo Parabolic SAR. Khi giá vượt mức dừng, stop loss được kích hoạt.

Ưu điểm của chiến lược này là làm cho các điểm dừng SAR Parabolic truyền thống năng động dựa trên sự biến động của thị trường.

Nhìn chung, các stop thích nghi rất quan trọng để bảo vệ lợi nhuận và hạn chế rủi ro. Các nhà giao dịch nên chọn các chỉ số stop phù hợp dựa trên điều kiện thị trường, và kiểm tra và tối ưu hóa các tham số, để tối đa hóa tính hữu ích của các chiến lược 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)

Thêm nữa