
Triple SMA adalah strategi untuk membuat penilaian tren dan entri berdasarkan rata-rata bergerak sederhana dari tiga periode yang berbeda. Ini dapat secara otomatis melacak tren dan menggunakan perubahan dalam tren untuk menambah posisi.
Strategi ini menggunakan tiga periode SMA yang berbeda sebagai indikator utama untuk menentukan tren, termasuk SMA 200 siklus, 400 siklus, dan 600 siklus. Harga dinilai sebagai tren naik ketika berada di atas tiga SMA, dan sebaliknya sebagai tren overhead.
Sebagai indikator entri, strategi ini digabungkan dengan penggunaan harga tutup dan osilator StochClose. Sinyal ini hanya akan muncul jika harga sesuai dengan arah SMA tiga. Indikator StochClose digunakan untuk menilai apakah ada oversold atau oversold, jika StochClose di atas 95 lebih banyak dan di bawah 5 lebih sedikit.
Standar stop loss adalah stop loss ketika harga mencapai SMA terlambat.
Strategi ini memungkinkan penambahan posisi hingga 10 kali. Selain itu, ada tiga stop loss yang berbeda, yaitu 1%, 2% dan 6%.
Keuntungan terbesar dari strategi triple SMA adalah bahwa dengan menggunakan tiga siklus SMA yang berbeda dalam kombinasi, arah dan kekuatan tren dapat diukur dengan lebih baik. Ini memiliki kemampuan yang lebih kuat untuk memfilter sinyal palsu daripada SMA tunggal.
Selain itu, jika digabungkan dengan indikator StochClose untuk menilai apakah ada overbought atau oversold, maka dapat dihindari masuk di dekat titik balik tren, sehingga mengurangi kesalahan entri.
Standar stop loss sederhana dan langsung, dengan SMA dengan siklus terlambat sebagai garis stop loss, dapat meminimalkan stop loss prematur.
Hal ini juga memungkinkan strategi untuk terus melacak tren dan menghasilkan keuntungan.
Risiko utama dari strategi ini adalah bahwa tiga SMA mungkin tidak dapat sepenuhnya menyaring semua sinyal palsu dan dapat menyebabkan kerugian jika tidak dapat membentuk tren lagi setelah harga terobosan. Hal ini biasanya terjadi di dekat resistensi dukungan penting.
Selain itu, indikator StochClose sendiri dapat menghasilkan sinyal yang salah, yang menyebabkan entri yang tidak tepat. Hal ini biasanya terjadi di antara zona harga yang bergejolak.
Untuk mengurangi risiko ini, Anda dapat menyesuaikan siklus SMA sesuai; atau menambahkan indikator lain untuk penilaian kombinasi, seperti KDJ, MACD, dan lain-lain, untuk memastikan kualitas sinyal masuk.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Meningkatkan atau menyesuaikan jumlah siklus SMA untuk menemukan parameter siklus yang lebih cocok untuk varietas tertentu
Menambahkan indikator lain untuk penilaian kombinasi, seperti KDJ, MACD, dan lain-lain, untuk meningkatkan kualitas entri
Optimalisasi Standar Stop Loss agar lebih sesuai dengan rentang fluktuasi pasar
Mengoptimalkan jumlah dan proporsi penambahan, menemukan strategi penambahan yang lebih sesuai
Pengujian parameter varietas yang berbeda, sehingga parameter kebijakan dapat sepenuhnya disesuaikan dengan lebih banyak varietas
Triple SMA secara keseluruhan merupakan strategi pelacakan tren yang sangat praktis. Dengan menggunakan tiga siklus SMA yang berbeda dan indikator StochClose, strategi ini mencapai efek penilaian tren yang lebih baik dan dapat secara efektif menghindari sinyal yang salah.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution=""
len = input(200, minval=1, title="sma 1 length")
len1 = input(400, minval=1, title="sma 2 length")
len2 = input(600, minval=1, title="sma 3 length")
src = input(close, title="Source")
////////////////////////////////////////////
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len
up = smma > smma [1]
down =smma < smma[1]
mycolor = up ? #64b5f6 : down ? #d32f2f : na
fastma = sma(hl2, 1)
fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle')
slowplot = plot(smma, color=mycolor, transp=55, title='sma1')
////////////////////////////////////////////
smma1 = 0.0
smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1
up2 = smma1 > smma1 [1]
down2 =smma1 < smma1[1]
mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na
slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2')
////////////////////////////////////////////
smma2 = 0.0
smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2
up3 = smma2 > smma2 [1]
down3 =smma2 < smma2[1]
mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na
slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3')
////////////////////////////////////////////////////////////////////////////////////////
//Fill gaps
fillData = smma > fastma
fillData2 = smma < fastma
fillDtat = smma1 > smma
fillDtat2 = smma1 < smma
fillDat = smma2 > smma1
fillDat2 = smma2 < smma1
fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na
fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na
fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na
fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill")
fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill")
fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill")
uc = (close > smma) and (close > smma1)
dc = (close < smma) and (close < smma1)
barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be
barcolor(color=barColor)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//StochClose from @trendinvestpro
periods = input(50, minval=1, title="length for the oscillator")
smooth = input(5, minval=1, title="oscillator smoothing")
hhc=highest(close,periods)
llc=lowest(close,periods)
StochClose = sma((close-llc)/(hhc-llc)*100, smooth)
shortline = input(95, minval=0, title="signal when oscillator crosses above")
longline = input(5, minval=0, title="signal when oscillator crosses below")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
longs = close > smma2
shorts = close < smma2
long = longs == true and crossunder(StochClose, longline)
short = shorts == true and crossover(StochClose, shortline)
stoplong = close < smma and close < smma1 and close < smma2
stopshort = close > smma and close > smma1 and close > smma2
p1 = strategy.position_avg_price / 100 / syminfo.mintick
maxx = input(2500, title="max orders filled on a day", minval=0)
takeprofit1 = input(1, title="take profit level 1", minval=0)
takeprofit2 = input(2, title="take profit level 2", minval=0)
takeprofit3 = input(6, title="take profit level 3", minval=0)
takeprofitqt1 = input(30, title="take profit quantity first", minval=0)
takeprofitqt2 = input(30, title="take profit quantity second", minval=0)
takeprofitqt3 = input(30, title="take profit quantity third", minval=0)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////Strategy entries/////////////////////////////////////////////////////////////////////////////////////////
// strategy.risk.max_intraday_filled_orders(maxx)
strategy.entry("long", strategy.long, when=long)
strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("long", when=stoplong == true)
strategy.entry("short", strategy.short, when=short)
strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("short", when=stopshort == true)