Strategi Ribbon Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-12-18 12:29:19
Tag:

img

Ringkasan

Strategi Ribbon Moving Average adalah strategi trend berikut berdasarkan pelbagai purata bergerak. Ia memantau purata bergerak pantas dan perlahan secara serentak, dan menghasilkan isyarat perdagangan apabila harga memecahkan pita rata-rata bergerak. Strategi ini menggabungkan penentuan trend dan penunjuk overbought / oversold, yang dapat menangkap dengan berkesan trend jangka menengah dan panjang.

Logika Strategi

Strategi ini menggunakan 5 purata bergerak pantas (5-, 8-, 13-, 20 dan 30 hari garisan) dan 4 purata bergerak perlahan (45, 70-, 105 dan 150 hari garisan). garisan pantas membentuk pita purata bergerak dalaman dan garis perlahan membentuk pita purata bergerak luar. isyarat beli dihasilkan apabila harga memecahkan di atas pita dalaman, dan isyarat jual dihasilkan apabila harga memecahkan di bawah pita dalaman. untuk menapis pecah palsu, ia memerlukan harga untuk memecahkan pita dalaman untuk 3 lilin berturut-turut, dan kebanyakan purata bergerak pantas juga memecahkan secara serentak sebelum menghasilkan isyarat perdagangan.

Di samping itu, strategi ini juga menilai trend jangka panjang. Ia hanya mempertimbangkan untuk menghasilkan isyarat beli apabila harga berada di atas purata bergerak 200 hari. Sebaliknya, ia hanya mempertimbangkan untuk menghasilkan isyarat jual apabila harga memecahkan di bawah purata bergerak 200 hari. Dengan menentukan trend jangka panjang, ia mengelakkan terperangkap semasa penyatuan.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Reka bentuk purata bergerak berbilang boleh menentukan arah trend dengan tepat. Gabungan pita purata bergerak dalaman dan luaran dengan garis cepat dan perlahan berfungsi dengan baik dalam mengenal pasti trend jangka menengah hingga panjang.

  2. Mekanisme pecah berturut-turut dapat menapis pecah palsu dengan berkesan. Sementara itu, memerlukan purata bergerak paling cepat untuk menembusi memastikan trend berubah.

  3. Menghakimi trend jangka panjang mengelakkan terperangkap semasa penyatuan. Menggunakan garis 200 hari untuk menentukan membolehkan membuka kedudukan hanya apabila trend mula berbalik.

  4. Saldo mengikut trend dan keadaan overbought/oversold. purata bergerak sendiri mempunyai trend mengikut keupayaan, manakala menggabungkan indikator overbought/oversold untuk menetapkan titik stop loss memastikan kawalan risiko yang baik.

Analisis Risiko

Risiko utama strategi ini termasuk:

  1. Risiko kegagalan. Apabila kegagalan palsu berlaku, strategi tidak dapat mengelakkan kerugian sepenuhnya.

  2. Risiko kerugian semasa trend julat. Apabila pasaran julat untuk jangka masa yang lama, titik stop loss boleh sering dipukul, yang membawa kepada kerugian yang lebih besar.

  3. Risiko pengoptimuman parameter. Tetapan parameter purata bergerak yang tidak betul juga boleh menyebabkan kesilapan dalam isyarat perdagangan, yang mengakibatkan kerugian yang lebih besar.

Penyelesaian yang sepadan adalah:

  1. Luaskan titik stop loss dengan betul untuk memberi harga ruang yang cukup untuk bergerak.

  2. Tambah penunjuk penilaian trend untuk mengelakkan penubuhan kedudukan tanpa arah semasa penyatuan.

  3. Gunakan backtesting sejarah dan kaedah pengoptimuman parameter untuk memilih kombinasi parameter terbaik. Juga mengesan keberkesanan parameter dalam perdagangan sebenar dan membuat pengoptimuman dinamik.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter purata bergerak untuk memilih nombor kitaran terbaik. Jalankan backtests purata bergerak dengan nombor kitaran yang berbeza untuk mencari kombinasi parameter optimum.

  2. Tambah indikator menilai trend untuk penapisan. Seperti RSI untuk overbought / oversold, Bollinger Bands untuk saluran pecah dan lain-lain. Elakkan menetapkan kedudukan secara buta apabila trend tidak jelas.

  3. Mengguna pakai purata bergerak adaptif. Mengoptimumkan parameter purata bergerak secara dinamik mengikut perubahan keadaan pasaran dan turun naik, supaya mereka lebih sesuai dengan keadaan pasaran semasa.

  4. Menggabungkan model pembelajaran mesin untuk menilai kebarangkalian trend. Menubuhkan model kebarangkalian untuk menilai peluang kejayaan, membantu sistem keputusan dalam menilai masa kemasukan yang ideal.

  5. Mengoptimumkan strategi stop loss untuk mengesan harga dengan lebih baik.

Ringkasan

Strategi Ribbon Purata Bergerak adalah salah satu daripada strategi trend berikut yang lebih biasa. Ia menggabungkan garis cepat dan perlahan untuk menilai trend jangka sederhana dan panjang, dan menetapkan mekanisme pecah berturut-turut untuk memutuskan entri. Strategi ini menyeimbangkan trend berikut dan keadaan overbought / oversold. Dengan pengoptimuman parameter dan peningkatan penunjuk, prestasi dapat ditingkatkan lagi. Ia sesuai untuk pelabur yang memegang kedudukan jangka menengah hingga panjang.


//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)



Lebih lanjut