Chiến lược đột phá theo dõi động lực SAR ba đường trung bình động


Ngày tạo: 2023-11-08 11:53:09 sửa đổi lần cuối: 2023-11-08 11:53:09
sao chép: 0 Số nhấp chuột: 778
1
tập trung vào
1621
Người theo dõi

Chiến lược đột phá theo dõi động lực SAR ba đường trung bình động

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 parallax với các đường trung bình SMMA trong ba chu kỳ khác nhau. Nó làm nhiều khi ba đường trung bình tăng toàn bộ, tháo lỗ khi ba đường trung bình giảm toàn bộ, đồng thời kết hợp các chỉ số SAR để xác định xu hướng, mở vị trí ngược khi chỉ số SAR chuyển hướng. Chiến lược này hỗ trợ cả dừng lỗ và dừng lại.

Nguyên tắc chiến lược

Chiến lược này được xây dựng dựa trên các điểm sau:

  1. Sử dụng chỉ số SAR parallax để xác định hướng xu hướng hiện tại. Chỉ số SAR có thể theo dõi động sự thay đổi giá, xác định xu hướng đa đầu và xu hướng trống.

  2. Thiết lập một đường trung bình SMMA với ba chu kỳ khác nhau: đường trung bình 21 chu kỳ, đường trung bình 50 chu kỳ, đường trung bình 200 chu kỳ. Khi ba đường trung bình tăng lên, nó được coi là một xu hướng đa đầu; khi ba đường trung bình giảm xuống, nó được coi là một xu hướng không đầu.

  3. Khi chỉ số SAR chuyển hướng xuống, nếu ba đường thẳng toàn cầu tăng, hãy tham gia thêm.

  4. Khi chỉ số SAR chuyển hướng lên, nếu ba đường trung bình giảm hoàn toàn, hãy tham gia vào.

  5. Cài đặt dừng và dừng. Đặt dừng với chỉ số SAR làm điểm dừng động và dừng là một tỷ lệ nhất định của giá vào.

Cụ thể, chiến lược sẽ đánh giá trước tiên liệu chỉ số SAR của BAR hiện tại có chuyển hướng hay không. Nếu SAR chuyển hướng từ trên xuống và ba đường cong tăng toàn bộ, hãy làm nhiều hơn; Nếu SAR chuyển hướng từ dưới lên và ba đường cong giảm toàn bộ, hãy làm trống.

Sau khi nắm giữ vị trí, đường dừng là giá chỉ số SAR của BAR tiếp theo, sử dụng SAR để theo dõi động lực dừng. Đặt điểm dừng là 10% giá nhập. Khi giá đạt đến mức dừng hoặc dừng, hãy thoát khỏi vị trí bằng phẳng.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của chỉ số định xu hướng và đường trung bình nhiều chu kỳ, có thể tham gia vào thời gian khi xu hướng biến đổi, đồng thời phá vỡ giả mạo thông qua lọc đường trung bình. Những lợi thế chính là:

  1. Chỉ số SAR có khả năng phân tích xu hướng và nắm bắt cơ hội chuyển hướng nhanh chóng.

  2. Ba đường thẳng có thể lọc hiệu quả tiếng ồn thị trường, tránh phá vỡ giả.

  3. Sử dụng đường trung bình SMMA, đường cong mịn hơn, giảm nhiễu của đường trung bình.

  4. Kết hợp với thiết lập dừng lỗ, bạn có thể kiểm soát tổn thất đơn lẻ và khóa một phần lợi nhuận.

  5. Thiết lập tham số chiến lược linh hoạt, có thể điều chỉnh tham số cho các thị trường khác nhau, tối ưu hóa hiệu quả chiến lược.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro, bao gồm:

  1. Trong xu hướng dao động, chỉ số SAR có thể chuyển động nhiều lần, dẫn đến việc giao dịch quá thường xuyên và tăng phí giao dịch.

  2. Settings có thể không hoàn toàn phù hợp với tất cả các giống và cần được điều chỉnh theo từng giống.

  3. Cứ dừng lỗ là giá SAR của BAR tiếp theo bị chậm trễ, có thể mở rộng tổn thất.

  4. Vấn đề về sự phá vỡ giả trong xu hướng ổn định khiến SAR chuyển hướng có thể được giảm bớt bằng cách điều chỉnh tham số để làm mịn đường SAR.

  5. Cài đặt đường trung bình không đúng cũng có thể bỏ lỡ xu hướng hoặc tạo ra tín hiệu sai, cần được kiểm tra cẩn thận và tối ưu hóa.

Đối với các rủi ro, chúng ta có thể tối ưu hóa từ:

  1. Điều chỉnh các tham số SAR theo biến động của các giống khác nhau để giảm khả năng chuyển đổi thường xuyên.

  2. Điều chỉnh các tham số của ba đường trung bình để nó gần gũi hơn với các đặc điểm của các giống khác nhau.

  3. Tối ưu hóa các chiến lược dừng lỗ, chẳng hạn như sử dụng dừng lỗ nhỏ, dừng lỗ di chuyển.

  4. Trong thị trường giao dịch thường xuyên sử dụng giá giới hạn để dừng lỗ, tránh điểm trượt mở rộng tổn thất.

  5. Thực hiện thử nghiệm điều chỉnh tham số để đánh giá ảnh hưởng của đường trung bình và tham số SAR đến hiệu quả của chiến lược.

Hướng tối ưu hóa

Dựa trên những phân tích trên, chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa cài đặt tham số SAR, làm mịn đường cong SAR, giảm tần số chuyển hướng đường cong, tránh giao dịch quá mức.

  2. Điều chỉnh chiều dài của ba đường thẳng để phù hợp hơn với đặc điểm của các loại giao dịch cụ thể, có tác dụng lọc xu hướng tốt hơn.

  3. Sử dụng các chiến lược dừng lỗ động, chẳng hạn như dừng di chuyển, dừng nhỏ để giảm tổn thất do dừng lỗ.

  4. Trong thị trường giao dịch tần số cao sử dụng giá giới hạn đơn dừng lỗ, giảm lỗ điểm dừng lỗ.

  5. Thêm các chỉ số khác để lọc, chẳng hạn như RSI, KD, v.v., để cải thiện chất lượng tín hiệu và giảm khả năng phá vỡ giả.

  6. Tối ưu hóa điều kiện nhập cảnh, có thể xem xét kiểm tra hình dạng đường K đồng thời khi chuyển SAR, tránh tín hiệu chất lượng thấp.

  7. Thêm điều kiện nhập lại, nhập lại khi giá tiếp tục chạy theo hướng thuận lợi sau khi dừng.

  8. Cải thiện các chiến lược ngăn chặn, chẳng hạn như ngăn chặn di chuyển, ngăn chặn một phần, ngăn chặn chênh lệch cấp, để tăng lợi nhuận.

  9. Tối ưu hóa các tham số dựa trên kết quả phản hồi, đánh giá ảnh hưởng của các tham số đến hiệu quả chiến lược tổng thể.

Tóm tắt

Nhìn chung, đây là một chiến lược đột phá đơn giản và thực tế kết hợp các chỉ số theo dõi xu hướng SAR và đường trung bình. Nó sử dụng SAR để đánh giá độ nhạy của xu hướng chuyển hướng, và tác dụng của đường trung bình, để nhanh chóng tham gia vào các điểm biến xu hướng. Đồng thời thiết lập một lỗ hổng dừng để kiểm soát rủi ro và khóa lợi nhuận.

Mã nguồn chiến lược
/*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)