
Strategi perdagangan rata-rata bergerak ganda adalah strategi perdagangan kuantitatif yang umum. Strategi ini menggunakan rata-rata bergerak dari dua periode waktu yang berbeda untuk menghasilkan sinyal perdagangan berdasarkan persimpangan mereka. Secara khusus, ketika rata-rata bergerak jangka pendek melewati rata-rata bergerak jangka panjang, itu dianggap sebagai sinyal beli; ketika rata-rata bergerak jangka pendek melewati rata-rata bergerak jangka panjang, itu dianggap sebagai sinyal jual.
Prinsip inti dari strategi ini adalah: Moving Average jangka pendek dapat mencerminkan tren jangka pendek dari harga aset, dan Moving Average jangka panjang dapat mencerminkan tren jangka panjang dari harga aset. Ketika garis jangka pendek melintasi garis jangka panjang, berarti tren jangka pendek berubah menjadi naik, dan Anda dapat membeli; Ketika garis jangka pendek melintasi garis jangka panjang, berarti tren jangka pendek berubah menjadi turun, dan Anda dapat menjual. Dengan cara ini, Anda dapat secara berurutan menangkap titik balik dari tren harga.
Secara khusus, strategi ini mendefinisikan dua garis rata-rata bergerak: satu adalah rata-rata bergerak jangka pendek 5 hari, yang digunakan untuk menangkap tren harga jangka pendek; yang lain adalah rata-rata bergerak jangka panjang 15 hari, yang digunakan untuk menilai tren harga jangka panjang. Ketika garis 5 hari melintasi garis 15 hari dari bawah, berarti harga jangka pendek telah mulai naik, yang merupakan sinyal beli; dan ketika garis 5 hari melintasi garis 15 hari dari atas ke bawah, berarti harga jangka pendek mulai turun, yang merupakan sinyal jual.
Dibandingkan dengan strategi lainnya, strategi moving average ganda memiliki keuntungan sebagai berikut:
Strategi moving average ganda juga memiliki beberapa risiko, yang meliputi:
Solusi yang sesuai:
Strategi ini dapat dioptimalkan dari beberapa arah:
Kombinasi dengan indikator lain untuk memfilter sinyal, seperti MACD, KDJ, dan lain-lain, untuk menghindari sinyal palsu
Memperkenalkan Adaptive Moving Average, menyesuaikan parameter Moving Average secara dinamis sesuai dengan tingkat fluktuasi pasar, meningkatkan stabilitas
Mengoptimalkan parameter moving average, menemukan kombinasi parameter yang optimal, dan meningkatkan efektivitas strategi
Menerapkan mekanisme stop loss untuk mencegah peningkatan kerugian dan meningkatkan kemampuan pengendalian risiko
Kombinasi multi-frame waktu, menggunakan sinyal garis matahari dan garis lingkar untuk meningkatkan stabilitas
Markov state switching, menggunakan parameter yang berbeda untuk kondisi pasar yang berbeda, meningkatkan adaptasi
Strategi perdagangan rata-rata bergerak ganda secara keseluruhan merupakan strategi perdagangan kuantitatif yang lebih stabil. Prinsip perdagangannya sederhana, mudah dipahami dan diimplementasikan, parameternya disesuaikan secara fleksibel, dan dapat secara efektif mengikuti tren pasar. Namun, ada juga keterbatasan tertentu, seperti menghasilkan sinyal palsu, sulit untuk menangani situasi pasar yang sangat berfluktuasi, dll. Ini perlu dikendalikan dengan memperkenalkan alat bantu lain, dan cara pengoptimalan parameter.
//@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())