Strategi Breakout Bollinger Band Berdasarkan VWAP

Penulis:ChaoZhang, Tanggal: 2024-02-06 14:36:26
Tag:

img

Gambaran umum

Strategi ini menggunakan Bollinger Bands untuk melacak VWAP. Ini mengadopsi posisi panjang ketika VWAP melanggar di atas band tengah, dan menutup posisi ketika VWAP melanggar di bawah band bawah.

Logika Strategi

  1. Menghitung VWAP.
  2. Menghitung Bollinger Bands dari VWAP, termasuk band atas, tengah dan bawah.
  3. Mengambil posisi panjang ketika VWAP melanggar band tengah dan harga berada di atas Pivot Point.
  4. Tetapkan stop loss pada 5%.
  5. Jika VWAP pecah di bawah band bawah, tutup posisi panjang.

Analisis Keuntungan

  1. VWAP memiliki kemampuan pelacakan tren yang kuat.
  2. Menambahkan Pivot Point menyaring keluar breakout palsu, menghindari kerugian yang tidak perlu.
  3. Pengecualian parsial dalam beberapa keuntungan dan mengontrol risiko.
  4. Tes balik menunjukkan kinerja yang baik di pasar bull dengan stabilitas yang baik.

Analisis Risiko

  1. Cenderung kehilangan dari kegagalan palsu di pasar yang terikat rentang.
  2. Pivot Points tidak bisa sepenuhnya menghindari sinyal palsu.
  3. Peningkatan frekuensi perdagangan mengarah pada biaya transaksi yang lebih tinggi.
  4. Tidak berjalan dengan baik di pasar beruang.

Arahan Optimasi

  1. Tambahkan indikator seperti MACD, KDJ untuk menyaring sinyal.
  2. Mengoptimalkan parameter BB melalui backtest.
  3. Gunakan pembelajaran mesin untuk secara dinamis mengoptimalkan parameter BB.
  4. Uji tingkat stop loss yang berbeda untuk menemukan yang optimal.
  5. Tambahkan adaptif mengambil keuntungan berdasarkan volatilitas pasar.

Kesimpulan

Sistem breakout yang stabil yang cocok untuk perdagangan algoritma. Perhatian diperlukan pada pengendalian risiko. Dengan penelitian dan optimalisasi lebih lanjut, ini bisa menjadi strategi breakout yang sangat baik.


/*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 )

Lebih banyak