Tài nguyên đang được tải lên... tải...

Bollinger Bands và Chiến lược giao dịch định lượng dựa trên VWAP

Tác giả:ChaoZhang, Ngày: 2024-01-04 15:59:46
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số Bollinger Bands (BB) và Volume Weighted Average Price (VWAP) để đưa ra quyết định nhập và xuất.

Chiến lược logic

Chiến lược này chủ yếu dựa trên các quy tắc sau đây cho nhập cảnh và xuất cảnh:

  1. Đường EMA nhanh trên đường EMA chậm là điều kiện tiên quyết để đánh giá xu hướng

  2. Mua khi giá đóng cửa trên VWAP cho thấy giá tăng

  3. Nhập dài nếu giá đóng giảm xuống dưới BB dưới đường băng dưới trong 10 thanh cuối cùng cho thấy sự bất thường của giá

  4. Bán khi giá đóng cửa vượt quá dải trên BB cho thấy sự đảo ngược giá

Cụ thể, nó đầu tiên đánh giá xem EMA 50 ngày có trên EMA 200 ngày để xác định xu hướng tổng thể. Sau đó kết hợp với VWAP để đánh giá xem giá có trong xu hướng tăng ngắn hạn hay không. Cuối cùng sử dụng Bollinger Bands để phát hiện sự sụt giảm bất thường ngắn hạn như cơ hội nhập cảnh.

Quy tắc thoát là đơn giản, thoát khi giá vượt quá dải trên BB cho thấy sự đảo ngược giá.

Phân tích lợi thế

Chiến lược này kết hợp nhiều chỉ số để tăng tính hợp lệ của tín hiệu nhập cảnh. Sử dụng EMA để đánh giá xu hướng tổng thể tránh giao dịch chống lại xu hướng. VWAP nắm bắt đà tăng ngắn hạn. BB phát hiện các bất thường ngắn hạn như thời gian cho các mục nhập.

Phân tích rủi ro

  1. Đánh giá xu hướng EMA không chính xác gây ra giao dịch chống lại xu hướng
  2. VWAP thích hợp hơn cho dữ liệu hàng giờ hoặc trong ngày, kém hiệu quả hơn trong dữ liệu hàng ngày
  3. Cài đặt tham số BB không chính xác, tín hiệu bị thiếu trong dải quá rộng hoặc hẹp

Để giảm thiểu rủi ro, các tham số của EMA và BB có thể được điều chỉnh. Kiểm tra các chỉ số khác nhau để phát hiện xu hướng. Sử dụng VWAP trong khung thời gian ngắn hơn. Tối ưu hóa tham số BB để có băng thông tốt nhất.

Cơ hội gia tăng

  1. Kiểm tra các chỉ số khác để phát hiện xu hướng như MACD
  2. Tối ưu hóa các thông số EMA và BB
  3. Thêm cơ chế dừng lỗ
  4. Thêm bộ lọc để tránh tín hiệu sai
  5. Kiểm tra hậu quả trên các sản phẩm và khung thời gian khác nhau

Kết luận

Chiến lược này kết hợp BB và VWAP để phát hiện sự bất thường về giá trong ngắn hạn như thời gian nhập cảnh. Sử dụng EMA để xác định xu hướng tổng thể tránh giao dịch chống lại xu hướng. Nó có thể nhanh chóng phát hiện đà ngắn hạn. Thích hợp cho giao dịch trong ngày và ngắn hạn. Tăng cường thêm sự ổn định và lợi nhuận bằng cách tối ưu hóa các thông số và kết hợp thêm logic.


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



Thêm nữa