
Strategi pelacakan tren moving average ganda adalah strategi perdagangan kuantitatif yang melacak tren harga saham. Strategi ini menggunakan sistem moving average ganda untuk menentukan arah tren harga, dan menggabungkan kekuatan penilaian tren dari indikator ADX untuk menangkap tren harga pada garis tengah dan panjang.
Strategi ini terutama didasarkan pada sistem moving average dua indeks untuk menentukan arah tren harga. Strategi ini menggunakan EMA yang cepat dan lambat dengan dua parameter yang berbeda. EMA1 cepat merespon perubahan harga lebih cepat, EMA2 lambat merespon perubahan harga lebih lambat.
Selain itu, strategi ini juga memperkenalkan indikator ADX untuk menilai kekuatan tren. ADX menilai kekuatan tren dengan menghitung fluktuasi harga. Ketika nilai ADX naik, menunjukkan bahwa tren sedang menguat; Ketika nilai ADX turun, menunjukkan bahwa tren sedang melemah.
Secara khusus, aturan untuk menghasilkan sinyal perdagangan dari strategi ini adalah:
Hal ini akan membantu memfilter sinyal-sinyal yang tidak efektif dari tren yang lebih lemah, dan lebih meningkatkan stabilitas sistem perdagangan.
Strategi ini memiliki beberapa keuntungan utama:
Menangkap Tren Harga Garis Tengah dan PanjangSistem rata-rata EMA ganda dapat secara efektif menilai tren harga dalam jangka panjang, menghindari gangguan dari kebisingan pasar jangka pendek.
Filter palsu retak: Mengukur kekuatan tren dengan indikator ADX, untuk menghindari kerugian yang tidak perlu yang muncul di dekat titik-titik perubahan tren.
Parameter Optimasi Ruang Besar: Kombinasi parameter garis cepat dan lambat, parameter ADX, dan lain-lain memiliki ruang untuk pengoptimalan, yang dapat digunakan untuk mendapatkan efek perdagangan yang lebih baik melalui kombinasi parameter.
Sangat mudah beradaptasiStrategi ini berlaku untuk sebagian besar saham dan periode waktu, dan telah diverifikasi di berbagai pasar.
Mudah diterapkanStrategi ini hanya membutuhkan indikator rata-rata sederhana, tidak memerlukan banyak sumber daya, mudah diprogram, dan biaya operasionalnya rendah.
Strategi ini juga memiliki beberapa risiko, yang terkonsentrasi pada beberapa aspek:
Risiko pembalikan trenTidak ada strategi tren yang dapat memprediksi titik baliknya dengan sempurna, dan tidak dapat dihindari kerugian besar jika terjadi pergeseran tren yang sebenarnya.
Parameter untuk mengoptimalkan risiko berlebihanParameter yang dioptimalkan secara ekstrim juga menyebabkan strategi yang terlalu cocok dengan data historis, yang mengurangi stabilitas strategi dan efektivitasnya di medan perang.
Risiko Kejadian Luar BiasaSkor: Kejadian mendadak yang signifikan akan mematahkan pola tren harga yang sudah ada, di mana indikator rata-rata bergerak akan gagal dan memerlukan intervensi manual atau pengaturan stop loss untuk mengendalikan kerugian.
Ada beberapa cara untuk mengoptimalkan risiko di atas:
Memperkenalkan indikator tambahan untuk menentukan titik pivot harga. Misalnya, dengan memasukkan volume transaksi, volume transaksi akan meningkat saat harga bergeser.
ADX parameter yang diizinkan untuk memastikan peluang di awal tren. Selain itu, MACD dan lain-lain dapat diperkenalkan sebagai indikator penilaian tambahan.
Untuk melakukan tes latihan multi-kelompok pada kombinasi parameter, pilih parameter yang baik untuk stabilitas dan kinerja yang baik. Hindari risiko optimasi berlebihan dari satu set parameter.
Strategi ini juga memiliki beberapa hal yang dapat dioptimalkan:
Memperkenalkan mekanisme stop lossPeraturan: Stop loss bergerak atau stop loss persentase, yang dapat dihentikan secara aktif ketika tren berbalik, untuk menghindari kerugian yang terlalu besar dari memegang posisi.
Tergabung dengan volume transaksiSebagai contoh, volume transaksi dapat menghindari sinyal yang salah pada titik pivot harga yang meningkatkan volume transaksi.
Parameter beradaptasi dan dioptimalkan: memungkinkan parameter indikator untuk menyesuaikan diri dengan perubahan pasar real-time, bukan parameter statis tetap, yang dapat meningkatkan stabilitas strategi secara signifikan.
Memperkenalkan pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk menganalisis sejumlah besar data historis, menentukan parameter moving average dan ADX, dan bahkan dapat memprediksi pergerakan harga di masa depan.
Optimasi lintas siklusPengaturan parameter dapat berbeda untuk setiap periode perdagangan, sehingga dapat menguji konfigurasi optimal parameter untuk setiap periode.
Strategi pelacakan tren rata-rata bergerak ganda secara keseluruhan adalah strategi yang stabil dan matang. Strategi ini menangkap tren harga jangka panjang dengan sistem rata-rata EMA ganda, dan memiliki indikator ADX untuk memfilter sinyal, yang dapat secara efektif menangkap tren harga saham, untuk menghindari gangguan oleh kebisingan pasar jangka pendek.
/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d
ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2
ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")
// ADX
lenadx = 14
lensig = 14
limadx = 18
up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2
minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2
vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2
rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime
rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)
//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if zlrmax[1] < zlema[1]
strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))