Trend Mengikut Strategi Berdasarkan Moving Average Crossover

Penulis:ChaoZhang, Tarikh: 2024-01-31 15:17:31
Tag:

img

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dengan mengira pelbagai jenis purata bergerak (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA dan Weighted Moving Average VWMA) dan mengesan titik persimpangan di antara mereka, untuk menentukan trend pasaran dan mengikutinya.

Logika Strategi

Idea teras strategi ini adalah untuk menilai trend pasaran dengan membandingkan dua purata bergerak. Khususnya, ia membolehkan mengkonfigurasi dua MA dengan jenis dan panjang yang berbeza melalui parameter input. MA pertama mempunyai tempoh yang lebih lama untuk mewakili trend utama, sementara MA kedua mempunyai tempoh yang lebih pendek untuk trend jangka pendek semasa.

Apabila MA jangka pendek melintasi MA jangka panjang dari bawah, ia menandakan bahawa trend jangka pendek semakin kuat dan pasaran memasuki trend menaik. Oleh itu, isyarat beli dihasilkan pada titik silang ini. Sebaliknya, apabila MA jangka pendek melintasi di bawah MA jangka panjang, ia menunjukkan trend jangka pendek melemah dan pasaran berbalik ke bawah. Oleh itu isyarat jual dihasilkan kemudian.

Dengan mengesan persilangan MA tersebut, strategi ini mengikuti trend pasaran untuk perdagangan.

Kelebihan

  • Menggunakan kaedah silang MA klasik dan praktikal untuk menentukan trend utama
  • Menyokong kombinasi pelbagai jenis MA, memberikan fleksibiliti
  • Logik yang mudah dan jelas, mudah difahami dan automatik
  • Parameter yang boleh dikonfigurasi disesuaikan dengan keadaan pasaran yang berbeza

Analisis Risiko

  • MAs mempunyai kesan kelewatan, isyarat boleh datang di atau berhampiran titik perubahan apabila tindakan harga telah berlaku
  • Penghakiman trend mungkin tidak tepat, menyebabkan kerugian yang tidak perlu
  • Hasilnya berbeza dengan ketara dengan tetapan parameter MA yang berbeza

Penyelesaian:

  • Gunakan tempoh MA yang lebih pendek untuk kepekaan yang lebih baik
  • Tambah penapis lain untuk pengesahan silang untuk mengelakkan kesilapan
  • Kaedah pengoptimuman parameter misalnya kekuatan kasar, pembelajaran mesin, algoritma genetik
  • Mengendalikan kedudukan ukuran dan stop kehilangan dengan betul

Arahan Penambahbaikan

  • Tambah penunjuk lain sebagai penapis untuk meningkatkan ketepatan
  • Parameter MA yang disesuaikan secara automatik berdasarkan keadaan pasaran yang berubah
  • Menggunakan pembelajaran mesin untuk pengoptimuman parameter automatik
  • Memperbaiki strategi stop loss

Kesimpulan

Strategi ini berdasarkan idea klasik menggunakan persilangan MA untuk pengesanan trend utama. Dengan kombinasi MA yang fleksibel, ia mudah dilaksanakan dan sesuai untuk automasi perdagangan algoritma. Secara keseluruhan ia agak praktikal tetapi meninggalkan ruang untuk penambahbaikan seperti penyesuaian parameter, penapis tambahan dan lain-lain untuk meningkatkan prestasi.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)


Lebih lanjut