Strategi Crossover Rata-rata Bergerak

Penulis:ChaoZhang, Tanggal: 2023-11-22 16:38:26
Tag:

img

Gambaran umum

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 Strategi

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.

Analisis Keuntungan

Keuntungan dari strategi ini signifikan:

  1. Logika sederhana, mudah dipahami dan diterapkan
  2. Pengaturan parameter yang fleksibel, dapat dioptimalkan di bawah kondisi pasar yang berbeda
  3. Dapat dikombinasikan dengan indikator lain untuk menyaring sinyal dan meningkatkan stabilitas
  4. Kinerja yang baik, misalnya EMA15-EMA30 combo dapat mencapai 83% tingkat kemenangan pada data harian EURCHF

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Efek whipsaw yang parah, konfigurasi stop loss sangat penting
  2. Kinerja yang buruk di pasar berjarak, sisi
  3. Membutuhkan pengujian ekstensif dan penyesuaian parameter agar sesuai dengan produk dan kerangka waktu yang berbeda

Langkah-langkah optimalisasi:

  1. Tambahkan indikator lain untuk penilaian untuk menghindari whipsaws
  2. Sesuaikan jenis dan parameter MA agar sesuai dengan produk yang berbeda
  3. Mengoptimalkan stop loss dan mengambil rasio keuntungan untuk mengendalikan risiko

Kesimpulan

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")


Lebih banyak