
Ini adalah strategi perdagangan terobosan yang menggabungkan SAR parabola dengan rata-rata SMMA dari tiga periode yang berbeda. Ini melakukan lebih banyak ketika tiga rata-rata naik secara keseluruhan, melakukan shorting ketika tiga rata-rata turun secara keseluruhan, dan menggabungkan SAR untuk menentukan arah tren, dan membuka posisi terbalik ketika SAR berbalik.
Strategi ini didasarkan pada:
Menggunakan indikator SAR garis paralon untuk menentukan arah tren saat ini. Indikator SAR dapat secara dinamis melacak perubahan harga, untuk menentukan tren multihead dan tren kosong.
Siapkan tiga garis rata-rata SMMA dengan periode yang berbeda: garis cepat 21 siklus, garis tengah 50 siklus, dan garis lambat 200 siklus. Ketika tiga garis rata-rata semuanya naik, dianggap sebagai pembentukan tren multihead; Ketika tiga garis rata-rata semuanya turun, dianggap sebagai pembentukan tren kosong.
Pada saat indikator SAR bergeser ke bawah, jika tiga garis sejajar secara keseluruhan naik, lakukan tambahan masuk.
Pada saat SAR bergeser ke atas, jika tiga garis rata-rata turun secara keseluruhan, maka melakukan shorting.
Set Stop Loss dan Stop Stop. Stop Loss menggunakan indikator SAR sebagai stop loss dinamis, dan Stop Stop ditetapkan sebagai persentase tertentu dari harga masuk.
Secara khusus, strategi pertama-tama menilai apakah indikator SAR BAR saat ini bergeser. Jika SAR bergeser dari atas ke bawah dan tiga garis rata naik secara keseluruhan, lakukan lebih banyak; Jika SAR bergeser dari bawah ke atas dan tiga garis rata turun secara keseluruhan, lakukan kosong.
Setelah memegang posisi, stop loss line ditetapkan sebagai harga indikator SAR BAR berikutnya, dengan SAR sebagai stop tracking yang dinamis. Stop loss ditetapkan sebagai 10% dari harga masuk.
Strategi ini menggabungkan indikator penilaian tren dan keuntungan dari garis rata-rata multi-periode, yang memungkinkan Anda untuk masuk tepat waktu ketika tren berbalik, sekaligus melakukan terobosan palsu melalui filter rata-rata. Keuntungan utama adalah:
Indikator SAR mampu menilai perubahan tren secara dinamis dan menangkap peluang untuk mengubah tren dengan cepat.
Tiga garis rata dapat secara efektif menyaring kebisingan pasar dan mencegah terobosan palsu.
Dengan menggunakan SMMA rata-rata, kurva lebih halus dan mengurangi gangguan rata-rata pada perdagangan.
Dengan pengaturan Stop Loss Stop, Anda dapat mengontrol kerugian satu kali dan mengunci sebagian keuntungan.
Pengaturan parameter kebijakan fleksibel, dapat menyesuaikan parameter untuk pasar yang berbeda, mengoptimalkan efek strategi.
Strategi ini juga memiliki beberapa risiko, yang meliputi:
Dalam tren getaran, indikator SAR dapat mengalami beberapa kali pergeseran yang sering terjadi, yang menyebabkan biaya transaksi meningkat karena terlalu sering diperdagangkan.
Tiga garis lurus Settings mungkin tidak sepenuhnya cocok untuk semua varietas, perlu disesuaikan dengan situasi varietas tertentu.
Stop loss yang ditetapkan sebagai harga SAR BAR berikutnya memiliki keterlambatan waktu, yang dapat memperluas kerugian.
Masalah yang membuat SAR berbalik karena adanya false breakout dalam tren stabil dapat diatasi dengan menyesuaikan parameter agar kurva SAR lebih halus.
Pengaturan rata-rata yang tidak tepat juga dapat melewatkan tren atau menghasilkan sinyal yang salah, yang perlu diuji dan dioptimalkan dengan hati-hati.
Ada beberapa cara untuk mengoptimalkan risiko, antara lain:
Sesuaikan parameter SAR dengan fluktuasi varietas yang berbeda untuk mengurangi probabilitas sering berbelok.
Menyesuaikan parameter dari tiga garis rata agar lebih dekat dengan karakteristik varietas yang berbeda.
Mengoptimalkan strategi stop loss, misalnya dengan menggunakan stop loss kecil, stop loss bergerak, dan sebagainya.
Stop loss menggunakan harga batas di pasar yang sering diperdagangkan, untuk menghindari slippage yang memperluas kerugian.
Melakukan pengujian optimasi parameter untuk mengevaluasi pengaruh garis rata-rata dan parameter SAR terhadap efektivitas strategi.
Berdasarkan analisis di atas, strategi ini dapat dioptimalkan dalam beberapa hal:
Mengoptimalkan pengaturan parameter SAR, meratakan kurva SAR, mengurangi frekuensi kurva, dan menghindari overtrading.
Menyesuaikan panjang tiga garis rata agar lebih sesuai dengan karakteristik varietas perdagangan tertentu, dan memberikan filter tren yang lebih baik.
Menggunakan strategi stop loss yang dinamis, seperti stop loss bergerak, stop loss kecil, dan lain-lain, untuk mengurangi kerugian akibat stop loss.
Menggunakan Stop Loss Limit pada pasar perdagangan frekuensi tinggi untuk mengurangi kehilangan titik stop loss.
Menambahkan indikator lain untuk memfilter, seperti RSI, KD, dan lain-lain, meningkatkan kualitas sinyal dan mengurangi probabilitas false breakout.
Untuk mengoptimalkan kondisi masuk, pertimbangkan untuk memeriksa bentuk K line pada saat SAR berbelok, untuk menghindari sinyal berkualitas rendah.
Tambahkan kondisi re-entry untuk re-entry jika harga terus berjalan ke arah yang menguntungkan setelah stop loss.
Meningkatkan strategi penutupan, seperti penutupan bergerak, penutupan sebagian, penutupan selisih tingkat, dan lain-lain, untuk meningkatkan profitabilitas.
Mengoptimalkan parameter berdasarkan hasil pengamatan ulang dan mengevaluasi dampak dari parameter tersebut terhadap keseluruhan efektivitas strategi.
Secara keseluruhan, ini adalah strategi breakout yang sederhana dan praktis yang menggabungkan indikator pelacakan tren SAR dan garis rata. Ini menggunakan SAR untuk menilai sensitivitas perubahan tren, dan efek gelombang garis rata, untuk masuk dengan cepat di titik-titik perubahan tren.
/*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)