Strategi berdasarkan beberapa pita rata-rata bergerak


Tanggal Pembuatan: 2023-12-18 12:29:19 Akhirnya memodifikasi: 2023-12-18 12:29:19
menyalin: 1 Jumlah klik: 807
1
fokus pada
1621
Pengikut

Strategi berdasarkan beberapa pita rata-rata bergerak

Ringkasan

Strategi Moving Average Band adalah strategi pelacakan tren yang didasarkan pada beberapa Moving Average. Ini akan memantau rata-rata bergerak cepat dan rata-rata bergerak lambat secara bersamaan, menghasilkan sinyal perdagangan ketika harga menembus Moving Average Band. Strategi ini menggabungkan penilaian tren dan indikator overbought oversold untuk secara efektif menangkap tren garis tengah.

Prinsip Strategi

Strategi ini menggunakan 5 rata-rata bergerak cepat (line 5, 8, 13, 20, dan 30) dan 4 rata-rata bergerak lambat (line 45, 70, 105, dan 150), dengan garis cepat membentuk moving average internal, dan garis lambat membentuk moving average eksternal. Untuk menghasilkan sinyal perdagangan, harga perlu melewati 3 garis K secara berturut-turut, dan sebagian besar garis bergerak cepat juga terobosan secara sinkron.

Selain itu, strategi ini juga menilai tren jangka panjang. Hanya ketika harga berada di atas rata-rata bergerak 200 hari, sinyal beli akan dipertimbangkan. Sebaliknya, hanya jika harga jatuh di bawah rata-rata bergerak 200 hari, sinyal jual akan dipertimbangkan. Dengan menilai tren jangka panjang, Anda dapat menghindari pegangan selama periode penutupan.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Desain moving average ganda, dapat menentukan arah tren secara akurat. Moving average band dalam dan luar digabungkan dengan garis rata-rata cepat dan lambat, untuk mengidentifikasi tren garis tengah dan panjang yang efektif.

  2. Mekanisme continuous breakout dapat secara efektif memfilter false breakout. Pada saat yang sama, sebagian besar breakout linear cepat diperlukan untuk memastikan perubahan tren.

  3. Pertimbangkan tren jangka panjang, hindari dipasangkan dalam penyesuaian. Berdasarkan penilaian garis waktu 200, hanya pertimbangkan posisi jika tren berbalik.

  4. Menggabungkan trend tracking dan overbought oversold. Moving average sendiri memiliki fungsi trend tracking, dan digabungkan dengan indikator overbought oversold untuk menetapkan titik stop loss, dan mengendalikan risiko.

Analisis risiko

Strategi ini memiliki risiko utama sebagai berikut:

  1. Risiko kegagalan penembusan. Strategi ini tidak dapat sepenuhnya menghindari terjadinya kerugian ketika harga mengalami penembusan palsu.

  2. Risiko kerugian di bawah tren bergolak. Ketika pasar bergolak lama, titik-titik stop loss mungkin sering tertabrak, yang menyebabkan kerugian meningkat.

  3. Parameter Optimisasi Risiko. Setting parameter moving average yang tidak tepat juga dapat menyebabkan sinyal perdagangan yang salah, sehingga meningkatkan kerugian.

Solusi yang sesuai:

  1. Anda dapat menggunakan stop loss yang lebih longgar untuk memberi harga ruang yang cukup untuk bergerak. Atau Anda dapat menggunakan stop loss ljetrail untuk membuat garis stop loss bergerak.

  2. Meningkatkan indikator penilaian tren, menghindari posisi yang tidak berorientasi pada saat gempa. Misalnya, filter dengan indikator seperti DMI, MACD.

  3. Menggunakan metode retrospeksi historis dan optimasi parameter, memilih kombinasi parameter terbaik. Dalam disk nyata juga harus melacak efek parameter, melakukan optimasi dinamis.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa dimensi:

  1. Mengoptimalkan parameter moving average, memilih periode terbaik. Kombinasi parameter optimal dapat ditemukan dengan mengevaluasi rata-rata bergerak dari periode yang berbeda.

  2. Tambah indikator penilaian tren untuk melakukan filter. Misalnya, indikator RSI menilai overbought oversold, Brinband menilai terobosan saluran, dll. Hindari posisi buta ketika tren tidak jelas.

  3. Menggunakan Adaptive Moving Average. Mengoptimalkan parameter moving average secara real time sesuai dengan perubahan dan volatilitas pasar, sehingga lebih sesuai dengan kondisi pasar saat ini.

  4. Menggabungkan model pembelajaran mesin untuk menilai probabilitas tren. Membangun model probabilitas untuk menilai probabilitas keberhasilan terobosan, membantu sistem pengambilan keputusan untuk menilai waktu masuk.

  5. Optimalkan strategi stop loss agar stop loss lebih baik dalam melacak harga. Stop loss yang lebih cerdas, misalnya traillig stop loss atau stop loss otomatis.

Meringkaskan

Strategi Moving Average Band adalah salah satu strategi pelacakan tren yang lebih umum. Ini menggabungkan garis cepat dan lambat untuk menilai tren garis panjang dan menengah, dan mengatur mekanisme penyaringan yang terus menerus untuk memutuskan masuk. Strategi ini menggabungkan pelacakan tren dan penilaian overbought dan oversold, dengan optimasi parameter dan penguatan indikator, dapat meningkatkan efektivitas penggunaan lebih lanjut.

Kode Sumber Strategi
//@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)