Strategi Rata-rata Gerak Pita

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

img

Gambaran umum

Strategi Moving Average Ribbon adalah strategi mengikuti tren berdasarkan beberapa rata-rata bergerak. Ini memantau rata-rata bergerak cepat dan lambat secara bersamaan, dan menghasilkan sinyal perdagangan ketika harga menembus pita rata-rata bergerak. Strategi ini menggabungkan penentuan tren dan indikator overbought / oversold, yang dapat secara efektif menangkap tren jangka menengah dan panjang.

Logika Strategi

Strategi ini menggunakan 5 rata-rata bergerak cepat (5-, 8-, 13-, 20 dan 30 hari) dan 4 rata-rata bergerak lambat (45, 70-, 105 dan 150 hari). garis cepat membentuk pita rata-rata bergerak dalam dan garis lambat membentuk pita rata-rata bergerak luar. sinyal beli dihasilkan ketika harga melanggar di atas pita dalam, dan sinyal jual dihasilkan ketika harga melanggar di bawah pita dalam. untuk menyaring istirahat palsu, dibutuhkan harga untuk menembus pita dalam selama 3 lilin berturut-turut, dan sebagian besar rata-rata bergerak cepat juga menerobos secara sinkron sebelum menghasilkan sinyal perdagangan.

Selain itu, strategi ini juga menilai tren jangka panjang. Strategi ini hanya mempertimbangkan untuk menghasilkan sinyal beli ketika harga berada di atas rata-rata bergerak 200 hari. Sebaliknya, hanya mempertimbangkan untuk menghasilkan sinyal jual ketika harga berada di bawah rata-rata bergerak 200 hari. Dengan menentukan tren jangka panjang, strategi ini mencegah terjebak selama konsolidasi.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Kombinasi pita rata-rata bergerak bagian dalam dan luar dengan garis cepat dan lambat bekerja dengan baik dalam mengidentifikasi tren jangka menengah hingga panjang.

  2. Mekanisme istirahat berurutan dapat secara efektif menyaring istirahat palsu. Sementara itu, membutuhkan rata-rata bergerak paling cepat untuk menerobos memastikan tren berubah.

  3. Menghakimi tren jangka panjang menghindari terjebak selama konsolidasi. Menggunakan garis 200 hari untuk menentukan memungkinkan membuka posisi hanya ketika tren mulai berbalik.

  4. Rata-rata bergerak sendiri memiliki kemampuan mengikuti tren, sementara menggabungkan indikator overbought / oversold untuk menetapkan titik stop loss memastikan pengendalian risiko yang baik.

Analisis Risiko

Risiko utama dari strategi ini meliputi:

  1. Risiko kegagalan. Ketika kegagalan terjadi, strategi tidak dapat sepenuhnya menghindari kerugian.

  2. Risiko kerugian selama rentang tren. Ketika pasar rentang untuk jangka waktu yang lama, titik stop loss dapat sering dipukul, yang mengarah ke kerugian yang lebih besar.

  3. Risiko optimasi parameter: Pengaturan parameter rata-rata bergerak yang tidak benar juga dapat menyebabkan kesalahan dalam sinyal perdagangan, yang mengakibatkan kerugian yang lebih besar.

Solusi yang sesuai adalah:

  1. Memperluas titik stop loss yang tepat untuk memberikan harga ruang yang cukup untuk bergerak.

  2. Tambahkan indikator penilaian tren untuk menghindari posisi tanpa arah selama konsolidasi, seperti penyaringan dengan DMI, MACD dan indikator lainnya.

  3. Menggunakan backtesting historis dan metode optimasi parameter untuk memilih kombinasi parameter terbaik. Juga melacak efektivitas parameter dalam perdagangan nyata dan melakukan optimasi dinamis.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter rata-rata bergerak untuk memilih nomor siklus terbaik. Jalankan backtesting rata-rata bergerak dengan nomor siklus yang berbeda untuk menemukan kombinasi parameter yang optimal.

  2. Tambahkan indikator penilaian tren untuk penyaringan. Seperti RSI untuk overbought / oversold, Bollinger Bands untuk channel breakout dll Hindari menetapkan posisi secara membabi buta ketika tren tidak jelas.

  3. Mengadopsi rata-rata bergerak adaptif. Mengoptimalkan parameter rata-rata bergerak secara dinamis sesuai dengan perubahan kondisi pasar dan volatilitas, sehingga mereka lebih sesuai dengan kondisi pasar saat ini.

  4. Menggabungkan model pembelajaran mesin untuk menilai probabilitas tren. Menetapkan model probabilitas untuk mengevaluasi peluang keberhasilan, membantu sistem keputusan dalam menilai waktu masuk yang ideal.

  5. Optimalkan strategi stop loss untuk pelacakan harga yang lebih baik. seperti trailing stop loss atau dynamic position sizing stop loss untuk membuat stop loss line lebih cerdas.

Ringkasan

Strategi Moving Average Ribbon adalah salah satu strategi trend following yang lebih umum. Strategi ini menggabungkan garis cepat dan lambat untuk menilai tren jangka menengah dan panjang, dan menetapkan mekanisme breakout berturut-turut untuk memutuskan entri. Strategi ini menyeimbangkan kondisi trend following dan overbought/oversold. Dengan optimasi parameter dan peningkatan indikator, kinerjanya dapat ditingkatkan lebih lanjut.


//@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 banyak