Strategi trend pengesanan purata bergerak ganda adalah strategi perdagangan kuantitatif yang mengesan trend harga saham. Strategi ini menggunakan sistem purata bergerak indeks ganda untuk menentukan arah trend harga, dan menggabungkan kekuatan trend pengesanan indikator ADX untuk menangkap trend harga pada garis tengah dan panjang.
Strategi ini digunakan untuk menentukan arah trend harga berdasarkan sistem purata bergerak dua indeks. Strategi ini menggunakan EMA dua parameter yang berbeza, EMA1 bertindak balas dengan lebih cepat dan EMA2 bertindak balas dengan lebih lambat. Apabila anda melewati garis perlahan pada garis cepat, anda akan menerima isyarat beli yang menunjukkan harga mula naik. Apabila anda melewati garis perlahan di bawah garis cepat, anda akan menerima isyarat jual yang menunjukkan harga mula turun.
Selain itu, strategi ini juga memperkenalkan indikator ADX untuk menilai kekuatan trend. ADX menilai kekuatan trend dengan mengira turun naik harga. Apabila nilai ADX meningkat, menunjukkan trend sedang menguat; apabila nilai ADX menurun, menunjukkan trend sedang melemah.
Secara khusus, strategi menghasilkan isyarat perdagangan dengan peraturan berikut:
Dengan cara ini, ia boleh menyaring isyarat tidak sah yang kurang kuat dan meningkatkan kestabilan sistem perdagangan.
Strategi ini mempunyai beberapa kelebihan utama:
Menangkap Trend Harga Talian Panjang dan MenengahSistem purata EMA dua kali dapat menentukan trend harga dalam jangka panjang dengan berkesan dan mengelakkan gangguan oleh bunyi pasaran jangka pendek.
Filter palsu pecahMengambil keputusan mengenai kekuatan trend dengan menggunakan ADX untuk mengelakkan kerugian yang tidak perlu yang disebabkan oleh pemisahan palsu yang berlaku berhampiran titik perubahan trend.
Optimasi parameter ruang yang besar: Kombinasi parameter garis laju, parameter ADX dan lain-lain mempunyai ruang untuk pengoptimuman, yang dapat memperoleh kesan perdagangan yang lebih baik melalui kombinasi parameter.
Sangat boleh menyesuaikan diriStrategi ini berlaku untuk kebanyakan saham dan tempoh masa, dan telah disahkan oleh pelbagai pasaran.
Mudah dilaksanakanStrategi ini hanya memerlukan purata sederhana, kurang sumber, mudah untuk diprogram, dan kos yang rendah untuk digunakan.
Strategi ini juga mempunyai beberapa risiko, yang tertumpu kepada beberapa aspek berikut:
Risiko pembalikan arah aliranTidak ada strategi trend yang dapat membezakan dengan sempurna titik-titik perubahan trend, dan ia pasti akan menanggung kerugian yang besar apabila perubahan trend benar-benar berlaku.
Parameter pengoptimuman risiko berlebihanOptimasi parameter yang melampau juga boleh menyebabkan strategi terlalu sesuai dengan data sejarah, yang akan mengurangkan kestabilan strategi dan keberkesanan dalam pertempuran.
Risiko Kejadian Tiba-tibaKejadian mendadak yang besar akan mematahkan corak trend harga yang sedia ada, di mana penunjuk purata bergerak tidak akan berfungsi dan memerlukan campur tangan manusia atau menetapkan hentian untuk mengawal kerugian.
Untuk mengatasi risiko ini, kita boleh mengoptimumkan beberapa aspek:
Pengenalan penunjuk tambahan untuk menentukan titik peralihan harga. Sebagai contoh, pengenalan jumlah transaksi, jumlah transaksi akan meningkat semasa peralihan harga.
Percuma parameter ADX dengan betul, memastikan peluang juga dapat diambil pada awal trend. Selain itu, indikator penilaian tambahan seperti MACD juga boleh diperkenalkan.
Uji latihan berbilang kumpulan untuk kombinasi parameter, pilih parameter yang baik untuk kestabilan dan keberkesanan dalam pertempuran. Elakkan risiko pengoptimuman berlebihan untuk satu set parameter.
Strategi ini juga boleh dioptimumkan:
Memperkenalkan mekanisme stop loss: Setting mobile stop loss or percentage stop loss, boleh aktif stop loss apabila trend berbalik, untuk mengelakkan kerugian memegang kedudukan yang terlalu besar.
Gabungan dengan Indeks Jumlah PerdaganganSebagai contoh, jumlah transaksi dapat mengelakkan isyarat salah pada titik perubahan harga apabila jumlah transaksi meningkat.
Parameter untuk menyesuaikan diri: membolehkan parameter penunjuk untuk menyesuaikan diri dengan perubahan pasaran dalam masa nyata, dan bukannya parameter statik tetap, yang dapat meningkatkan kestabilan strategi.
Memperkenalkan pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk menganalisis banyak data sejarah, menentukan parameter purata bergerak dan ADX, dan bahkan dapat meramalkan pergerakan harga di masa depan.
Pengoptimuman rentas kitaranPengaturan parameter boleh berbeza untuk setiap kitaran dagangan, dan anda boleh menguji konfigurasi optimum parameter untuk setiap kitaran.
Strategi pengesanan trend dua rata-rata bergerak secara keseluruhan adalah strategi yang mantap dan stabil. Strategi ini menangkap trend harga jangka panjang dengan sistem purata EMA dua kali, dan mempunyai penunjuk ADX untuk menapis isyarat, yang dapat menangkap trend harga saham dengan berkesan, dan mengelakkan gangguan oleh bunyi pasaran jangka pendek. Pada masa yang sama, strategi ini juga mempunyai risiko tertentu, yang memerlukan pengoptimuman terhadap kombinasi parameter dan kaedah hentikan kerugian, dan bahkan dapat memperkenalkan lebih banyak petunjuk tambahan dan algoritma pembelajaran mesin untuk meningkatkan kestabilan strategi.
/*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)))