Strategi Crossover Purata Bergerak

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

img

Ringkasan

Strategi crossover purata bergerak adalah strategi perdagangan kuantitatif yang mudah namun berkesan berdasarkan purata bergerak. Ia menggunakan persilangan garis purata bergerak pantas dan garis purata bergerak perlahan untuk menjana isyarat beli dan jual. Apabila garis pantas menembusi garis perlahan dari bawah, isyarat beli dihasilkan. Apabila garis pantas menembusi garis perlahan dari atas, isyarat jual dihasilkan.

Logika Strategi

Logik teras strategi ini terletak pada menggunakan purata bergerak untuk menilai trend pasaran. Purata bergerak sendiri mempunyai fungsi menapis bunyi pasaran rawak. Purata bergerak pantas dapat bertindak balas terhadap perubahan harga dengan lebih cepat dan mencerminkan trend terkini, sementara purata bergerak perlahan bertindak balas lebih perlahan terhadap perubahan harga terkini dan mewakili trend jangka menengah hingga panjang. Penembusan garis pantas melalui garis perlahan bermaksud bahawa trend jangka pendek telah berbalik untuk konsisten dengan trend jangka menengah dan panjang, sehingga menghasilkan isyarat perdagangan.

Secara khusus, strategi ini pertama menentukan purata bergerak pantas sig1 dan purata bergerak perlahan sig2. Kemudian, titik beli dan jual ditentukan mengikut hubungan silang antara sig1 dan sig2. Apabila sig1 memecahkan sig2 dari bawah, longcondition longCondition dihasilkan. Apabila sig1 memecahkan sig2 dari atas, shortcondition shortCondition dihasilkan. Strategi kemudian meletakkan pesanan apabila syarat panjang dan pendek dipenuhi, dan menetapkan stop loss dan mengambil keuntungan untuk keluar pesanan.

Analisis Kelebihan

Kelebihan strategi ini adalah penting:

  1. Logik yang mudah, mudah difahami dan dilaksanakan
  2. Penyesuaian parameter yang fleksibel, boleh dioptimumkan di bawah keadaan pasaran yang berbeza
  3. Boleh digabungkan dengan penunjuk lain untuk menapis isyarat dan meningkatkan kestabilan
  4. Prestasi yang baik, contohnya EMA15-EMA30 combo boleh mencapai 83% kadar kemenangan pada data harian EURCHF

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Kesan whipsaw yang teruk, konfigurasi stop loss adalah penting
  2. Prestasi yang lemah dalam pasaran yang berbeza, sampingan
  3. Menghendaki ujian yang meluas dan penyesuaian parameter untuk menyesuaikan produk dan jangka masa yang berbeza

Langkah-langkah pengoptimuman:

  1. Tambah penunjuk lain untuk penilaian untuk mengelakkan whipsaws
  2. Sesuaikan jenis dan parameter MA untuk menyesuaikan produk yang berbeza
  3. Mengoptimumkan stop loss dan mengambil nisbah keuntungan untuk mengawal risiko

Kesimpulan

Secara umum, strategi crossover purata bergerak adalah strategi kuant dengan logik yang mudah, kepraktisan yang kuat dan kestabilan. Dengan penyesuaian parameter dan pengoptimuman yang betul, ia dapat menjana keuntungan yang stabil dalam pelbagai persekitaran pasaran. Layak memberi tumpuan dan digunakan untuk peniaga kuantitatif.


/*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 lanjut