Parabolic SAR Dynamic Breakout Triple SMMA Chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-08 11:53:09
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch đột phá kết hợp các chỉ số SAR parabolic và ba đường SMMA với các giai đoạn khác nhau. Nó đi dài khi cả ba đường SMMA đang tăng và đi ngắn khi tất cả đều giảm, trong khi sử dụng chỉ số SAR để xác định hướng xu hướng và lấy các mục chống xu hướng khi SAR lật hướng. Chiến lược cũng kết hợp dừng lỗ và lấy lợi nhuận.

Chiến lược logic

Chiến lược dựa trên các điểm chính sau:

  1. Sử dụng chỉ số SAR parabolic để xác định hướng xu hướng hiện tại. SAR có thể theo dõi thay đổi giá và xác định xu hướng tăng và giảm.

  2. Thiết lập ba đường SMMA với các giai đoạn khác nhau (đường nhanh 21, đường trung bình 50, đường chậm 200). Khi cả ba đường đều tăng, nó báo hiệu xu hướng tăng. Khi tất cả đều giảm, nó báo hiệu xu hướng giảm.

  3. Đi dài khi SAR lật xuống trong khi cả ba đường SMMA đang tăng.

  4. Đi ngắn khi SAR lật lên trong khi cả ba đường SMMA đang giảm.

  5. Bao gồm dừng lỗ dựa trên SAR và lấy lợi nhuận ở một tỷ lệ phần trăm nhất định của giá nhập cảnh.

Cụ thể, chiến lược đầu tiên kiểm tra xem SAR có chuyển hướng trên thanh hiện tại không. Nếu SAR chuyển từ trên xuống dưới trong khi SMMA đang tăng, nó sẽ dài. Nếu SAR chuyển từ dưới lên trên trong khi SMMA đang giảm, nó sẽ ngắn.

Sau khi nhập, stop loss được đặt ở giá SAR trên thanh tiếp theo, sử dụng SAR như là một stop loss theo dõi động. Lợi nhuận được đặt ở mức 10% giá nhập. Khi giá đạt đến mức take profit hoặc stop loss, vị trí được đóng.

Phân tích lợi thế

Chiến lược này kết hợp lợi thế của chỉ số theo xu hướng và nhiều khung thời gian chuyển động trung bình, cho phép ghi vào thời gian tại xu hướng đảo ngược trong khi lọc ra các đột phá sai với SMMA.

  1. SAR có thể nhanh chóng phát hiện sự thay đổi xu hướng và nắm bắt các cơ hội đảo ngược.

  2. Các SMMA ba lần lọc hiệu quả tiếng ồn thị trường và tránh phá vỡ sai.

  3. Sử dụng SMMA dẫn đến các đường cong mượt mà hơn và ít can thiệp từ MA whipsaws.

  4. Kết hợp dừng lỗ và lấy lợi nhuận giúp kiểm soát lỗ giao dịch duy nhất và khóa lợi nhuận một phần.

  5. Cài đặt tham số linh hoạt cho phép tối ưu hóa cho các thị trường khác nhau.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro cần xem xét:

  1. SAR có thể thường xuyên thay đổi trong các xu hướng hỗn loạn, làm tăng chi phí từ giao dịch quá mức.

  2. Cài đặt SMMA có thể không phù hợp với tất cả các dụng cụ, đòi hỏi tối ưu hóa cá nhân.

  3. SAR dừng lỗ có thời gian trễ, có khả năng tăng lỗ.

  4. SAR có thể xoay chuyển các sự phá vỡ sai trong xu hướng ổn định.

  5. Thiết lập SMMA kém có thể gây ra xu hướng bị bỏ lỡ hoặc tín hiệu xấu.

Để giải quyết rủi ro, tối ưu hóa có thể tập trung vào:

  1. Điều chỉnh các tham số SAR dựa trên biến động để giảm lật.

  2. Điều chỉnh thời gian SMMA để phù hợp với các đặc điểm của thiết bị.

  3. Cải thiện lệnh dừng lỗ, ví dụ như với lệnh trailing hoặc lệnh giới hạn.

  4. Sử dụng lệnh giới hạn để dừng lỗ trong giao dịch tích cực.

  5. Kiểm tra và điều chỉnh các thông số.

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

