Strategi pelacakan otomatis berdasarkan triple SMA


Tanggal Pembuatan: 2024-01-26 15:05:58 Akhirnya memodifikasi: 2024-01-26 15:05:58
menyalin: 1 Jumlah klik: 640
1
fokus pada
1617
Pengikut

Strategi pelacakan otomatis berdasarkan triple SMA

Ringkasan

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.

Prinsip Strategi

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%.

Analisis Keunggulan

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.

Analisis risiko

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.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Meningkatkan atau menyesuaikan jumlah siklus SMA untuk menemukan parameter siklus yang lebih cocok untuk varietas tertentu

  2. Menambahkan indikator lain untuk penilaian kombinasi, seperti KDJ, MACD, dan lain-lain, untuk meningkatkan kualitas entri

  3. Optimalisasi Standar Stop Loss agar lebih sesuai dengan rentang fluktuasi pasar

  4. Mengoptimalkan jumlah dan proporsi penambahan, menemukan strategi penambahan yang lebih sesuai

  5. Pengujian parameter varietas yang berbeda, sehingga parameter kebijakan dapat sepenuhnya disesuaikan dengan lebih banyak varietas

Meringkaskan

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.

Kode Sumber Strategi
/*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)