Strategi perdagangan purata bergerak berganda adalah strategi perdagangan kuantitatif yang biasa. Strategi ini menggunakan dua purata bergerak dengan tempoh masa yang berbeza untuk menjana isyarat perdagangan berdasarkan persilangan mereka. Khususnya, apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang, ia dianggap isyarat beli; apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang, ia dianggap isyarat jual.
Prinsip utama strategi ini ialah: purata bergerak jangka pendek mencerminkan trend jangka pendek harga aset, dan purata bergerak jangka panjang mencerminkan trend jangka panjang harga aset. Apabila garis jangka pendek melintasi di atas garis jangka panjang, ia menunjukkan bahawa trend jangka pendek telah berubah menjadi naik, pada masa ini anda boleh membeli. Apabila garis jangka pendek melintasi di bawah garis jangka panjang, ia menunjukkan bahawa trend jangka pendek telah berubah menjadi jatuh, pada masa ini anda boleh menjual. Ikuti trend, menangkap titik perubahan trend harga.
Secara khusus, strategi ini menentukan dua purata bergerak: purata bergerak jangka pendek 5 hari untuk menangkap trend harga jangka pendek; dan purata bergerak jangka panjang 15 hari untuk menilai trend harga jangka panjang. Apabila garis 5 hari bergerak di atas garis 15 hari, ia menunjukkan bahawa harga jangka pendek telah mula meningkat, yang merupakan isyarat beli; apabila garis 5 hari melintasi di bawah garis 15 hari, ia menunjukkan bahawa harga jangka pendek mula jatuh, ini adalah isyarat jual.
Berbanding dengan strategi lain, strategi purata bergerak berganda mempunyai kelebihan berikut:
Strategi purata bergerak berganda juga mempunyai beberapa risiko, terutamanya termasuk:
Penyelesaian:
Strategi ini boleh dioptimumkan ke arah berikut:
Gabungkan dengan penunjuk lain seperti MACD, KDJ untuk menapis isyarat palsu.
Memperkenalkan purata bergerak adaptif, menyesuaikan parameter secara dinamik berdasarkan turun naik pasaran untuk meningkatkan ketahanan.
Mengoptimumkan parameter purata bergerak untuk mencari kombinasi terbaik dan meningkatkan prestasi strategi.
Tambahkan mekanisme stop loss untuk mengehadkan kerugian dan meningkatkan kawalan risiko.
Gabungan pelbagai bingkai masa, menggunakan isyarat dari garis harian dan mingguan untuk meningkatkan kestabilan.
Peralihan keadaan Markov, gunakan parameter yang berbeza di bawah keadaan pasaran yang berbeza untuk meningkatkan kesesuaian.
Secara umum, strategi perdagangan purata bergerak berganda agak berkesan dan stabil. Prinsip perdagangan mudah difahami dan dilaksanakan, parameter fleksibel untuk menyesuaikan diri dengan trend pasaran. Sementara itu terdapat beberapa batasan seperti menghasilkan isyarat palsu dan kesukaran dalam mengendalikan turun naik pasaran yang drastik. Ini dapat ditangani dengan memperkenalkan alat lain dan pengoptimuman parameter. Secara keseluruhan, ini adalah strategi praktikal yang sesuai 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())