Strategi berdasarkan berbilang jalur purata bergerak


Tarikh penciptaan: 2023-12-18 12:29:19 Akhirnya diubah suai: 2023-12-18 12:29:19
Salin: 1 Bilangan klik: 807
1
fokus pada
1621
Pengikut

Strategi berdasarkan berbilang jalur purata bergerak

Gambaran keseluruhan

Strategi moving averages adalah strategi trend-following yang berdasarkan pada beberapa moving averages. Ia akan memantau purata bergerak cepat dan purata bergerak perlahan pada masa yang sama, menghasilkan isyarat perdagangan apabila harga menembusi band moving averages. Strategi ini menggabungkan penilaian trend dan indikator overbought dan oversold untuk menangkap trend garis tengah yang panjang dengan berkesan.

Prinsip Strategi

Strategi ini menggunakan 5 purata bergerak pantas (garis ke-5, ke-8, ke-13, ke-20, dan ke-30) dan 4 purata bergerak perlahan (garis ke-45, ke-70, ke-105, dan ke-150) secara serentak, dengan garisan pantas membentuk garis purata bergerak dalaman dan garisan perlahan membentuk garis purata bergerak luar. Ia menghasilkan isyarat beli apabila harga melintasi garis purata dalaman di atas dan isyarat jual apabila harga melintasi garis purata dalaman di bawah.

Selain itu, strategi ini juga akan menilai trend jangka panjang. Hanya apabila harga berada di atas purata bergerak 200 hari, isyarat beli akan dipertimbangkan. Sebaliknya, hanya apabila harga jatuh di bawah purata bergerak 200 hari, isyarat jual akan dipertimbangkan.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Reka bentuk purata bergerak berganda, dapat menentukan arah trend dengan tepat. Rata-rata purata bergerak dalam dan luar digabungkan dengan garis purata yang cepat dan perlahan, untuk mengenal pasti trend garis tengah dan panjang.

  2. Mekanisme penembusan berturut-turut dapat menyaring penembusan palsu dengan berkesan. Pada masa yang sama, kebanyakan penembusan rata-rata cepat diperlukan untuk memastikan perubahan trend.

  3. Menilai trend jangka panjang, untuk mengelakkan dipasangkan dalam penyusunan semula. Berkongsi dengan penghakiman garis 200 hari, hanya pertimbangkan untuk membina kedudukan apabila trend bertukar.

  4. Menggabungkan trend tracking dan overbought oversold. Rata-rata bergerak sendiri mempunyai fungsi trend tracking, dan digabungkan dengan indikator overbought oversold untuk menetapkan titik hentian, kawalan risiko berada di tempat.

Analisis risiko

Strategi ini mempunyai risiko utama:

  1. Risiko kegagalan penembusan. Strategi ini tidak dapat sepenuhnya mengelakkan kerugian apabila harga mengalami penembusan palsu.

  2. Risiko kerugian di bawah trend goyah. Apabila pasaran goyah untuk jangka masa yang panjang, titik berhenti mungkin sering dipukul, menyebabkan kerugian meningkat.

  3. Risiko pengoptimuman parameter. Pengaturan parameter purata bergerak yang tidak betul juga boleh menyebabkan isyarat perdagangan menjadi salah, dan kekalahan bertambah.

Penyelesaian:

  1. Melepaskan titik hentian yang sesuai, memberi harga ruang yang cukup untuk berjalan. Atau menggunakan hentian ljetrail, biarkan garis hentian berjalan dengan harga.

  2. Menambah indikator untuk menilai trend dan mengelakkan berdagang tanpa arah pada masa gegaran. Sebagai contoh, penapisan dengan indikator seperti DMI, MACD.

  3. Menggunakan pengesanan semula sejarah dan pengoptimuman parameter, pilih kombinasi parameter terbaik. Dalam cakera hidup, kesan parameter juga dikesan dan pengoptimuman dinamik dilakukan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dari segi berikut:

  1. Mengoptimumkan parameter purata bergerak, memilih bilangan kitaran terbaik. Anda boleh mencari kombinasi parameter terbaik dengan mengkaji semula purata bergerak dari pelbagai bilangan kitaran.

  2. Tambah indikator penghakiman trend untuk melakukan saringan. Contohnya, indikator RSI untuk menilai overbought dan oversold, Brinband untuk menilai terobosan saluran, dan lain-lain.

  3. Menggunakan purata bergerak yang menyesuaikan diri. Mengoptimumkan parameter purata bergerak dalam masa nyata mengikut perubahan dan turun naik pasaran, menjadikannya lebih sesuai dengan keadaan pasaran semasa.

  4. Menggabungkan model pembelajaran mesin untuk menilai kebarangkalian trend. Membina model kebarangkalian untuk menilai kebarangkalian kejayaan penembusan, membantu sistem keputusan menentukan masa kemasukan.

  5. Mengoptimumkan strategi hentikan kerugian, supaya hentikan kerugian lebih baik untuk mengesan harga. Sebagai contoh, hentikan kerugian traillig atau hentikan kemerosotan automatik, supaya garis hentikan kerugian lebih pintar.

ringkaskan

Strategi Moving Average Band adalah salah satu strategi trend-tracking yang lebih biasa. Ia menggabungkan trend garis panjang dan menengah dengan garis cepat dan perlahan, dan menetapkan mekanisme penapisan penembusan berturut-turut untuk memutuskan masuk. Strategi ini menggabungkan trend-tracking dan penilaian overbought dan oversold, dengan pengoptimuman parameter dan penguatan indikator, dapat meningkatkan keberkesanan penggunaan lebih lanjut.

Kod 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)