Strategi penembusan menaik berdasarkan Bollinger Bands dan VWAP


Tarikh penciptaan: 2024-02-06 14:36:26 Akhirnya diubah suai: 2024-02-06 14:36:26
Salin: 1 Bilangan klik: 885
1
fokus pada
1617
Pengikut

Strategi penembusan menaik berdasarkan Bollinger Bands dan VWAP

Gambaran keseluruhan

Strategi ini menggunakan indikator Burin untuk mengesan VWAP, mengambil strategi multi-head jika VWAP mendaki menerobos jalur tengah Burin, dan mengambil strategi multi-head jika VWAP turun menerobos jalur bawah Burin. Strategi ini juga memperkenalkan Pivot Point sebagai penyokong utama sebagai penentuan tambahan untuk isyarat masuk, yang dapat menyaring beberapa penembusan palsu.

Prinsip Strategi

  1. Hitung nilai VWAP.
  2. Mengira VWAP pada jalur Brin, yang terdiri daripada jalur atas, tengah, dan bawah.
  3. Tentukan sama ada VWAP akan menembusi ke arah atas ke arah Brin Belt dan jika harga lebih tinggi daripada Pivot Point sokongan utama, masuk dengan strategi multi-head.
  4. Hentikan Kerosakan ditetapkan sebagai 5%
  5. Jika VWAP ke bawah menembusi Brin ke bawah, ia dianggap sebagai pengesahan dan keluar dari kedudukan kosong; jika stop loss dicetuskan, ia juga keluar dari lapangan.

Analisis kelebihan

  1. VWAP mempunyai keupayaan untuk menjejaki trend yang kuat, digabungkan dengan pengaktifan Brinband yang dapat menilai trend dengan tepat.
  2. Menambah Pivot Point sebagai syarat tambahan, boleh menyaring banyak penembusan palsu dan mengelakkan kerugian yang tidak perlu.
  3. Menggunakan strategi keluar-bahagian untuk mengunci sebahagian daripada keuntungan dan mengawal risiko.
  4. Hasil tinjauan menunjukkan bahawa strategi ini berfungsi dengan baik dalam pasaran lembu dan mempunyai kestabilan yang tinggi.

Analisis risiko

  1. Dalam keadaan yang tidak menentu, kemungkinan besar akan berlaku penembusan palsu yang menyebabkan kerugian.
  2. Pivot Point tidak dapat sepenuhnya mengelakkan penembusan palsu, dan lebih banyak indikator perlu digabungkan untuk memfilter isyarat.
  3. Sebahagian daripadanya meningkatkan frekuensi operasi dan kos transaksi.
  4. Ia tidak akan berfungsi dengan baik dalam pasaran beruang, dan ia memerlukan kawalan risiko yang baik.

Arah pengoptimuman

  1. Ia boleh digabungkan dengan MACD, KDJ dan lain-lain untuk membantu penapisan masuk dan keluar isyarat.
  2. Anda boleh mencari kombinasi parameter yang optimum dengan mengoptimumkan panjang dan perbezaan piawai tali pinggang Brin.
  3. Algoritma pembelajaran mesin boleh diperkenalkan untuk mengoptimumkan parameter Brin secara dinamik.
  4. Anda boleh menguji pelbagai tahap penghentian untuk mencari titik penghentian yang optimum.
  5. Anda boleh menyertai mekanisme penyingkiran bersesuaian, menyesuaikan keuntungan sasaran mengikut turun naik pasaran.

ringkaskan

Strategi ini secara keseluruhan adalah sistem penembusan yang stabil. Cara operasi standard, ruang optimasi parameter yang besar, sesuai untuk perdagangan kuantitatif. Pada masa yang sama, perlu berhati-hati untuk mengawal risiko, mencegah kerugian yang disebabkan oleh keadaan yang tidak biasa. Secara keseluruhan, ia adalah strategi jenis penembusan yang patut dikaji dengan mendalam dan terus dioptimumkan.

Kod sumber strategi
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )