
Strategi Moving Average Crossover adalah strategi analisis teknis yang sangat klasik dan umum digunakan. Gagasan inti dari strategi ini adalah memanfaatkan persilangan antara rata-rata bergerak dari periode yang berbeda sebagai sinyal jual beli.
Strategi ini menginput jenis moving average (SMA, EMA, WMA, RMA) dan durasi periode, serta rentang waktu yang diperhitungkan.
Berbagai jenis moving average dihitung dalam fungsi varian. Moving average yang dihitung disimpan oleh variabel ma.
Ketika harga close berada di atas ma, maka akan muncul sinyal buy; ketika harga close berada di bawah ma, maka akan muncul sinyal sell.
Untuk mengatur stop loss, perhitungkan amplitudo rata-rata fluktuasi nyata selama 14 siklus dengan atr. Dengan titik transit sebagai referensi, naik atau turun ditambah 2 kali lipat atr sebagai batas stop loss.
Logika masuk dan keluar adalah sebagai berikut:
Multi head entry: close di atas ma dan dalam waktu pelacakan, stop loss adalah entry point close Pertandingan multi-head: close di bawah ma minus 2 kaliatr untuk stop loss, atau harga tertinggi di atas entry point close ditambah 2 kaliatr untuk stop loss Masuk kosong: close di bawah ma dan dalam waktu pengetesan, stop loss adalah titik masuk close Keluar kosong: close di atas memakai ma ditambah 2 kaliatr saat stop loss keluar, atau harga minimum di bawah titik masuk close dikurangi 2 kaliatr saat stop stop keluar
Ada beberapa cara untuk mengoptimalkan risiko:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Strategi moving average crossover adalah strategi analisis teknis yang sangat khas dan umum digunakan. Strategi inti yang sederhana, mudah diimplementasikan, dan berlaku untuk berbagai pasar, adalah salah satu strategi masuk untuk perdagangan kuantitatif. Tetapi strategi ini juga memiliki beberapa masalah, seperti menghasilkan sinyal yang sering, mudah berhenti, dll. Dengan pengoptimalan yang tepat, kinerja strategi ini dapat ditingkatkan secara signifikan.
/*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] )