Triple SMA Strategi Pengesanan Otomatik

Penulis:ChaoZhang, Tarikh: 2024-01-26 15:05:58
Tag:

img

Ringkasan

Strategi Triple SMA adalah strategi trend-mengikuti berdasarkan tiga purata bergerak mudah (SMA) dari tempoh yang berbeza untuk pengenalan trend dan entri. Ia boleh menjejaki trend secara automatik dan menambah kedudukan semasa penurunan trend.

Logika Strategi

Strategi ini menggunakan tiga SMA dari tempoh yang berbeza sebagai penunjuk trend utama, termasuk SMA 200-, 400-, dan 600-periode. Apabila harga di atas ketiga-tiga SMA, ia menunjukkan trend menaik, dan sebaliknya untuk trend menurun.

Untuk entri, strategi ini menggabungkan penggunaan harga penutupan dan osilator StochClose. Isyarat dihasilkan hanya apabila harga sejajar dengan arah tiga SMAs. StochClose mengenal pasti tahap overbought / oversold dan memberikan isyarat panjang apabila melintasi di atas 95 dan isyarat pendek apabila melintasi di bawah 5.

Stop loss ditetapkan untuk harga melintasi di bawah SMA paling perlahan.

Strategi ini membolehkan piramida sehingga 10 kali. Tiga mengambil tahap keuntungan dibina di 1%, 2% dan 6% keuntungan.

Analisis Kelebihan

Kelebihan terbesar strategi Triple SMA ialah dengan menggabungkan tiga SMA dari tempoh yang berbeza, ia dapat mengenal pasti arah trend dan kekuatan dengan lebih baik.

Di samping itu, menggabungkan StochClose untuk analisis overbought / oversold mengelakkan mengambil isyarat di sekitar titik pembalikan trend yang berpotensi.

Stop loss berdasarkan SMA paling perlahan juga memaksimumkan keupayaan strategi untuk menunggang trend sambil meminimumkan berhenti awal.

Membolehkan piramida membolehkan strategi untuk terus mengambil bahagian dalam trend.

Analisis Risiko

Risiko utama strategi ini adalah bahawa tiga SMA mungkin tidak sepenuhnya menyaring semua isyarat palsu. Jika harga gagal membentuk trend selepas menembusi SMA dan menarik balik tidak lama lagi, kerugian boleh berlaku. Ini sering berlaku di sekitar tahap sokongan / rintangan utama.

Juga, StochClose itu sendiri boleh menghasilkan isyarat yang salah, yang membawa kepada kemasukan yang tidak sesuai, terutamanya di pasaran yang berbeza.

Untuk mengurangkan risiko ini, parameter seperti tempoh SMA boleh diselaraskan. Lebih banyak penunjuk boleh ditambah, seperti KDJ dan MACD, untuk meningkatkan kualiti isyarat.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Tambah/penyesuaian tempoh SMA untuk mencari nilai optimum yang sesuai dengan produk tertentu

  2. Tambah penunjuk tambahan seperti KDJ dan MACD untuk penapisan gabungan dan entri yang lebih baik

  3. Mengoptimumkan standard stop loss dan mengambil keuntungan untuk lebih sesuai dengan julat turun naik pasaran

  4. Mengoptimumkan tetapan piramida untuk mencari strategi piramida yang ideal

  5. Uji di seluruh produk yang berbeza dan buat parameter menyesuaikan diri dengan lebih banyak produk

Kesimpulan

Kesimpulannya, strategi Triple SMA adalah pendekatan trend yang sangat praktikal. Dengan menggabungkan tiga kali SMA dan StochClose, ia mencapai pengenalan trend yang kukuh dan mengelakkan isyarat palsu.


/*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)




Lebih lanjut