Strategi Sistem Pembalikan Guncangan EMA

Penulis:ChaoZhang, Tarikh: 2023-10-18 12:23:13
Tag:

img

Ringkasan

Strategi ini menggunakan sistem purata bergerak untuk menentukan hala tuju trend dan menggabungkan indeks turun naik untuk mengelakkan pasaran berayun turun naik rendah, dengan keluar candelier untuk menguruskan perdagangan.

Prinsip

Strategi ini menilai arah trend dengan membandingkan purata bergerak pantas dan perlahan. Ia pergi lama apabila MA pantas melintasi di atas MA perlahan, dan pergi pendek apabila MA pantas melintasi di bawah MA perlahan. Untuk mengelakkan pasaran berayun, strategi ini juga menggabungkan Bollinger Bands. Ia menghasilkan isyarat perdagangan apabila kadar perubahan lebar BB melebihi ambang. Akhirnya, strategi ini menggunakan keluar Chandelier sebagai stop loss untuk mengelakkan terperangkap dalam pasaran yang terikat julat.

Secara khusus, logik dagangan adalah seperti berikut:

  1. Mengira MA pantas (default 20 hari) dan MA perlahan (default 50 hari).

  2. Mengira kadar perubahan lebar Bollinger Band (default 40 hari, 2 penyimpangan standard).

  3. Pergi panjang apabila MA pantas melintasi di atas MA perlahan dan kadar perubahan lebar BB melebihi ambang lalai 9%.

  4. Pergi pendek apabila MA pantas melintasi di bawah MA perlahan dan kadar perubahan lebar BB melebihi ambang lalai 9%.

  5. Mengira Chandelier berhenti panjang dan pendek.

  6. Henti panjang adalah tertinggi tinggi - ATR * pengganda. Henti pendek adalah terendah rendah + ATR * pengganda.

Kelebihan

  1. Sistem MA secara berkesan mengesan trend.

  2. Perubahan lebar BB menapis turun turun, mengurangkan perdagangan yang tidak perlu.

  3. Chandelier keluar tepat pada masanya berhenti kehilangan mengelakkan terperangkap.

  4. Pelbagai parameter yang boleh diselaraskan untuk pengoptimuman.

  5. Logik yang jelas, mudah difahami dan dilaksanakan.

Risiko

  1. MA lag mungkin terlepas pembalikan yang cepat.

  2. Parameter BB yang tidak betul boleh menapis isyarat yang sah.

  3. Penarikan lilin yang berlebihan menyebabkan perdagangan berlebihan.

  4. Pengoptimuman parameter yang tidak mencukupi membawa kepada risiko memegang.

  5. Tidak dapat menyesuaikan diri dengan perubahan pasaran yang melampau daripada peristiwa besar.

Pengoptimuman

  1. Uji gabungan MA yang berbeza untuk mencari parameter optimum.

  2. Uji tempoh BB yang berbeza untuk penapis volatiliti terbaik.

  3. Tambah penunjuk lain untuk pengesahan kemasukan.

  4. Memperkenalkan hentian dinamik untuk lebih mengesan pasaran.

  5. Menggunakan pembelajaran mesin untuk mengoptimumkan automatik untuk pasaran yang berubah.

Ringkasan

Strategi ini mengintegrasikan sistem MA, penunjuk BB dan keluar candelier untuk membentuk sistem trend berikut yang agak stabil. Pengoptimuman parameter yang betul dapat mencapai hasil yang baik. Tetapi risiko pembalikan trend dan osilasi tetap ada. Pembelajaran mesin dapat meningkatkan ketahanan. Secara keseluruhan strategi yang baik untuk pembelajaran.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)

Lebih lanjut