Đây là một chiến lược giao dịch sử dụng Bollinger Bands. Chiến lược nhằm mục đích xác định các cơ hội khi giá dao động mạnh mẽ bằng cách sử dụng Bollinger Bands và đưa ra quyết định mua hoặc bán tương ứng.
Chiến lược tính toán dải trên, dải giữa và dải dưới của Bollinger Bands để xác định xem giá hiện tại có nằm trong phạm vi biến động và do đó đưa ra quyết định về việc mở hoặc đóng các vị trí. Khi giá tiếp cận dải trên, nó được coi là điểm cực cho các vị trí dài và chiến lược chọn đóng các vị trí dài. Khi giá rơi gần dải dưới, nó được coi là điểm cực cho các vị trí ngắn và chiến lược chọn mở các vị trí dài.
Ngoài ra, chiến lược cũng giới thiệu các yếu tố đảo ngược xu hướng. Nếu có tín hiệu đảo ngược, nó cũng sẽ kích hoạt các quyết định mua hoặc bán tương ứng. Cụ thể, logic của chiến lược là như sau:
Điều trên là logic giao dịch cơ bản của chiến lược này. Bằng cách sử dụng các đặc điểm của Bollinger Bands và kết hợp các yếu tố xu hướng và đảo ngược, chiến lược cố gắng nắm bắt các điểm đảo ngược khi biến động tăng lên.
So với các chiến lược trung bình động thông thường, chiến lược này có những lợi thế sau:
Nói chung, chiến lược này kết hợp các dải Bollinger và thanh giá tương đối tốt. Nó giao dịch ở các điểm đảo ngược hợp lý để đảm bảo mức lợi nhuận nhất định trong khi kiểm soát rủi ro.
Tuy nhiên, vẫn có một số rủi ro với chiến lược này:
Theo đó, tối ưu hóa trong tương lai có thể tập trung vào:
Kết luận, đây là một mẫu chiến lược giao dịch Bollinger Bands điển hình. Nó tránh các giao dịch không hiệu quả quá mức phổ biến cho việc sử dụng Bollinger Bands một mình bằng cách giới thiệu phán đoán đảo ngược xu hướng để lọc tín hiệu, về mặt lý thuyết có thể dẫn đến hiệu suất chiến lược tốt. Nhưng các thông số và lọc tín hiệu vẫn cần tối ưu hóa và cải thiện hơn nữa để vững chắc và giảm các phán đoán sai.
/*backtest start: 2023-12-18 00:00:00 end: 2024-01-17 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true ) //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 close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and close <= basis and close > 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) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()