Đây là một chiến lược theo dõi đà dựa trên Bollinger Bands. Nó kết hợp Bollinger Bands để đánh giá xu hướng thị trường và điểm đảo ngược, và đặt các vị trí dài và ngắn để theo dõi biến động thị trường.
Chỉ số cốt lõi của chiến lược này là Bollinger Bands, bao gồm dải giữa, dải trên và dải dưới. Dải giữa là trung bình động của n ngày, và dải trên và dải dưới là sự thay đổi của dải giữa cộng/từ độ lệch chuẩn. Khi giá tiếp cận dải trên/dải dưới, nó được coi là một tín hiệu mua quá mức/bán quá mức. Chiến lược kết hợp độ lệch xu hướng làm cơ sở cho các vị trí mở, tức là mở các vị trí khi giá vượt qua dải giữa theo hướng ngược lại. Để ngăn ngừa tổn thất gây ra bởi các đột phá sai, chiến lược yêu cầu chiều rộng của đột phá lớn hơn mức trung bình. Điều kiện đóng là giá quay trở lại sau khi vượt qua dải giữa.
Chiến lược này cũng bao gồm cả các mục nhập theo xu hướng và các mục nhập đảo ngược trung bình, tương ứng với các cơ hội giao dịch khác nhau. Các mục nhập theo xu hướng yêu cầu dải giữa là tham chiếu hỗ trợ / kháng cự và tạo ra các bước thoát lệch. Các mục nhập đảo ngược trung bình đảo ngược trực tiếp gần các dải Bollinger trên / dưới. Chiến lược kết hợp hai loại tín hiệu này và có thể thực hiện cả hoạt động theo dõi xu hướng và đảo ngược.
Chiến lược này kết hợp các đặc điểm mua quá mức / bán quá mức của Bollinger Bands với phán đoán điểm đảo ngược. Điều này cho phép nó áp dụng cho cả thị trường xu hướng và dao động, nắm bắt các loại cơ hội giao dịch khác nhau. Cài đặt thoát lỗ dừng ngăn chặn lỗ mở rộng. Ngoài ra, khả năng giao dịch cả dài và ngắn làm tăng khả năng áp dụng của chiến lược.
So với các chiến lược Bollinger đơn giản, logic xu hướng bổ sung làm cho các mục nhập của chiến lược này ổn định hơn, và nó cũng nắm bắt các cơ hội đảo ngược. Điều này cải thiện tỷ lệ tín hiệu-đồn. Ngoài ra, giao dịch cả hai hướng sử dụng các cơ hội giao dịch đầy đủ hơn trên các tình huống thị trường khác nhau.
Chiến lược này chủ yếu dựa trên các đặc điểm mua quá mức / bán quá mức của Bollinger Bands. Vì vậy, khi có biến động giá cực đoan, chiều rộng của Bollinger Bands tiếp tục mở rộng, điều này có thể dễ dàng dẫn đến nhiều giao dịch thua lỗ. Đây là một điểm rủi ro tiềm ẩn. Ngoài ra, vẫn có một số sự không chắc chắn và lỗi trong các phán quyết đảo ngược, gây ra các mục nhập và dừng thất bại.
Đối với sự thất bại của Bollinger Bands, chúng ta có thể rút ngắn tham số n để làm cho các dải nhạy cảm hơn, hoặc giảm chiều rộng dải để giảm khả năng mất mát.
Các hướng chính để tối ưu hóa chiến lược này bao gồm:
Chiến lược này làm cho việc mở rộng và tối ưu hóa hiệu quả cho các chiến lược Bollinger tiêu chuẩn. Sự lệch xu hướng bổ sung cải thiện sự ổn định và sử dụng các cơ hội đảo ngược tốt. Khả năng giao dịch cả hai hướng và dừng lỗ cũng làm cho chiến lược mạnh mẽ hơn. Những cải tiến hơn nữa có thể đạt được thông qua tối ưu hóa tham số và thêm nhiều bộ lọc.
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-27 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") fromyear = input(2018, defval = 2018, 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") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body body = abs(close - open) abody = ema(body, 30) //Signals bar = close > open ? 1 : close < open ? -1 : 0 up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset up2 = close <= lower and usect dn2 = close >= upper and usect exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()