
Đây là một chiến lược sử dụng chỉ số BRI để giao dịch. Chiến lược này nhằm mục đích sử dụng chỉ số BRI để xác định thời điểm biến động mạnh của giá và đưa ra quyết định mua hoặc bán phù hợp.
Chiến lược này tính toán đường viền trên, đường viền giữa và đường viền dưới của vòng Brin để xác định liệu giá hiện tại có nằm trong phạm vi dao động để xác định thời gian để đặt hoặc bán. Khi giá gần đường viền trên, chiến lược được coi là khu vực giới hạn đa đầu, chiến lược chọn bán vị trí đồng; Khi giá gần đường viền dưới, nó được coi là khu vực giới hạn đầu trống, chiến lược chọn mua và đặt.
Ngoài ra, chiến lược cũng đưa ra 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 quyết định mua hoặc bán tương ứng. Cụ thể, logic chiến lược như sau:
Đây là logic giao dịch cơ bản của chiến lược này. Bằng cách sử dụng đặc tính của Brin Band, kết hợp xu hướng và yếu tố đảo ngược, chiến lược cố gắng nắm bắt điểm đảo ngược để giao dịch khi biến động tăng lên.
Chiến lược này có một số ưu điểm so với chiến lược trung bình di chuyển thông thường:
Nhìn chung, chiến lược này kết hợp tốt hơn giữa BRI và giá trị thực thể, giao dịch tại các điểm đảo ngược hợp lý, đảm bảo một mức độ lợi nhuận nhất định và kiểm soát rủi ro.
Tuy nhiên, chiến lược này cũng có một số rủi ro, đặc biệt là:
Theo đó, trong tương lai, có thể tối ưu hóa các khía cạnh sau:
Chiến lược này nói chung là một mẫu chiến lược giao dịch Brin-belt điển hình. Nó tránh được những nhược điểm của việc chỉ sử dụng Brin-belt dễ dàng tạo ra nhiều giao dịch không hiệu quả, bằng cách đưa ra phán đoán đảo ngược xu hướng để lọc tín hiệu hiệu quả, về mặt lý thuyết có thể đạt được hiệu suất chiến lược tốt hơn. Tuy nhiên, việc thiết lập tham số và lọc tín hiệu vẫn cần được tối ưu hóa và cải thiện hơn nữa để làm cho tham số chiến lược trở nên tinh tế và giảm tỷ lệ 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()