Dual Moving Average Trading Strategy adalah strategi perdagangan kuantitatif yang umum. Strategi ini menggunakan dua moving average dengan periode waktu yang berbeda untuk menghasilkan sinyal perdagangan berdasarkan crossover mereka. Secara khusus, ketika moving average jangka pendek melintasi di atas moving average jangka panjang, itu dianggap sebagai sinyal beli; ketika moving average jangka pendek melintasi di bawah moving average jangka panjang, itu dianggap sebagai sinyal jual.
Prinsip inti dari strategi ini adalah: rata-rata bergerak jangka pendek mencerminkan tren jangka pendek harga aset, dan rata-rata bergerak jangka panjang mencerminkan tren jangka panjang harga aset. Ketika garis jangka pendek melintasi di atas garis jangka panjang, itu menunjukkan bahwa tren jangka pendek telah berubah menjadi naik, pada saat ini Anda dapat membeli. Ketika garis jangka pendek melintasi di bawah garis jangka panjang, itu menunjukkan bahwa tren jangka pendek telah berubah menjadi turun, pada saat ini Anda dapat menjual. Ikuti tren, menangkap titik balik tren harga.
Secara khusus, strategi mendefinisikan dua rata-rata bergerak: rata-rata bergerak jangka pendek 5 hari untuk menangkap tren harga jangka pendek; dan rata-rata bergerak jangka panjang 15 hari untuk menilai tren harga jangka panjang.
Dibandingkan dengan strategi lain, strategi rata-rata bergerak ganda memiliki keuntungan berikut:
Strategi rata-rata bergerak ganda juga memiliki beberapa risiko, terutama termasuk:
Solusi:
Strategi dapat dioptimalkan dalam arah berikut:
Gabungkan dengan indikator lain seperti MACD, KDJ untuk menyaring sinyal palsu.
Memperkenalkan rata-rata bergerak adaptif, menyesuaikan parameter secara dinamis berdasarkan volatilitas pasar untuk meningkatkan ketahanan.
Mengoptimalkan parameter rata-rata bergerak untuk menemukan kombinasi terbaik dan meningkatkan kinerja strategi.
Tambahkan mekanisme stop loss untuk membatasi kerugian dan meningkatkan kontrol risiko.
Kombinasi dari beberapa kerangka waktu, memanfaatkan sinyal dari garis harian dan mingguan untuk meningkatkan stabilitas.
Pergantian keadaan Markov, gunakan parameter yang berbeda di bawah kondisi pasar yang berbeda untuk meningkatkan kemampuan beradaptasi.
Secara umum, strategi perdagangan rata-rata bergerak ganda cukup efektif dan stabil. Prinsip perdagangan sederhana untuk dipahami dan diimplementasikan, parameternya fleksibel untuk beradaptasi dengan tren pasar. Sementara itu ada beberapa keterbatasan seperti menghasilkan sinyal palsu dan kesulitan dalam menangani fluktuasi pasar yang drastis. Ini dapat ditangani dengan memperkenalkan alat lain dan pengoptimalan parameter. Secara keseluruhan, ini adalah strategi praktis yang cocok untuk pemula perdagangan kuantitatif untuk belajar dan berlatih.
//@version=3 strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true) // === GENERAL INPUTS === // short ma ma1Source = input(defval = close, title = "MA 1 Source") ma1Length = input(defval = 5, title = "MA 1 Period", minval = 1) // long ma ma2Source = input(defval = close, title = "MA 2 Source") ma2Length = input(defval = 15, title = "MA 2 Period", minval = 1) // === SERIES SETUP === /// a couple of ma's.. ma1 = ema(ma1Source, ma1Length) ma2 = ema(ma2Source, ma2Length) // === PLOTTING === fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30) slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30) // === LOGIC === enterLong = crossover(ma1, ma2) exitLong = crossover(ma2, ma1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // Entry // strategy.entry(id="Long Entry", long=true, when=enterLong and window()) strategy.entry(id="Short Entry", long=false, when=exitLong and window())