Strategi Crossover Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-11-13 10:55:09
Tag:

img

Gambaran umum

Dual Moving Average Crossover Strategy adalah strategi trend following yang umum. Strategi ini menggunakan dua moving average dari periode yang berbeda untuk mengidentifikasi arah tren dan menghasilkan sinyal perdagangan berdasarkan crossover mereka. Secara khusus, ketika moving average periode yang lebih pendek melintasi di atas periode yang lebih lama, sebuah salib emas terbentuk, yang menunjukkan tren naik. Sebaliknya, ketika MA yang lebih pendek melintasi di bawah MA yang lebih lama, sebuah salib kematian terbentuk, yang menunjukkan tren menurun.

Logika Strategi

Strategi ini terutama menggunakan garis EMA 6 periode, 14 periode, 25 periode dan 80 periode. Pertama menghitung nilai-nilai MA ini, kemudian mengidentifikasi arah tren berdasarkan persilangan antara EMA 6 periode dan tiga MA lainnya.

Ketika EMA 6 periode melintasi di atas EMA 14 periode atau 25 periode, dan di atas EMA 80 periode, sinyal beli dihasilkan. Ini menunjukkan bahwa MA jangka pendek sedang memecahkan MA jangka menengah hingga panjang, dan tren kenaikan dapat dimulai, sehingga kita dapat mempertimbangkan pembelian.

Sebaliknya, ketika EMA 6 periode melintasi di bawah EMA 14 periode atau 25 periode, dan di bawah EMA 80 periode, sinyal jual dihasilkan. Ini menunjukkan bahwa EMA jangka pendek dipecah oleh EMA jangka menengah hingga panjang, dan tren menurun dapat dimulai, sehingga kita dapat mempertimbangkan penjualan.

Strategi ini juga memiliki logika stop loss untuk keluar dari posisi ketika kerugian melebihi ambang untuk mengendalikan risiko.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Menggunakan crossover MA untuk menentukan tren adalah indikator teknis yang matang dan dapat diandalkan.

  2. Menggabungkan beberapa kerangka waktu mengurangi sinyal palsu. MA 6 periode menghasilkan sinyal, sementara MA 14 periode, 25 periode mengkonfirmasi, dan MA 80 periode mendefinisikan tren keseluruhan.

  3. Stop loss mengendalikan risiko dan melindungi modal secara efektif.

  4. Logikanya sederhana dan jelas, mudah dimengerti dan divalidasi.

  5. Periode MA dapat disesuaikan untuk mengoptimalkan perubahan kondisi pasar.

Analisis Risiko

Beberapa risiko dari strategi ini meliputi:

  1. Harga dapat memutar sekitar MA selama rentang, menghasilkan sinyal tidak valid yang berlebihan.

  2. Stop loss tetap mungkin terlalu kaku. Pertimbangkan untuk menggunakan trailing stop atau dynamic stop sebagai gantinya.

  3. Risiko stop loss terkena celah harga tiba-tiba. Tambahkan logika tambahan untuk melewatkan stop loss dalam kasus seperti itu.

  4. Tidak dapat merespons fluktuasi harga jangka pendek Tambahkan filter menggunakan indikator lain.

  5. Ruang pengoptimalan terbatas. Pertimbangkan untuk menggunakan rata-rata bergerak adaptif.

Arahan Optimasi

Beberapa cara untuk mengoptimalkan strategi:

  1. Uji kombinasi periode MA yang berbeda untuk menemukan parameter yang lebih sensitif terhadap pasar.

  2. Memperbaiki mekanisme stop loss menggunakan trailing atau stop dinamis untuk mengurangi risiko stop run.

  3. Tambahkan indikator filter seperti KDJ, MACD untuk menghindari perdagangan yang berlebihan selama rentang.

  4. Optimalkan aturan masuk, tunggu untuk MA crossover untuk sepenuhnya terbentuk sebelum masuk untuk mengurangi sinyal palsu.

  5. Menggunakan rata-rata bergerak adaptif yang secara otomatis menyesuaikan periode berdasarkan volatilitas.

  6. Tambahkan aturan ukuran posisi untuk menyesuaikan ukuran posisi berdasarkan kondisi pasar.

  7. Menggabungkan keuntungan mengambil keluar.

Ringkasan

Singkatnya, strategi crossover rata-rata bergerak ganda ini mengidentifikasi arah tren dengan mudah berdasarkan logika crossover MA sederhana, dan memiliki risiko yang dapat dikendalikan. Ini cocok untuk melacak tren jangka menengah hingga panjang. Tetapi strategi ini memiliki ruang yang cukup untuk optimasi, melalui aturan masuk, teknik stop loss, kondisi filter dll. Secara keseluruhan, ini berfungsi sebagai tren dasar yang solid mengikuti strategi, dengan pro dan kontra yang wajar.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = " bhramaji EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")


stopLoss = input(20, title = "Stop loss percentage(0.1%)")


maSource   = input(defval = close, title = "MA Source")
maLength6   = input(defval = 6, title = "MA Period 6", minval = 1)
maLength14  = input(defval = 14, title = "MA Period 14", minval = 1)
maLength25  = input(defval = 25, title = "MA Period 25", minval = 1)
maLength80  = input(defval = 80, title = "MA Period 80", minval = 1)

ma6 = ema(maSource, maLength6)
ma14 = ema(maSource, maLength14)
ma25 = ema(maSource, maLength25)
ma80 = ema(maSource, maLength80)

ma_6_plot = plot(ma6 , title = "MA  6", color = red, linewidth = 2, style = line, transp = 50)
ma14_plot = plot(ma14, title = "MA 14", color = green, linewidth = 2, style = line, transp = 50)
ma25_plot = plot(ma25, title = "MA 25", color = blue, linewidth = 2, style = line, transp = 50)
ma80_plot = plot(ma80, title = "MA 80", color = silver, linewidth = 2, style = line, transp = 50)


longEMA = (crossover(ma6, ma14) or crossover(ma6, ma25)) and (ma6>ma80) 
exitLong = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) 

shortEMA = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) and (ma6< ma80)
exitShort =(crossover(ma6, ma14) or crossover(ma6, ma25))

if (longEMA)
    strategy.entry("LongId", strategy.long)
 
if (shortEMA)
    strategy.entry("ShortId", strategy.short)

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)





Lebih banyak