Strategi Crossover Rata-rata Bergerak

Penulis:ChaoZhang, Tanggal: 2023-11-03 17:23:54
Tag:

img

Gambaran umum

Strategi crossover rata-rata bergerak adalah strategi analisis teknis yang sangat klasik dan umum digunakan. Ide inti dari strategi ini adalah menggunakan crossover antara rata-rata bergerak dari periode yang berbeda sebagai sinyal perdagangan. Ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata bergerak jangka panjang dari bawah, sinyal beli dihasilkan. Ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang dari atas, sinyal jual dihasilkan.

Logika Strategi

Strategi ini menggunakan input untuk mengatur jenis (SMA, EMA, WMA, RMA) dan periode rata-rata bergerak, serta rentang waktu backtesting.

Berbagai jenis rata-rata bergerak dihitung dalam fungsi varian.

Ketika harga penutupan melintasi di atas ma, sinyal beli dihasilkan.

Untuk mengatur stop loss, rentang benar rata-rata 14 periode atr dihitung.

Logika masuk dan keluar yang spesifik adalah sebagai berikut:

Long entry: close crosses above ma and within backtest time range, stop loss point is entry point close.
Long exit: close crosses di bawah ma minus 2 kali atr untuk stop loss exit atau harga tertinggi melebihi entry point close plus 2 kali atr untuk take profit exit

Entry pendek: dekat melintasi di bawah ma dan dalam rentang waktu backtest, titik stop loss adalah entry point dekat
Short exit: close crosses di atas ma plus 2 kali atr untuk stop loss exit atau harga terendah di bawah entry point close minus 2 kali atr untuk take profit exit

Keuntungan dari Strategi

  1. Ide strategi sederhana dan jelas, mudah dipahami dan diterapkan
  2. Banyak digunakan, cocok untuk pasar dan produk yang berbeda
  3. Pengaturan parameter yang fleksibel, jenis dan periode rata-rata bergerak yang dapat disesuaikan
  4. Menggunakan ATR stop loss untuk membantu mengendalikan risiko

Risiko dari Strategi

  1. Strategi rata-rata bergerak cenderung menghasilkan perdagangan yang sering dan stop loss, mengurangi potensi keuntungan
  2. Di pasar yang sangat volatile, moving average dapat menghasilkan sinyal yang menyesatkan
  3. Jangkauan stop loss ATR bisa terlalu luas atau terlalu sempit, gagal mencegah kerugian besar

Untuk mengatasi risiko, optimasi dapat dilakukan dalam aspek berikut:

  1. Sesuaikan periode rata-rata bergerak, gunakan rata-rata bergerak jangka panjang
  2. Tambahkan kondisi filter untuk menghindari perdagangan yang sering di pasar yang tidak stabil
  3. Mengoptimalkan parameter ATR atau menggunakan metode stop loss lainnya
  4. Gabungkan indikator tren untuk menentukan tren keseluruhan, hindari perdagangan kontra-tren

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan kondisi filter seperti volume, volatilitas untuk menghindari kebocoran irasional
  2. Gunakan stop loss ATR adaptif sehingga rentang stop loss berubah dengan volatilitas pasar
  3. Menggabungkan Stoch, RSI dan indikator lainnya untuk konfirmasi multifaktor untuk meningkatkan kualitas sinyal
  4. Tambahkan penentuan tren untuk menghindari perdagangan kontra-tren
  5. Gunakan waktu keluar untuk menghindari menahan pecundang terlalu lama
  6. Mengoptimalkan parameter periode rata-rata bergerak untuk menemukan kombinasi parameter terbaik

Ringkasan

Strategi crossover rata-rata bergerak adalah strategi analisis teknis yang sangat tipikal dan umum digunakan. Ide inti dari strategi ini sederhana dan mudah diterapkan, cocok untuk berbagai pasar, dan merupakan salah satu strategi perdagangan kuantitas entry-level. Namun, strategi ini juga memiliki beberapa masalah seperti menghasilkan sinyal yang sering dan rentan terhadap stop loss. Dengan pengoptimalan yang tepat, kinerja dapat sangat ditingkatkan. Secara keseluruhan, strategi crossover rata-rata bergerak memberikan kerangka kerja yang sangat baik untuk pengembangan strategi dan merupakan landasan pembelajaran strategi perdagangan kuantitatif.


/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)

type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])

length = input(28)
source = close



// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2000, title = "From Year", minval = 2000)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(9999, 1, 1, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"



variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v5 = wma(src, len)                                                  // Weighted
    v7 = rma(src, len)                                                  // Smoothed
    type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)


atr = security(syminfo.tickerid, "D", atr(14))

range = valuewhen(cross(close,ma), (atr*2), na)

ep = valuewhen(cross(close,ma), close, na)

plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)

strategy.entry("Long Entry", true, when = crossover(close,ma)  and window() , stop  = ep ) 
strategy.exit("Long Exit", "Long Entry", stop  = ep-range) 
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) 

strategy.entry("Short Entry", false, when = crossunder(close,ma)  and window() , stop  = ep ) 
strategy.exit("Short Exit", "Short Entry", stop  = ep+range) 
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] ) 


Lebih banyak