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.
Strategi ini didasarkan pada poin-poin utama berikut:
Menggunakan indikator SAR parabola untuk menentukan arah tren saat ini. SAR dapat secara dinamis melacak perubahan harga dan mengidentifikasi tren naik dan turun.
Menetapkan tiga garis SMMA dengan periode yang berbeda (garis cepat 21, garis tengah 50, garis lambat 200).
Berjalan panjang saat SAR berbalik ke bawah sementara ketiga garis SMMA naik.
Kehabisan waktu saat SAR berbalik saat ketiga garis SMMA jatuh.
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.
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.
SAR dapat dengan cepat mendeteksi perubahan tren dan menangkap peluang pembalikan.
SMMA triple secara efektif menyaring kebisingan pasar dan menghindari pemutusan palsu.
Menggunakan SMMA menghasilkan kurva yang lebih halus dan kurang gangguan dari MA whipsaws.
Menggabungkan stop loss dan take profit membantu mengendalikan kerugian perdagangan tunggal dan mengunci sebagian keuntungan.
Pengaturan parameter yang fleksibel memungkinkan optimasi untuk pasar yang berbeda.
Ada juga beberapa risiko yang harus dipertimbangkan:
SAR dapat sering berubah selama tren bergolak, meningkatkan biaya dari perdagangan yang berlebihan.
Pengaturan SMMA mungkin tidak sesuai dengan semua instrumen, yang membutuhkan optimasi individu.
SAR stop loss memiliki keterlambatan waktu, berpotensi meningkatkan kerugian.
SAR dapat membalik pemutusan palsu dalam tren yang stabil.
Pengaturan SMMA yang buruk dapat menyebabkan tren yang terlewatkan atau sinyal yang buruk.
Untuk mengatasi risiko, optimasi dapat berfokus pada:
Mengatur parameter SAR berdasarkan volatilitas untuk mengurangi flips.
Penyesuaian periode SMMA agar sesuai dengan karakteristik instrumen.
Meningkatkan stop loss, misalnya dengan trailing atau limit order.
Menggunakan perintah batas untuk stop loss dalam perdagangan aktif.
Pengujian ekstensif dan penyesuaian parameter.
Berdasarkan analisis di atas, optimasi dapat melibatkan:
Mengoptimalkan parameter SAR untuk kurva yang lebih halus dan lebih sedikit flips.
Mengatur panjang SMMA agar sesuai dengan instrumen perdagangan.
Menggunakan stop loss dinamis seperti trailing stop atau limit order.
Menggunakan perintah batas untuk stop loss dalam perdagangan frekuensi tinggi.
Menambahkan filter seperti RSI, KD untuk meningkatkan kualitas sinyal.
Meningkatkan kondisi masuk, misalnya memeriksa pola lilin dengan SAR flip.
Menambahkan kondisi masuk kembali setelah pemicu stop loss.
Meningkatkan mengambil keuntungan dengan tertinggal, parsial dekat, tingkat mengejutkan.
Pengaturan parameter berdasarkan hasil backtest dan analisis sensitivitas.
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)