Strategi Pengesanan Trend Purata Bergerak Berganda adalah strategi perdagangan kuantitatif yang mengesan trend harga saham. Strategi ini menggunakan sistem purata bergerak eksponensial berganda untuk menentukan arah trend harga dan menggabungkan penunjuk ADX untuk menilai kekuatan trend, menangkap trend harga dalam jangka sederhana hingga panjang.
Strategi ini terutamanya berdasarkan sistem purata bergerak eksponensial berganda untuk menentukan arah trend harga. Strategi ini menggunakan dua EMA yang cepat dan perlahan dengan parameter yang berbeza, EMA1 yang cepat bertindak balas terhadap perubahan harga dengan lebih cepat, dan EMA2 yang perlahan bertindak balas terhadap perubahan harga dengan lebih perlahan. Apabila garis cepat melintasi di atas garis perlahan, ia adalah isyarat beli yang menunjukkan harga telah mula meningkat; apabila garis cepat melintasi di bawah garis perlahan, ia adalah isyarat jual yang menunjukkan harga telah mula jatuh.
Selain itu, strategi ini juga memperkenalkan penunjuk ADX untuk menilai kekuatan trend. ADX mengira turun naik harga untuk menilai kekuatan trend. Apabila ADX naik, ini bermakna trend semakin kuat; apabila ADX jatuh, ini bermakna trend semakin lemah. Strategi ini menetapkan keadaan penapis perdagangan melalui penunjuk ADX, hanya mengeluarkan isyarat perdagangan apabila kekuatan trend agak kuat.
Khususnya, peraturan penjanaan isyarat strategi adalah:
Ini dapat menyaring isyarat yang tidak sah dengan kekuatan trend yang lebih lemah, meningkatkan lagi kestabilan sistem perdagangan.
Strategi ini mempunyai kelebihan utama berikut:
Mencatatkan trend harga jangka sederhana hingga panjang: Sistem EMA berganda dapat menentukan trend harga jangka sederhana hingga jangka panjang dengan berkesan dan mengelakkan gangguan oleh bunyi pasaran jangka pendek.
Menyaring penyebaran palsu: Dengan menilai kekuatan trend melalui penunjuk ADX, ia mengelakkan kerugian yang tidak perlu yang disebabkan oleh pecah palsu di sekitar titik perubahan trend.
Ruang pengoptimuman parameter yang besar: Parameter garis pantas dan perlahan, parameter ADX dan banyak lagi mempunyai ruang untuk pengoptimuman yang boleh menghasilkan hasil perdagangan yang lebih baik melalui kombinasi parameter.
Kemudahan penyesuaian yang tinggi: Strategi ini sesuai untuk kebanyakan stok dan jangka masa, dan telah disahkan di pelbagai pasaran.
Mudah dilaksanakan: Strategi ini hanya memerlukan penunjuk purata bergerak yang mudah, menggunakan sedikit sumber, mudah diprogram, dan mempunyai kos aplikasi praktikal yang rendah.
Strategi ini juga mempunyai beberapa risiko, terutamanya tertumpu pada bidang berikut:
Risiko pembalikan trend: Mana-mana strategi trend tidak dapat menentukan titik pembalikan trend dengan sempurna, dan pasti mengalami kerugian yang lebih besar apabila trend sebenar benar-benar berbalik.
Lebih daripada risiko pengoptimuman: Mengoptimumkan parameter ke tahap yang melampau juga boleh menyebabkan strategi terlalu sesuai dengan data sejarah, yang akan mengurangkan kestabilan dan kesan praktikal strategi.
Risiko peristiwa black swan: Kejadian besar yang tidak dijangka akan memecahkan model trend harga asal, menyebabkan penunjuk purata bergerak gagal, memerlukan campur tangan manual atau tetapan stop loss untuk mengawal kerugian.
Untuk menangani risiko di atas, kita boleh mengoptimumkan dari aspek berikut:
Memperkenalkan penunjuk tambahan untuk menentukan titik perubahan harga. contohnya, memperkenalkan jumlah dagangan, yang akan meningkat apabila titik perubahan harga muncul.
Ringankan parameter ADX dengan betul untuk memastikan peluang dapat ditangkap pada peringkat awal trend. MACD dan penunjuk penilaian tambahan lain juga boleh diperkenalkan.
Melakukan latihan dan ujian gabungan parameter pelbagai kumpulan, dan pilih kombinasi dengan kestabilan dan kesan praktikal yang baik.
Terdapat juga beberapa arah di mana strategi ini boleh dioptimumkan:
Memperkenalkan mekanisme stop loss: Tetapkan stop loss bergerak atau peratusan stop loss, yang boleh secara aktif menghentikan kerugian apabila trend berbalik untuk mengelakkan kerugian yang berlebihan.
Menggabungkan penunjuk jumlah dagangan: Sebagai contoh, jumlah dagangan, yang boleh mengelakkan isyarat yang salah apabila jumlah dagangan berkembang pada titik perubahan harga.
Pengoptimuman penyesuaian diri parameter: Membolehkan parameter penunjuk disesuaikan secara adaptif mengikut perubahan pasaran masa nyata, dan bukannya parameter statik tetap, yang dapat meningkatkan kestabilan strategi.
Memperkenalkan pembelajaran mesin: Gunakan algoritma pembelajaran mesin untuk menganalisis sejumlah besar data sejarah untuk menentukan parameter untuk purata bergerak dan ADX, dan bahkan meramalkan pergerakan harga masa depan.
Pengoptimuman kitaran silang: Parameter kitaran dagangan yang berbeza boleh ditetapkan secara berbeza, dan konfigurasi optimum di bawah setiap kitaran boleh diuji.
Secara umum, strategi Pengesanan Trend Purata Bergerak Berganda adalah idea strategi yang matang dan stabil. Strategi ini menangkap trend harga jangka menengah hingga panjang melalui sistem EMA berganda, dan mempunyai penunjuk ADX untuk menapis isyarat, yang dapat menangkap trend harga saham dengan berkesan dan mengelakkan gangguan dari bunyi bising pasaran jangka pendek. Pada masa yang sama, strategi ini juga mempunyai risiko tertentu, yang memerlukan pengoptimuman kombinasi parameter dan kaedah berhenti kerugian, dan bahkan boleh memperkenalkan lebih banyak penunjuk tambahan dan algoritma pembelajaran mesin untuk meningkatkan kestabilan strategi. Ringkasnya, strategi Pengesanan Trend Purata Bergerak Berganda mempunyai keseimbangan yang baik, dan merupakan idea strategi kuantitatif yang sesuai untuk pelabur jangka menengah hingga panjang.
/*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)))