Strategi Bollinger Band Purata Bergerak Berbilang


Tarikh penciptaan: 2024-02-06 15:08:26 Akhirnya diubah suai: 2024-02-06 15:08:26
Salin: 4 Bilangan klik: 632
1
fokus pada
1617
Pengikut

Strategi Bollinger Band Purata Bergerak Berbilang

Gambaran keseluruhan

Strategi ini membina Brinks dengan memasukkan pelbagai jenis purata bergerak, untuk mengeksplorasi lebih banyak peluang perdagangan. Ia menawarkan 12 jenis purata bergerak yang boleh digabungkan secara fleksibel untuk mendapatkan parameter terbaik.

Prinsip Strategi

Inti strategi ini adalah menggunakan 12 jenis purata bergerak yang dimasukkan oleh pengguna, termasuk SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, dan lain-lain, untuk membentuk isyarat perdagangan. Arah tengah Brinel menggunakan purata bergerak pilihan, yang masing-masing berada di atas dan di bawah satu perbezaan piawai negatif.

Kod ini terdiri daripada:

  1. Fungsi pengiraan yang mentakrifkan 12 jenis purata bergerak, termasuk SMA, EMA, WMA dan lain-lain.
  2. Fungsi getMA, yang mengembalikan purata bergerak yang sesuai berdasarkan parameter input mav.
  3. Hitung garis tengah, garis atas, dan garis bawah dalam tali pinggang Brin. Garis tengah menggunakan fungsi getMA sebagai purata bergerak.
  4. Menggambar tali pinggang.
  5. Menjana isyarat pertumbuhan dan isyarat kosong. Harga menembusi arah atas dengan kepala kosong dan turun dengan kepala banyak.

Analisis kelebihan

Kelebihan terbesar strategi ini ialah ia menyediakan pelbagai jenis purata bergerak. Dalam keadaan pasaran yang berbeza, purata bergerak bertindak balas dengan cepat dan perlahan. Penggunaan pelbagai jenis purata bergerak dapat meningkatkan daya serap strategi.

Analisis risiko

Risiko utama strategi ini adalah bahawa purata bergerak itu sendiri bercampur-campur dengan isyarat, dan mungkin terdapat beberapa pecah palsu. Selain itu, penunjuk Brin juga sensitif terhadap perubahan harga yang tajam, dan garis tengah tidak dapat mengesan harga dengan berkesan. Ini memerlukan penggunaan jenis purata bergerak yang lebih stabil dan menyesuaikan parameter dengan betul.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Uji gabungan purata bergerak yang berbeza untuk mencari parameter terbaik dan meningkatkan kestabilan isyarat.
  2. Menambah strategi hentikan kerugian untuk memastikan kawalan kerugian yang disebabkan oleh isyarat yang salah.
  3. Gabungan dengan isyarat penapis petunjuk lain untuk mengelakkan dagangan yang kerap, seperti MACD, KD dan sebagainya.
  4. Mengoptimumkan pengurusan dana, menyesuaikan kedudukan.

ringkaskan

Strategi ini sangat inovatif secara keseluruhan, memberikan aplikasi yang lebih kaya untuk segmen indikator Brin. Dengan menyesuaikan purata bergerak portofolio, isyarat yang lebih tepat dan stabil dapat diperoleh. Ia juga memberikan pemikiran baru untuk pengoptimuman strategi Brin. Dengan menyesuaikan dan mengoptimumkan parameter, strategi ini boleh menjadi alat perdagangan yang sangat praktikal.

Kod sumber strategi
/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",minval = -500, maxval = 500)
plot(basis, "Basis",color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)