Strategi Pelacakan Tren Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2024-01-24 11:28:57
Tag:

img

Gambaran umum

Strategi Pelacakan Tren Rata-rata Bergerak Ganda adalah strategi yang menggunakan kombinasi rata-rata bergerak cepat dan lambat untuk menentukan tren pasar, dan menghasilkan sinyal perdagangan ketika arah tren berubah.

Logika Strategi

Strategi Pelacakan Tren Rata-rata Bergerak Ganda menggunakan dua rata-rata bergerak - rata-rata bergerak cepat (5 periode) dan rata-rata bergerak lambat (21 periode). MA cepat digunakan untuk menghasilkan sinyal perdagangan sementara MA lambat digunakan untuk menentukan arah tren pasar. Ketika MA cepat melintasi di atas MA lambat, sinyal beli dihasilkan. Ketika MA cepat melintasi di bawah MA lambat, sinyal jual dihasilkan.

Strategi ini juga menggunakan indikator saluran harga untuk membantu menentukan tren. Saluran harga ditentukan oleh rata-rata bergerak dari harga tertinggi dan terendah. Ketika harga menembus saluran, itu menunjukkan pembalikan tren. Strategi ini menggunakan dua saluran harga dengan periode masing-masing 21 dan 5, yang sesuai dengan periode MA.

Saat menentukan sinyal beli dan jual, strategi ini mengharuskan lilin merah/hijau berturut-turut muncul (bisa disesuaikan pengguna) sebagai kondisi filter tambahan.

Singkatnya, logika untuk menentukan tren dalam strategi ini adalah:

  1. Gunakan saluran harga untuk menentukan arah tren jangka waktu yang lebih tinggi
  2. Menggunakan MA cepat untuk menentukan tren jangka pendek dan menghasilkan sinyal perdagangan
  3. Menggabungkan filter lilin tambahan untuk menghindari sinyal yang salah selama konsolidasi

Dengan menilai tren di seluruh kerangka waktu, kebisingan pasar dapat secara efektif disaring dan arah tren dikonfirmasi.

Analisis Keuntungan

Strategi Pelacakan Tren Rata-rata Bergerak Ganda memiliki keuntungan berikut:

  1. Sistem MA ganda dapat secara efektif mengidentifikasi tren dan menentukan arah tren utama
  2. MA cepat menghasilkan sinyal perdagangan untuk menangkap pembalikan tren tepat waktu
  3. Saluran harga menentukan tren jangka waktu yang lebih tinggi untuk menghindari tertipu oleh kebisingan pasar jangka pendek
  4. Filter lilin merah/hijau menurunkan kemungkinan sinyal yang salah selama konsolidasi
  5. Parameter yang dapat disesuaikan memungkinkan optimasi untuk pasar yang berbeda untuk meningkatkan ketahanan
  6. Strategi stop loss dapat ditambahkan untuk mengontrol risiko secara efektif per perdagangan

Kesimpulannya, strategi ini memiliki stabilitas yang relatif baik secara keseluruhan dan berkinerja baik di pasar dengan tren yang kuat.

Analisis Risiko

Strategi Pelacakan Tren Rata-rata Bergerak Ganda juga memiliki beberapa risiko, terutama:

  1. Selama konsolidasi yang berkepanjangan cenderung menghasilkan sinyal yang salah dan kerugian kecil berturut-turut
  2. Pengaturan parameter yang tidak benar dapat menunda sinyal perdagangan dan kehilangan peluang masuk terbaik
  3. Tanpa stop loss yang efektif, risiko per perdagangan sulit dikendalikan

Langkah-langkah yang sesuai untuk mengurangi risiko meliputi:

  1. Sesuaikan pengaturan filter lilin merah/hijau untuk mengurangi frekuensi perdagangan di pasar konsolidasi
  2. Mengoptimalkan parameter MA cepat untuk memastikan generasi sinyal perdagangan yang tepat waktu
  3. Tambahkan stop loss bergerak atau persentase untuk kontrol ketat per kerugian perdagangan

Arahan Optimasi

Ada ruang untuk optimalisasi strategi lebih lanjut, terutama di arah seperti:

  1. Menggabungkan indikator volatilitas seperti ATR untuk menyesuaikan stop loss secara otomatis
  2. Menggunakan pembelajaran mesin untuk mengoptimalkan parameter secara otomatis
  3. Tambahkan modul jaringan saraf untuk menentukan arah tren
  4. Membangun sistem ensemble yang menggabungkan beberapa indikator dan filter

Arah optimalisasi ini dapat meningkatkan stabilitas, kemampuan beradaptasi dan tingkat kecerdasan strategi.

Kesimpulan

Sebagai kesimpulan, strategi Pelacakan Tren Rata-rata Bergerak Ganda adalah strategi yang relatif kuat mengikuti tren. Ini menggabungkan rata-rata bergerak dan saluran harga untuk menentukan arah dan kekuatan tren, menghasilkan sinyal perdagangan dengan MA cepat. Filter lilin tambahan juga membantu menghindari sinyal yang salah. Parameter yang dapat disesuaikan memungkinkan adaptasi dengan lingkungan pasar yang berbeda. Ada juga ruang yang cukup untuk optimasi lebih lanjut untuk membangun strategi perdagangan otomatis yang dapat diandalkan dan cerdas.


/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
//ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
//trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -1 ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Lebih banyak