Chiến lược đảo ngược Bollinger Bands nâng cao

Tác giả:ChaoZhang, Ngày: 2023-09-21 11:45:37
Tags:

Tổng quan

Chiến lược này sử dụng chỉ số Bollinger Bands nâng cao để xác định các điểm đảo ngược giá, đi dài khi giá tiếp cận dải thấp hơn và đóng vị trí khi nến xanh xuất hiện, nhằm mục đích nắm bắt sự đảo ngược trung bình ở dải thấp hơn.

Chiến lược logic

  1. Tính toán các tham số BB tiêu chuẩn cơ sở, dev, BB trên và BB dưới.

  2. Tính toán SMA và dải lệch upex2 và dnex2 ở tỷ lệ phần trăm nhất định từ SMA.

  3. Lấy trung bình của upex2, dnex2 với BB trên, BB dưới để có được upex3 và dnex3.

  4. Lấy lớn hơn của upex3 và upperBB như mới upperband upex, nhỏ hơn của dnex3 và lowerBB như mới lowerband dnex.

  5. Đi dài khi giá dưới dnex, đóng vị trí khi nến màu xanh lá cây xuất hiện (khép > mở).

Phân tích lợi thế

  1. BB nâng cao cải thiện độ nhạy của BB ban đầu đối với các tín hiệu đảo ngược trước đó.

  2. Bộ lọc chém với mô hình nến.

  3. Các nhà đầu tư cũng cho biết rằng các nhà đầu tư có thể sử dụng các loại sản phẩm này để sản xuất các sản phẩm khác nhau.

  4. Đòn bẩy có thể cấu hình, giờ giao dịch để kiểm soát rủi ro.

Phân tích rủi ro

  1. Điều chỉnh tham số BB kém có thể gây ra giao dịch quá mức hoặc bỏ lỡ cơ hội.

  2. Chỉ lâu thôi, không thể lợi nhuận từ sự đảo ngược xu hướng.

  3. Bộ lọc nến có thể bị chậm trễ, không thể thoát ra kịp thời.

  4. Dữ liệu backtest 10 năm không đủ để kiểm tra độ bền.

  5. Không thích nghi với khoảng cách lớn hoặc nhảy mở.

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

  1. Kiểm tra các kết hợp tham số để tối ưu hóa các cài đặt BB.

  2. Thêm các bộ lọc tín hiệu khác để cải thiện lợi nhuận.

  3. Xem xét các giao dịch ngắn khi giá vượt quá dải trên.

  4. Thiết lập stop loss để hạn chế lỗ giao dịch duy nhất.

  5. Phát triển tự động điều chỉnh dựa trên thị trường thay đổi.

  6. Tối ưu hóa các quy tắc nhập cảnh cho khoảng trống và nhảy.

  7. Mở rộng thời gian backtest để kiểm tra các thông số.

Tóm lại

Chiến lược này xác định các điểm đảo ngược với BB được tăng cường và đi dài gần dải thấp hơn với bộ lọc nến để lấy lợi nhuận nhanh chóng. Hiệu suất kiểm tra lại là tốt. Nhưng chỉ dài, mẫu giới hạn, điều chỉnh param cần thiết. Có thể phải đối mặt với sự suy giảm khi thị trường thay đổi.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

Thêm nữa