Parabolic SAR Trend Tracking Stop Loss Reversal Strategy là một chiến lược sử dụng chỉ số Parabolic SAR để xác định xu hướng và nhập vào các vị trí chống xu hướng khi xu hướng đảo ngược.
Chiến lược này sử dụng chỉ số Parabolic SAR để đánh giá xu hướng thị trường hiện tại. Parabolic SAR viết tắt của
Khi các điểm SAR đang giảm và dưới giá, nó đại diện cho xu hướng tăng; khi các điểm SAR đang tăng và trên giá, nó đại diện cho xu hướng giảm. Chiến lược đánh giá hướng xu hướng hiện tại dựa trên vị trí các điểm SAR
Cụ thể, khi các điểm SAR cho thấy xu hướng tăng và trên giá, chiến lược sẽ đi ngắn; khi các điểm SAR cho thấy xu hướng giảm và dưới giá, chiến lược sẽ đi dài.
Ngoài ra, chiến lược cũng thiết lập các cơ chế dừng lỗ và lấy lợi nhuận. Khi đi dài, nó có thể thiết lập giá dừng lỗ để hạn chế lỗ; đồng thời, nó có thể thiết lập giá lấy lợi nhuận để đóng các vị trí sau khi đạt được lợi nhuận mục tiêu nhất định. Đi ngắn tương tự.
Những lợi thế chính kết hợp chỉ số xu hướng và cơ chế dừng lỗ / lấy lợi nhuận là:
Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược:
Những rủi ro này có thể được giải quyết bằng cách tối ưu hóa tham số, sử dụng các chỉ số lọc khác v.v.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Nói chung, đây là một chiến lược đảo ngược stop loss theo dõi xu hướng khá cổ điển. Nó xác định sự đảo ngược xu hướng và cũng kiểm soát rủi ro bằng phương tiện dừng lỗ và lấy lợi nhuận. Sau khi tối ưu hóa, nó có thể trở thành một chiến lược có giá trị cho giao dịch trực tiếp.
/*backtest start: 2024-01-24 00:00:00 end: 2024-01-31 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Parabolic SAR Strategy", overlay=true) start = input(0.02) increment = input(0.02) maximum = input(0.2) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := min(AF + increment, maximum) else if low < EP EP := low AF := min(AF + increment, maximum) if uptrend SAR := min(SAR, low[1]) if bar_index > 1 SAR := min(SAR, low[2]) else SAR := max(SAR, high[1]) if bar_index > 1 SAR := max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) if barstate.isconfirmed if uptrend strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE") strategy.cancel("ParLE") else strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE") strategy.cancel("ParSE") plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua) //Stop Loss Inputs use_short_stop_loss = input(false, title="Short Stop Loss", group="Stop Loss and Take Profit", inline="Short_SL") short_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval=5, group="Stop Loss and Take Profit", inline="Short_SL") * 0.01 use_long_stop_loss = input(false, title="Long Stop Loss", group="Stop Loss and Take Profit", inline="Long_SL") long_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval=5, group="Stop Loss and Take Profit", inline="Long_SL") * 0.01 //Take Profit Inputs use_short_take_profit = input(false, title="Short Take Profit", group="Stop Loss and Take Profit", inline="Short_TP") short_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval = 20, group="Stop Loss and Take Profit", inline="Short_TP") * .01 use_long_take_profit = input(false, title="Long Take Profit", group="Stop Loss and Take Profit", inline="Long_TP") long_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval = 20, group="Stop Loss and Take Profit", inline="Long_TP") * .01 longStopPrice = strategy.position_avg_price * (1 - long_stop_loss) shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss) longLimitPrice = strategy.position_avg_price * (1 + long_take_profit) shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit) if (strategy.position_size > 0.0) if (use_long_stop_loss and not use_long_take_profit) strategy.exit("Long", stop = longStopPrice) if (use_long_take_profit and not use_long_stop_loss) strategy.exit("Long", limit = longLimitPrice) if (use_long_take_profit and use_long_stop_loss) strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice) if (strategy.position_size < 0.0) if (use_short_stop_loss and not use_short_take_profit) strategy.exit("Short", stop = shortStopPrice) if (use_short_take_profit and not use_short_stop_loss) strategy.exit("Short", limit = shortLimitPrice) if (use_short_take_profit and use_short_stop_loss) strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice) //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)