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.
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
Untuk mengatasi risiko, optimasi dapat dilakukan dalam aspek berikut:
Strategi ini dapat dioptimalkan dalam aspek berikut:
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] )