Parabolik SAR Dynamic Breakout Triple SMMA Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-08 11:53:09
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan breakout yang menggabungkan indikator SAR parabolik dan garis SMMA tiga kali dengan periode yang berbeda. Ini panjang ketika ketiga garis SMMA naik dan pendek ketika semuanya turun, sambil menggunakan indikator SAR untuk menentukan arah tren dan mengambil entri kontra tren ketika SAR membalik arah. Strategi ini juga menggabungkan stop loss dan take profit.

Logika Strategi

Strategi ini didasarkan pada poin-poin utama berikut:

  1. Menggunakan indikator SAR parabola untuk menentukan arah tren saat ini. SAR dapat secara dinamis melacak perubahan harga dan mengidentifikasi tren naik dan turun.

  2. Menetapkan tiga garis SMMA dengan periode yang berbeda (garis cepat 21, garis tengah 50, garis lambat 200).

  3. Berjalan panjang saat SAR berbalik ke bawah sementara ketiga garis SMMA naik.

  4. Kehabisan waktu saat SAR berbalik saat ketiga garis SMMA jatuh.

  5. Menggabungkan stop loss berdasarkan SAR dan mengambil keuntungan pada persentase tertentu dari harga masuk.

Secara khusus, strategi pertama memeriksa apakah SAR membalik arah pada bar saat ini. Jika SAR membalik dari atas ke bawah saat SMMA naik, itu akan panjang. Jika SAR membalik dari bawah ke atas saat SMMA turun, itu akan pendek.

Setelah masuk, stop loss ditetapkan pada harga SAR pada bar berikutnya, menggunakan SAR sebagai stop loss trailing yang dinamis. Take profit ditetapkan pada 10% dari harga masuk. Ketika harga mencapai tingkat take profit atau stop loss, posisi ditutup.

Analisis Keuntungan

Strategi ini menggabungkan keuntungan dari indikator trend-mengikuti dan beberapa jangka waktu rata-rata bergerak, memungkinkan entri tepat waktu pada pembalikan tren sambil menyaring keluar putus palsu dengan SMMA.

  1. SAR dapat dengan cepat mendeteksi perubahan tren dan menangkap peluang pembalikan.

  2. SMMA triple secara efektif menyaring kebisingan pasar dan menghindari pemutusan palsu.

  3. Menggunakan SMMA menghasilkan kurva yang lebih halus dan kurang gangguan dari MA whipsaws.

  4. Menggabungkan stop loss dan take profit membantu mengendalikan kerugian perdagangan tunggal dan mengunci sebagian keuntungan.

  5. Pengaturan parameter yang fleksibel memungkinkan optimasi untuk pasar yang berbeda.

Analisis Risiko

Ada juga beberapa risiko yang harus dipertimbangkan:

  1. SAR dapat sering berubah selama tren bergolak, meningkatkan biaya dari perdagangan yang berlebihan.

  2. Pengaturan SMMA mungkin tidak sesuai dengan semua instrumen, yang membutuhkan optimasi individu.

  3. SAR stop loss memiliki keterlambatan waktu, berpotensi meningkatkan kerugian.

  4. SAR dapat membalik pemutusan palsu dalam tren yang stabil.

  5. Pengaturan SMMA yang buruk dapat menyebabkan tren yang terlewatkan atau sinyal yang buruk.

Untuk mengatasi risiko, optimasi dapat berfokus pada:

  1. Mengatur parameter SAR berdasarkan volatilitas untuk mengurangi flips.

  2. Penyesuaian periode SMMA agar sesuai dengan karakteristik instrumen.

  3. Meningkatkan stop loss, misalnya dengan trailing atau limit order.

  4. Menggunakan perintah batas untuk stop loss dalam perdagangan aktif.

  5. Pengujian ekstensif dan penyesuaian parameter.

Arahan Optimasi

Berdasarkan analisis di atas, optimasi dapat melibatkan:

  1. Mengoptimalkan parameter SAR untuk kurva yang lebih halus dan lebih sedikit flips.

  2. Mengatur panjang SMMA agar sesuai dengan instrumen perdagangan.

  3. Menggunakan stop loss dinamis seperti trailing stop atau limit order.

  4. Menggunakan perintah batas untuk stop loss dalam perdagangan frekuensi tinggi.

  5. Menambahkan filter seperti RSI, KD untuk meningkatkan kualitas sinyal.

  6. Meningkatkan kondisi masuk, misalnya memeriksa pola lilin dengan SAR flip.

  7. Menambahkan kondisi masuk kembali setelah pemicu stop loss.

  8. Meningkatkan mengambil keuntungan dengan tertinggal, parsial dekat, tingkat mengejutkan.

  9. Pengaturan parameter berdasarkan hasil backtest dan analisis sensitivitas.

Ringkasan

Singkatnya, ini adalah strategi breakout yang sederhana dan praktis yang menggabungkan kepekaan SAR dalam menangkap perubahan tren dan efek penyaringan rata-rata bergerak. Ini dapat mengidentifikasi titik pembalikan tren dengan cepat. Penggunaan stop loss dan take profit membantu mengendalikan risiko dan mengunci keuntungan. Optimasi lebih lanjut pada pengaturan parameter, aturan entri / keluar, dan ketahanan terhadap pemutusan palsu dapat meningkatkan kinerja strategi untuk instrumen perdagangan yang berbeda.


/*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)



Lebih banyak