Strategi crossover rata-rata bergerak adalah strategi perdagangan kuantitatif yang sederhana namun efektif berdasarkan rata-rata bergerak. Strategi crossover menggunakan garis rata-rata bergerak cepat dan garis rata-rata bergerak lambat untuk menghasilkan sinyal beli dan jual.
Logika inti dari strategi ini terletak pada menggunakan rata-rata bergerak untuk menilai tren pasar. Rata-rata bergerak sendiri memiliki fungsi untuk menyaring kebisingan pasar acak. Rata-rata bergerak cepat dapat merespons perubahan harga lebih cepat dan mencerminkan tren terbaru, sementara rata-rata bergerak lambat merespons lebih lambat terhadap perubahan harga terbaru dan mewakili tren jangka menengah hingga panjang. Terobosan garis cepat melalui garis lambat berarti bahwa tren jangka pendek telah berbalik agar konsisten dengan tren jangka menengah dan panjang, sehingga menghasilkan sinyal perdagangan.
Secara khusus, strategi ini pertama mendefinisikan rata-rata bergerak cepat sig1 dan rata-rata bergerak lambat sig2. Kemudian, titik beli dan jual ditentukan sesuai dengan hubungan silang antara sig1 dan sig2. Ketika sig1 menembus sig2 dari bawah, kondisi panjang longCondition dihasilkan. Ketika sig1 menembus sig2 dari atas, kondisi pendek shortCondition dihasilkan. Strategi kemudian menempatkan pesanan ketika kondisi panjang dan pendek terpenuhi, dan menetapkan stop loss dan take profit untuk keluar pesanan.
Keuntungan dari strategi ini signifikan:
Ada juga beberapa risiko dengan strategi ini:
Langkah-langkah optimalisasi:
Secara umum, strategi crossover rata-rata bergerak adalah strategi kuantitatif dengan logika sederhana, kepraktisan yang kuat dan stabilitas. Dengan penyesuaian parameter dan pengoptimalan yang tepat, ini dapat menghasilkan keuntungan yang stabil di berbagai lingkungan pasar.
/*backtest start: 2023-11-14 00:00:00 end: 2023-11-16 04:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Simple yet effective MA cross strategy. // You'll have to tune the parameters to get an optimal win ratio. // If JPY or XAU or any other currency with pips defined as the // second decimal digit are involved, do not forget to set the respective flag on. // // Created by vitelot/yanez/Vts, who's the same fellow with different user names // December 2018 -- Merry Xmas // strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0) yr = input(2016, title="Starting year to analyse") src = input(close, title="Source") maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"]) // isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit maPar1 = input(26, minval=1, title="MA fast period") maPar2 = input(51, minval=2, title="MA slow period") atrPar = input(14,minval=1, title="ATR period") atrMulSL = input(1.5, title="SL ATR multiplicator") atrMulTP = input(1.0, title="TP ATR multiplicator") hma(sig, n) => // Hull moving average definition wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n))) mcg(sig,length) => // Mc Ginley MA definition mg = 0.0 mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4)) ma(t,sig,len) => if t =="SMA" sma(sig,len) else if t == "EMA" ema(sig,len) else if t == "HMA" hma(sig,len) else if t == "McG" // Mc Ginley mcg(sig,len) else wma(sig,len) sig1 = ma(maType, src, maPar1) sig2 = ma(maType, src, maPar2) tickFactor = isJPY? 1e3: 1e5 sl = atrMulSL*atr(atrPar)*tickFactor tp = atrMulTP*atr(atrPar)*tickFactor plot(sig1, color=aqua, title="MA1", linewidth=2) plot(sig2, color=orange, title="MA2", linewidth=2) longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range if (longCondition) strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit strategy.exit("Exit Long", "Long", loss=sl, profit=tp) if (crossunder(sig1, sig2)) // or when the short condition is met strategy.close("Long") shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range if (shortCondition) strategy.entry("Short", strategy.short, qty=1) strategy.exit("Exit Short", "Short", loss=sl, profit=tp) if (crossover(sig1,sig2)) strategy.close("Short")