Chiến lược đảo ngược lỗ dừng theo dõi xu hướng SAR Parabolic

Tác giả:ChaoZhang, Ngày: 2024-02-01 14:54:09
Tags:

img

Tổng quan

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 logic

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 Parabolic Stop and Reverse. Các đường chỉ số của nó tạo thành một loạt các parabola trên biểu đồ giá, và các điểm parabola này đại diện cho các điểm đảo ngược tiềm năng.

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ự.

Phân tích lợi thế

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à:

  1. Khai thác kịp thời các cơ hội thay đổi xu hướng để giao dịch ngược xu hướng.
  2. Kiểm soát tích cực rủi ro và lợi nhuận bằng cách thiết lập dừng lỗ và lấy lợi nhuận.
  3. Parabolic SAR là một chỉ số ngược được sử dụng rộng rãi và hiệu quả.
  4. Quy tắc chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược:

  1. Chỉ số SAR Parabolic không hoàn hảo, đôi khi nó tạo ra tín hiệu sai.
  2. Giá dừng lỗ và lấy lợi nhuận cần phải được thiết lập hợp lý, nếu không nó có thể dừng lại hoặc lấy lợi nhuận sớm.
  3. Các khoản hoa hồng giao dịch cũng ảnh hưởng đến tổng lợi nhuận.
  4. Xu hướng mới sau khi đảo ngược có thể ngắn ngủi.

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.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tối ưu hóa các thông số SAR Parabolic để tìm kết hợp tốt nhất.
  2. Hãy thử các chiến lược dừng lỗ khác nhau và lấy chiến lược lợi nhuận như dừng lỗ.
  3. Thêm các chỉ số hoặc điều kiện để lọc tín hiệu giao dịch ngược.
  4. Thêm kiểm soát vị trí dựa trên điều kiện thị trường.
  5. Điều chỉnh các tham số cho các công cụ giao dịch khác nhau.

Kết luận

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)

Thêm nữa