Strategi Pelacakan Tren Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-12-21 11:45:35
Tag:

img

Gambaran umum

Strategi Pelacakan Tren Rata-rata Bergerak Ganda adalah strategi perdagangan kuantitatif yang melacak tren harga saham. Strategi ini menggunakan sistem rata-rata bergerak eksponensial ganda untuk menentukan arah tren harga dan menggabungkan indikator ADX untuk menilai kekuatan tren, menangkap tren harga dalam jangka menengah hingga panjang.

Prinsip Strategi

Strategi ini terutama didasarkan pada sistem rata-rata bergerak eksponensial ganda untuk menentukan arah tren harga. Strategi ini menggunakan dua EMA cepat dan lambat dengan parameter yang berbeda, EMA cepat 1 bereaksi terhadap perubahan harga lebih cepat, dan EMA lambat 2 merespons perubahan harga lebih lambat. Ketika garis cepat melintasi di atas garis lambat, itu adalah sinyal beli yang menunjukkan harga telah mulai naik; ketika garis cepat melintasi di bawah garis lambat, itu adalah sinyal jual yang menunjukkan harga telah mulai turun.

Selain itu, strategi juga memperkenalkan indikator ADX untuk menilai kekuatan tren. ADX menghitung fluktuasi harga untuk menilai kekuatan tren. Ketika ADX naik, itu berarti tren semakin kuat; ketika ADX turun, itu berarti tren melemah. Strategi menetapkan kondisi filter perdagangan melalui indikator ADX, hanya mengeluarkan sinyal perdagangan ketika kekuatan tren relatif kuat.

Secara khusus, aturan pembuatan sinyal strategi adalah:

  1. Pergi panjang ketika garis cepat melintasi di atas garis lambat, dan pergi pendek ketika garis cepat melintasi di bawah garis lambat
  2. Hanya mengizinkan panjang dan pendek ketika ADX>25

Hal ini dapat secara efektif menyaring sinyal yang tidak valid dengan kekuatan tren yang lebih lemah, meningkatkan stabilitas sistem perdagangan.

Keuntungan dari Strategi

Strategi ini memiliki keuntungan utama sebagai berikut:

  1. Mencatatkan tren harga jangka menengah hingga panjang: Sistem EMA ganda dapat secara efektif menentukan tren harga jangka menengah hingga panjang dan menghindari gangguan dari kebisingan pasar jangka pendek.

  2. Menyaring kebocoran palsu: Dengan menilai kekuatan tren melalui indikator ADX, ia menghindari kerugian yang tidak perlu yang disebabkan oleh pecah palsu di sekitar titik perubahan tren.

  3. Ruang pengoptimalan parameter besar: Parameter garis cepat dan lambat, parameter ADX dan banyak lagi memiliki ruang untuk optimasi yang dapat menghasilkan hasil perdagangan yang lebih baik melalui kombinasi parameter.

  4. Kemampuan beradaptasi yang tinggi: Strategi ini cocok untuk sebagian besar saham dan kerangka waktu, dan telah diverifikasi di berbagai pasar.

  5. Mudah diterapkan: Strategi ini hanya membutuhkan indikator rata-rata bergerak yang sederhana, mengkonsumsi sedikit sumber daya, mudah diprogram, dan memiliki biaya aplikasi praktis yang rendah.

Risiko dari Strategi

Strategi ini juga memiliki beberapa risiko, terutama terkonsentrasi di bidang berikut:

  1. Risiko pembalikan tren: Tidak ada strategi tren yang dapat menentukan titik pembalikan tren dengan sempurna, dan pasti akan mengalami kerugian yang lebih besar ketika tren nyata benar-benar berbalik.

  2. Lebih dari risiko optimasi: Mengoptimalkan parameter ke ekstrim juga dapat menyebabkan keterpaduan strategi dengan data historis, yang akan mengurangi stabilitas dan efek praktis dari strategi.

  3. Risiko peristiwa angsa hitam: Kejadian besar yang tidak terduga akan merusak model tren harga asli, menyebabkan indikator rata-rata bergerak gagal, membutuhkan intervensi manual atau pengaturan stop loss untuk mengendalikan kerugian.

Untuk mengatasi risiko di atas, kita dapat mengoptimalkan dari aspek berikut:

  1. Memperkenalkan indikator tambahan untuk menentukan titik balik harga. misalnya, memperkenalkan volume perdagangan, yang akan diperkuat ketika titik balik harga muncul.

  2. Menyenangkan parameter ADX dengan benar untuk memastikan peluang dapat ditangkap pada tahap awal tren.

  3. Melakukan pelatihan multi-kelompok dan pengujian kombinasi parameter, dan memilih kombinasi dengan stabilitas yang baik dan efek praktis.

Arahan untuk Optimasi Strategi

Ada juga beberapa arah di mana strategi ini dapat dioptimalkan:

  1. Memperkenalkan mekanisme stop loss: Tetapkan stop loss bergerak atau stop loss persentase, yang dapat secara aktif menghentikan kerugian ketika tren berbalik untuk menghindari kerugian yang berlebihan.

  2. Menggabungkan indikator volume perdagangan: Misalnya volume perdagangan, yang dapat menghindari sinyal yang salah ketika volume perdagangan berkembang pada titik balik harga.

  3. Optimasi parameter yang dapat beradaptasi sendiri: Memungkinkan parameter indikator untuk menyesuaikan secara adaptif sesuai dengan perubahan pasar real-time, daripada parameter statis tetap, yang dapat sangat meningkatkan stabilitas strategi.

  4. Memperkenalkan pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk menganalisis sejumlah besar data historis untuk menentukan parameter untuk moving average dan ADX, dan bahkan memprediksi pergerakan harga di masa depan.

  5. Optimasi siklus silang: Parameter siklus perdagangan yang berbeda dapat ditetapkan secara berbeda, dan konfigurasi optimal di bawah setiap siklus dapat diuji.

Ringkasan

Secara umum, strategi Pelacakan Tren Rata-rata Bergerak Ganda adalah ide strategi yang matang dan stabil. Strategi ini menangkap tren harga jangka menengah hingga panjang melalui sistem EMA ganda, dan memiliki indikator ADX untuk menyaring sinyal, yang dapat secara efektif menangkap tren harga saham dan menghindari gangguan dari kebisingan pasar jangka pendek. Pada saat yang sama, strategi ini juga memiliki risiko tertentu, yang membutuhkan optimalisasi kombinasi parameter dan metode stop loss, dan bahkan dapat memperkenalkan lebih banyak indikator bantu dan algoritma pembelajaran mesin untuk meningkatkan stabilitas strategi. Singkatnya, strategi Pelacakan Tren Rata-rata Bergerak Ganda memiliki keseimbangan yang baik, dan merupakan ide strategi kuantitatif yang cocok untuk investor 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)))


Lebih banyak