
Strategi SMA tiga kali adalah strategi untuk membuat keputusan trend dan entri berdasarkan purata bergerak sederhana dari tiga kitaran yang berbeza. Ia dapat mengikuti trend secara automatik, menggunakan perubahan dalam trend untuk menambah kedudukan.
Strategi ini menggunakan tiga kitaran SMA yang berbeza sebagai penunjuk trend utama, termasuk 200 kitaran, 400 kitaran dan 600 kitaran SMA. Harga di atas tiga kitaran SMA dianggap sebagai trend ke atas, sebaliknya sebagai trend ke atas.
Sebagai penunjuk entries, strategi ini digabungkan dengan penggunaan harga tutup dan pengayun StochClose. Sinyal hanya akan dikeluarkan apabila harga selaras dengan arah tiga SMA. Penunjuk StochClose digunakan untuk menentukan sama ada terlalu banyak atau terlalu banyak dijual, apabila StochClose lebih banyak apabila ia melepasi 95, dan kosong apabila ia melepasi 5.
Stop loss standard ialah apabila harga menyentuh SMA paling lambat.
Strategi ini boleh dilakukan dengan maksimum 10 kali. Ia juga mempunyai tiga peratusan stop yang berbeza, iaitu 1%, 2% dan 6%.
Kelebihan utama strategi triple SMA adalah bahawa ia lebih baik untuk menilai arah dan kekuatan trend dengan menggunakan tiga kitaran SMA yang berbeza dalam kombinasi. Ia mempunyai keupayaan yang lebih kuat untuk menyaring isyarat palsu daripada SMA tunggal.
Di samping itu, dengan menggunakan penunjuk StochClose untuk menentukan sama ada terdapat overbought atau oversold, anda boleh mengelakkan masuk ke dalam pasaran berhampiran titik perubahan trend, dan dengan itu mengurangkan jumlah entri yang salah.
Kriteria penutupan adalah mudah dan langsung, menggunakan SMA yang paling perlahan sebagai garis penutupan, untuk mengelakkan penutupan terlalu awal.
Ini juga membolehkan strategi untuk terus menjejaki trend untuk mendapatkan keuntungan.
Risiko utama strategi ini adalah bahawa tiga SMA mungkin tidak dapat menyaring semua isyarat palsu sepenuhnya, dan mungkin menyebabkan kerugian jika tidak dapat membentuk trend kembali setelah harga pecah. Keadaan ini biasanya berlaku berhampiran dengan rintangan sokongan penting.
Selain itu, indikator StochClose sendiri juga akan menghasilkan isyarat yang salah, yang menyebabkan entri yang tidak sesuai. Keadaan ini biasanya berlaku di antara zon harga yang bergolak.
Untuk mengurangkan risiko ini, anda boleh menyesuaikan kitaran SMA dengan sewajarnya; atau menambah petunjuk lain untuk membuat penilaian gabungan, seperti KDJ, MACD, dan lain-lain, untuk memastikan kualiti isyarat yang masuk.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Menambah atau menyesuaikan bilangan kitaran SMA untuk mencari parameter kitaran yang lebih sesuai untuk jenis tertentu
Menambah petunjuk lain untuk penilaian gabungan, seperti KDJ, MACD dan lain-lain, meningkatkan kualiti entri
Pengoptimuman standard stop loss untuk menjadikannya lebih sesuai dengan pergerakan pasaran
Mengoptimumkan jumlah dan kadar kenaikan saham untuk mencari strategi kenaikan saham yang lebih sesuai
Uji parameter varieti yang berbeza untuk menyesuaikan parameter strategi dengan lebih banyak varieti
Strategi triple SMA secara keseluruhannya adalah strategi pengesanan trend yang sangat praktikal. Ia mencapai kesan penghakiman trend yang lebih baik dengan menggunakan gabungan tiga kitaran SMA yang berbeza dan penunjuk StochClose, yang dapat menghalang isyarat 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)