Strategi Pelacakan Otomatis SMA Ganda

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

img

Gambaran umum

Strategi Triple SMA adalah strategi trend-following yang didasarkan pada tiga moving average (SMA) sederhana dari periode yang berbeda untuk identifikasi tren dan entri.

Logika Strategi

Strategi ini menggunakan tiga SMA dari periode yang berbeda sebagai indikator tren utama, termasuk SMA 200-, 400-, dan 600-periode.

Untuk entri, strategi ini menggabungkan penggunaan harga penutupan dan osilator StochClose. Sinyal dihasilkan hanya ketika harga sejajar dengan arah tiga SMAs. StochClose mengidentifikasi tingkat overbought / oversold dan memberikan sinyal panjang ketika melintasi di atas 95 dan sinyal pendek ketika melintasi di bawah 5.

Stop loss diatur untuk harga melintasi di bawah SMA paling lambat.

Strategi ini memungkinkan piramida hingga 10 kali. Tiga tingkat mengambil keuntungan dibangun di 1%, 2% dan 6% keuntungan.

Analisis Keuntungan

Keuntungan terbesar dari strategi Triple SMA adalah bahwa dengan menggabungkan tiga SMA dari periode yang berbeda, ia dapat lebih baik mengidentifikasi arah tren dan kekuatan.

Selain itu, menggabungkan StochClose untuk analisis overbought/oversold menghindari mengambil sinyal di sekitar titik pembalikan tren potensial.

Stop loss berdasarkan SMA paling lambat juga memaksimalkan kemampuan strategi untuk mengendarai tren sambil meminimalkan stop out prematur.

Mengizinkan piramida memungkinkan strategi untuk terus berpartisipasi dalam tren.

Analisis Risiko

Risiko utama dari strategi ini adalah bahwa triple SMA mungkin tidak sepenuhnya menyaring semua sinyal palsu. Jika harga gagal membentuk tren setelah menembus SMA dan menarik kembali segera, kerugian dapat terjadi. Ini sering terjadi di sekitar level support/resistance utama.

Selain itu, StochClose sendiri dapat menghasilkan sinyal yang salah, yang mengarah pada entri yang tidak tepat, terutama di pasar berkisar.

Untuk mengurangi risiko ini, parameter seperti periode SMA dapat disesuaikan. Lebih banyak indikator dapat ditambahkan, seperti KDJ dan MACD, untuk meningkatkan kualitas sinyal.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan/sunting periode SMA untuk menemukan nilai optimal yang sesuai dengan produk tertentu

  2. Tambahkan indikator tambahan seperti KDJ dan MACD untuk penyaringan kombinasi dan entri yang lebih baik

  3. Mengoptimalkan standar stop loss dan take profit agar lebih sesuai dengan rentang volatilitas pasar

  4. Mengoptimalkan pengaturan piramida untuk menemukan strategi piramida yang ideal

  5. Uji di berbagai produk dan buat parameter adaptif untuk lebih banyak produk

Kesimpulan

Strategi Triple SMA adalah pendekatan yang sangat praktis untuk mengikuti tren. Dengan menggabungkan triple SMA dan StochClose, strategi ini mencapai identifikasi tren yang solid dan menghindari sinyal 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 banyak