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.
Strategi ini adalah berdasarkan perkara utama berikut:
Menggunakan penunjuk SAR parabolik untuk menentukan arah trend semasa. SAR boleh menjejaki perubahan harga secara dinamik dan mengenal pasti aliran naik dan turun.
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.
Berjalan panjang apabila SAR berbalik ke bawah sementara ketiga-tiga garis SMMA meningkat.
Kehabisan apabila SAR berbalik ketika ketiga-tiga garis SMMA jatuh.
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.
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.
SAR boleh dengan cepat mengesan perubahan trend dan menangkap peluang pembalikan.
SMMA bertiga berkesan menapis bunyi bising pasaran dan mengelakkan gangguan palsu.
Menggunakan SMMA menghasilkan lengkung yang lebih halus dan kurang gangguan dari MA whipsaws.
Menggabungkan stop loss dan mengambil keuntungan membantu mengawal kerugian perdagangan tunggal dan mengunci keuntungan separa.
Tetapan parameter yang fleksibel membolehkan pengoptimuman untuk pasaran yang berbeza.
Terdapat juga beberapa risiko yang perlu dipertimbangkan:
SAR boleh bertukar-tukar dengan kerap semasa trend yang berbelit-belit, meningkatkan kos daripada perdagangan yang berlebihan.
Tetapan SMMA mungkin tidak sesuai dengan semua instrumen dengan baik, memerlukan pengoptimuman individu.
SAR stop loss mempunyai kelewatan masa, berpotensi meningkatkan kerugian.
SAR boleh membalik pecah palsu dalam trend yang mantap.
Tetapan SMMA yang tidak baik boleh menyebabkan trend yang terlepas atau isyarat yang buruk.
Untuk menangani risiko, pengoptimuman boleh memberi tumpuan kepada:
Mengatur parameter SAR berdasarkan turun naik untuk mengurangkan terbalik.
Penyesuaian tempoh SMMA untuk menyesuaikan ciri instrumen.
Mempertingkatkan stop loss, contohnya dengan trailing atau perintah had.
Menggunakan perintah had untuk stop loss dalam perdagangan aktif.
Ujian yang meluas dan penyesuaian parameter.
Berdasarkan analisis di atas, pengoptimuman mungkin melibatkan:
Mengoptimumkan parameter SAR untuk lengkung yang lebih halus dan lebih sedikit flip.
Penyesuaian panjang SMMA untuk sepadan dengan instrumen dagangan.
Menggunakan stop loss dinamik seperti trailing stop atau perintah had.
Menggunakan perintah had untuk menghentikan kerugian dalam perdagangan frekuensi tinggi.
Menambah penapis seperti RSI, KD untuk meningkatkan kualiti isyarat.
Meningkatkan keadaan kemasukan, contohnya memeriksa corak lilin dengan SAR flip.
Menambah keadaan kemasukan semula selepas pemicu stop loss.
Meningkatkan mengambil keuntungan dengan tertinggal, separa dekat, tahap yang mengejutkan.
Penyesuaian parameter berdasarkan hasil backtest dan analisis kepekaan.
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)