Parabolik SAR Dinamis Breakout Triple SMMA Strategi

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

img

Ringkasan

Ini adalah strategi perdagangan pecah yang menggabungkan penunjuk SAR parabolik dan baris SMMA bertiga dengan tempoh yang berbeza. Ia pergi lama apabila ketiga-tiga garis SMMA meningkat dan pergi pendek apabila semua jatuh, sambil menggunakan penunjuk SAR untuk menentukan arah trend dan mengambil entri kontra trend apabila SAR membalik arah. Strategi ini juga menggabungkan stop loss dan mengambil keuntungan.

Logika Strategi

Strategi ini adalah berdasarkan perkara utama berikut:

  1. Menggunakan penunjuk SAR parabolik untuk menentukan arah trend semasa. SAR boleh menjejaki perubahan harga secara dinamik dan mengenal pasti aliran naik dan turun.

  2. Menetapkan tiga garis SMMA dengan tempoh yang berbeza (garis cepat 21, garis tengah 50, garis perlahan 200). Apabila ketiga-tiga garis meningkat, ia menandakan aliran menaik. Apabila semua jatuh, ia menandakan aliran menurun.

  3. Berjalan panjang apabila SAR berbalik ke bawah sementara ketiga-tiga garis SMMA meningkat.

  4. Kehabisan apabila SAR berbalik ketika ketiga-tiga garis SMMA jatuh.

  5. Menggabungkan stop loss berdasarkan SAR dan mengambil keuntungan pada peratusan tertentu daripada harga kemasukan.

Secara khusus, strategi pertama memeriksa sama ada SAR membalik arah pada bar semasa. Jika SAR membalik dari atas ke bawah semasa SMMA meningkat, ia akan panjang. Jika SAR membalik dari bawah ke atas semasa SMMA jatuh, ia akan pendek.

Selepas masuk, stop loss ditetapkan pada harga SAR pada bar seterusnya, menggunakan SAR sebagai stop loss yang dinamik. mengambil keuntungan ditetapkan pada 10% daripada harga masuk. apabila harga mencapai tahap mengambil keuntungan atau stop loss, kedudukan ditutup.

Analisis Kelebihan

Strategi ini menggabungkan kelebihan penunjuk trend yang mengikuti dan purata bergerak pelbagai jangka masa, yang membolehkan entri tepat pada masa pembalikan trend sambil menapis pecah palsu dengan SMMA.

  1. SAR boleh dengan cepat mengesan perubahan trend dan menangkap peluang pembalikan.

  2. SMMA bertiga berkesan menapis bunyi bising pasaran dan mengelakkan gangguan palsu.

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

  4. Menggabungkan stop loss dan mengambil keuntungan membantu mengawal kerugian perdagangan tunggal dan mengunci keuntungan separa.

  5. Tetapan parameter yang fleksibel membolehkan pengoptimuman untuk pasaran yang berbeza.

Analisis Risiko

Terdapat juga beberapa risiko yang perlu dipertimbangkan:

  1. SAR boleh bertukar-tukar dengan kerap semasa trend yang berbelit-belit, meningkatkan kos daripada perdagangan yang berlebihan.

  2. Tetapan SMMA mungkin tidak sesuai dengan semua instrumen dengan baik, memerlukan pengoptimuman individu.

  3. SAR stop loss mempunyai kelewatan masa, berpotensi meningkatkan kerugian.

  4. SAR boleh membalik pecah palsu dalam trend yang mantap.

  5. Tetapan SMMA yang tidak baik boleh menyebabkan trend yang terlepas atau isyarat yang buruk.

Untuk menangani risiko, pengoptimuman boleh memberi tumpuan kepada:

  1. Mengatur parameter SAR berdasarkan turun naik untuk mengurangkan terbalik.

  2. Penyesuaian tempoh SMMA untuk menyesuaikan ciri instrumen.

  3. Mempertingkatkan stop loss, contohnya dengan trailing atau perintah had.

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

  5. Ujian yang meluas dan penyesuaian parameter.

Arahan pengoptimuman

Berdasarkan analisis di atas, pengoptimuman mungkin melibatkan:

  1. Mengoptimumkan parameter SAR untuk lengkung yang lebih halus dan lebih sedikit flip.

  2. Penyesuaian panjang SMMA untuk sepadan dengan instrumen dagangan.

  3. Menggunakan stop loss dinamik seperti trailing stop atau perintah had.

  4. Menggunakan perintah had untuk menghentikan kerugian dalam perdagangan frekuensi tinggi.

  5. Menambah penapis seperti RSI, KD untuk meningkatkan kualiti isyarat.

  6. Meningkatkan keadaan kemasukan, contohnya memeriksa corak lilin dengan SAR flip.

  7. Menambah keadaan kemasukan semula selepas pemicu stop loss.

  8. Meningkatkan mengambil keuntungan dengan tertinggal, separa dekat, tahap yang mengejutkan.

  9. Penyesuaian parameter berdasarkan hasil backtest dan analisis kepekaan.

Ringkasan

Ringkasnya, ini adalah strategi breakout yang mudah dan praktikal yang menggabungkan kepekaan SAR dalam menangkap perubahan trend dan kesan penapisan purata bergerak. Ia dapat mengenal pasti titik pembalikan trend dengan cepat. Penggunaan stop loss dan mengambil keuntungan membantu mengawal risiko dan mengunci keuntungan. Pengoptimuman lanjut pada tetapan parameter, peraturan kemasukan / keluar, dan ketahanan terhadap pemutusan palsu dapat meningkatkan prestasi strategi untuk instrumen perdagangan yang berbeza.


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