Chiến lược định lượng dựa trên đảo ngược dải Bollinger

Tác giả:ChaoZhang, Ngày: 2023-11-22
Tags:

img

Tổng quan

Chiến lược này được gọi là Bollinger Band Reversal Based Quantitative Strategy. Nó sử dụng các đường ray trên và dưới của Bollinger Bands để xác định các bước vào và ra. Khi giá gần đường ray dưới của các dải và cho thấy dấu hiệu đột phá xuống, nó cho thấy giá có thể đang đảo ngược, vì vậy đi dài. Khi giá tăng lên đường ray trên, nó cho thấy giá có thể đảo ngược xuống, vì vậy đi ngắn.

Chiến lược logic

Chiến lược này sử dụng chỉ số RSI để xác định các mục nhập dài. Cụ thể, nó kiểm tra xem giá đóng của thanh gần đây nhất có thấp hơn giá thấp nhất của 6 thanh trước đó không, trong khi đó Bollinger Band Width (BBW) lớn hơn ngưỡng và tỷ lệ Bollinger Band (BBR) nằm trong phạm vi. Nếu các tiêu chí này được đáp ứng, nó cho thấy giá có thể đảo ngược, vì vậy hãy mua dài.

Khi chỉ số RSI vượt trên 70, cho thấy giá đã quá nóng, hãy đóng vị trí dài.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là sử dụng các đường ray phía trên và phía dưới của Bollinger Bands để xác định các mục nhập. Khi BB đảo ngược hướng, đi dài hoặc ngắn để nắm bắt các cơ hội đảo ngược ngắn hạn. So với các chiến lược RSI đơn giản, chiến lược này có các tiêu chí thận trọng hơn cho các mục nhập, do đó tránh các giao dịch sai.

Ngoài ra, chiến lược nhạy cảm với các thông số. Bằng cách điều chỉnh BBW và BBR, nó có thể được tối ưu hóa cho các sản phẩm khác nhau và đạt được kết quả tốt hơn.

Phân tích rủi ro

Rủi ro chính là BB không dự đoán hoàn hảo sự đảo ngược giá. Nếu thời gian không phù hợp, nó dễ dàng dẫn đến việc bỏ lỡ các mục nhập tốt nhất hoặc tổn thất thay đổi.

Ngoài ra, biến động ngắn hạn có thể gây ra các bước vào và ra thường xuyên, làm tăng chi phí từ hoa hồng và trượt.

Hướng dẫn tối ưu hóa

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Tối ưu hóa các thông số. Kiểm tra và điều chỉnh BBW, BBR và các thông số khác tinh tế hơn cho các sản phẩm khác nhau.

  2. Thêm các cơ chế dừng lỗ, chẳng hạn như dừng lỗ sau và dừng lỗ thời gian, để hạn chế lỗ tối đa.

  3. Kết hợp các chỉ số khác, chẳng hạn như KDJ và MACD, để làm cho các mục đáng tin cậy hơn.

  4. Cải thiện logic thoát. Việc thoát hiện tại là đơn giản. Có thể tối ưu hóa với lợi nhuận sau hoặc thoát dựa trên biến động.

Kết luận

Chiến lược này sử dụng các đặc điểm của Bollinger Bands để xác định các điểm đảo ngược tiềm năng cho các bước vào và ra. So với các chỉ số đơn như RSI, nó có thời gian chính xác hơn. Với điều chỉnh tham số, dừng lỗ và lấy lợi nhuận, nó có thể đáng tin cậy hơn. Nhưng dự đoán của BB không hoàn hảo, vì vậy vẫn có một số tình cờ trong hiệu suất.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//study(title = "Bolinger strategy", overlay=true)
strategy("Bolinger strategy",currency="SEK",default_qty_value=10000,default_qty_type=strategy.cash,max_bars_back=50)
len = 5
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


bbw3level = input(15, title="bbw3")
bbr3level = input(0.45, title="bbr3level")
bbrlower = input(0.4480, title="bbrlower")
bbrhigher = input(0.4560, title="bbrhigher")
sincelowestmin = input(7, title="sincelowestmin")
sincelowestmax = input(57, title="sincelowestmax")


length = input(20, minval=1)
mult = 20
src3 = close[3]
basis3 = sma(src3, length)
dev3 = mult * stdev(src3, length)
upper3 = basis3 + dev3
lower3 = basis3 - dev3
bbr3 = (src3 - lower3)/(upper3 - lower3)
bbw3 = (upper3-lower3)/basis3*100


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
bbw = (upper-lower)/basis*100

criteriamet = 0
crossUnderB0 = crossunder(bbr,0)

since_x_under = barssince(crossUnderB0)


sincelowest = barssince(close[6] > close[3] and close[5] > close[3] and close[4] > close[3] and close[2] > close[3] and close[1] > close[3] and close > close[3] and bbw3 > bbw3level and bbr3 < bbr3level) //  and bbr3 < 0 

if sincelowest > sincelowestmin and sincelowest < sincelowestmax and bbr > bbrlower and bbr < bbrhigher
	criteriamet := 1
else
	criteriamet := 0	
//plot (criteriamet)

//exit 
exitmet = 0
if rsi > 70
	exitmet := 1
else
	exitmet := 0

if criteriamet == 1
	strategy.entry("long", strategy.long)
if exitmet == 1
	strategy.close("long")



Thêm nữa