Dựa trên phân tích trên, tối ưu hóa có thể bao gồm:

  1. Tối ưu hóa các thông số SAR cho đường cong mượt mà hơn và ít lật hơn.

  2. Điều chỉnh chiều dài SMMA để phù hợp với các công cụ giao dịch.

  3. Sử dụng lệnh dừng lỗ động như lệnh dừng hoặc lệnh giới hạn.

  4. Sử dụng lệnh giới hạn để dừng lỗ trong giao dịch tần số cao.

  5. Thêm các bộ lọc như RSI, KD để cải thiện chất lượng tín hiệu.

  6. Cải thiện điều kiện nhập cảnh, ví dụ như kiểm tra các mẫu nến bằng cách lật SAR.

  7. Thêm các điều kiện nhập lại sau khi kích hoạt stop loss.

  8. Tăng lợi nhuận với những mức thấp, gần một phần, đáng kinh ngạc.

  9. Điều chỉnh tham số dựa trên kết quả backtest và phân tích độ nhạy.

Tóm lại

Tóm lại, đây là một chiến lược breakout đơn giản và thực tế kết hợp sự nhạy cảm của SAR trong việc bắt sự thay đổi xu hướng và hiệu ứng lọc của đường trung bình động. Nó có thể xác định các điểm đảo ngược xu hướng nhanh chóng. Việc sử dụng stop loss và take profit giúp kiểm soát rủi ro và khóa lợi nhuận. Việc tối ưu hóa thêm các thiết lập tham số, quy tắc nhập / xuất, và độ mạnh mẽ chống lại các đột phá sai có thể cải thiện hiệu suất chiến lược cho các công cụ giao dịch khác nhau.


/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03)
start = input.float(0.02, step=0.01, group="SAR")
increment = input.float(0.02, step=0.01, group="SAR")
maximum = input.float(0.2, step=0.01, group="SAR")

//Take Profit Inputs     
take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01

//Stop Loss Inputs
stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01

// Smooth Moving Average
fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average")
midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average")
slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average")

src = input(close, title="Source", group = "Smooth Moving Average")

smma(ma, src, len) => 
    smma = 0.0
    smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len
    smma

fastSma = ta.sma(src, fastSmmaLen)
midSma = ta.sma(src, midSmmaLen)
slowSma = ta.sma(src, slowSmmaLen)

fastSmma = smma(fastSma, src, fastSmmaLen)
midSmma = smma(midSma, src, midSmmaLen)
slowSmma = smma(slowSma, src, slowSmmaLen)

isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1)

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 := math.max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := math.min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := math.min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := math.min(AF + increment, maximum)
	if uptrend
		SAR := math.min(SAR, low[1])
		if bar_index > 1
			SAR := math.min(SAR, low[2])
	else
		SAR := math.max(SAR, high[1])
		if bar_index > 1
			SAR := math.max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

sarIsUpTrend = uptrend ? true : false

sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false
sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false


longEntryCondition = isSmmaUpward and sarFlippedDown
shortEntryCondition = not isSmmaUpward and sarFlippedUp

if(longEntryCondition)
    strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L")

if(shortEntryCondition)
    strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S")


strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss))
strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss))


plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua)
plot(series = fastSmma, title="fastSmma", linewidth=1)
plot(series = midSmma, title="midSmma", linewidth=2)
plot(series = slowSmma, title="slowSmma", linewidth=3)
plotchar(series = isSmmaUpward, title="isSmmaUpward", char='')
plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='')
plotchar(series=sarFlippedUp, title="sarFlippedUp", char='')
plotchar(series=sarFlippedDown, title="sarFlippedDown", char='')
plotchar(series=longEntryCondition, title="longEntryCondition", char='')
plotchar(series=shortEntryCondition, title="shortEntryCondition", char='')
plotchar(series=strategy.position_size > 0, title="inLong", char='')
plotchar(series=strategy.position_size < 0, title="inShort", char='')


//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)



Thêm nữa