Bollinger Bands dan Strategi Perdagangan Kuantitatif berbasis VWAP

Penulis:ChaoZhang, Tanggal: 2024-01-04 15:59:46
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator Bollinger Bands (BB) dan Volume Weighted Average Price (VWAP) untuk membuat keputusan masuk dan keluar.

Logika Strategi

Strategi ini terutama didasarkan pada aturan berikut untuk masuk dan keluar:

  1. Garis EMA cepat di atas garis EMA lambat sebagai prasyarat untuk menilai tren

  2. Beli saat harga tutup di atas VWAP yang menunjukkan harga naik

  3. Masukkan panjang jika harga penutupan turun di bawah BB band bawah dalam 10 bar terakhir yang menunjukkan anomali harga

  4. Jual saat harga penutupan melebihi band atas BB yang menunjukkan pembalikan harga

Secara khusus, pertama-tama menilai apakah EMA 50 hari di atas EMA 200 hari untuk menentukan tren keseluruhan. Kemudian dikombinasikan dengan VWAP untuk menilai apakah harga berada dalam tren naik jangka pendek. Akhirnya menggunakan Bollinger Bands untuk mendeteksi penurunan anomali jangka pendek sebagai peluang masuk.

Aturan keluar sederhana, keluar ketika harga naik di atas BB band atas menunjukkan pembalikan harga.

Analisis Keuntungan

Strategi ini menggabungkan beberapa indikator untuk meningkatkan validitas sinyal masuk. Menggunakan EMA untuk menilai tren keseluruhan menghindari perdagangan melawan tren. VWAP menangkap momentum naik jangka pendek. BB mendeteksi anomali jangka pendek sebagai waktu untuk entri.

Analisis Risiko

  1. Penilaian tren EMA yang tidak akurat menyebabkan perdagangan melawan tren
  2. VWAP lebih cocok untuk data per jam atau intraday, kurang efisien dalam data harian
  3. Pengaturan parameter BB yang tidak benar, sinyal yang hilang terlalu lebar atau sempit

Untuk mengurangi risiko, parameter EMA dan BB dapat disesuaikan. Uji indikator yang berbeda untuk deteksi tren. Gunakan VWAP dalam jangka waktu yang lebih singkat. Optimalkan parameter BB untuk bandwidth terbaik.

Peluang Peningkatan

  1. Uji indikator lain untuk mendeteksi tren seperti MACD
  2. Mengoptimalkan parameter EMA dan BB
  3. Tambahkan mekanisme stop loss
  4. Tambahkan filter untuk menghindari sinyal palsu
  5. Backtest pada berbagai produk dan kerangka waktu

Kesimpulan

Strategi ini menggabungkan BB dan VWAP untuk mendeteksi anomali harga jangka pendek sebagai waktu masuk. Menggunakan EMA untuk menentukan tren keseluruhan menghindari perdagangan melawan tren. Ini dapat dengan cepat menemukan momentum jangka pendek. Cocok untuk perdagangan intraday dan jangka pendek. Lebih lanjut meningkatkan stabilitas dan profitabilitas dengan mengoptimalkan parameter dan menggabungkan lebih banyak logika.


/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 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/
// © mohanee

//@version=4
strategy(title="VWAP and BB strategy [EEMANI]", overlay=true,pyramiding=2, default_qty_value=3, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)
//This strategy combines VWAP and BB indicators
//BUY RULE
//1. EMA50 > EMA 200
//2. if current close > vwap session  value 
//3. check if  price dipped BB lower band for any of last 10 candles
//EXIT RULE
//1. price closes above BB upper band   
//STOP LOSS EXIT
//1. As configured --- default is set to 5%

is_price_dipped_bb(pds,source1) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  close[i]<source1) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped
    
// variables  BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)

//BB

smaLength = input(20, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")



//addOnDivergence = input(true,title="Add to existing on Divergence")
//exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"],      defval="BB")

//bbSource = input(title="BB  source", type=input.string, options=["close", "vwap"],      defval="close")
     
//vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session")
stopLoss = input(title="Stop Loss%", defval=5, minval=1)

//variables  END




longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)


vwapVal=vwap(close)



// Drawings

//plot emas
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(shortEMAval, color = color.green, linewidth = 1, transp=0)


//bollinger calculation 
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(bbsrc, smaLength)
dev = mult * stdev(bbsrc, smaLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
//bollinger calculation 

//plot bb
//plot(basis, "Basis", color=#872323, 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=#198787, transp=95)


plot(vwapVal, color = color.purple, linewidth = 1, transp=0)


// Colour background

barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na)
  

//longCondition=  shortEMAval > longEMAval and  close>open and  close>vwapVal
longCondition= shortEMAval >= longEMAval  and  close>=vwapVal and close>open  //      close>vwapVal   and   



//Entry
strategy.entry(id="VWAP_BB LE", comment="VB LE" , long=true,  when= longCondition and  is_price_dipped_bb(10,lowerBand) )  //and strategy.position_size<1 

//add to the existing position
//strategy.entry(id="VWAP_RSI LE", comment="VR LE Add" , long=true,  when= addOnDivergence==true and strategy.position_size>=1 and close<strategy.position_avg_price   and (close<lowerBand or  low<lowerBand) and rsiVal>rsi_buy_line)

barcolor(strategy.position_size>=1  ? color.blue: na)



strategy.close(id="VWAP_BB LE", comment="TP Exit VB LE",   when=crossover(close,upperBand) )

//stoploss
stopLossVal =   strategy.position_avg_price * (1-(stopLoss*0.01) )
strategy.close(id="VB LE", comment="SL Exit",   when= close < stopLossVal)



Lebih banyak