Chiến lược này là một chiến lược giao dịch được thiết kế dựa trên mô hình sai lệch chuẩn kép Bollinger Bands. Nó sử dụng các đường ray trên và dưới của Bollinger Bands và một và hai sai lệch chuẩn làm tín hiệu giao dịch. Nó đi dài khi giá vượt qua đường ray trên và đi ngắn khi giá vượt qua đường ray dưới. Chiến lược cũng sử dụng một và hai sai lệch chuẩn làm đường dừng lỗ.
Chiến lược đầu tiên tính toán đường ray giữa, đường ray trên và đường ray dưới của Bollinger Bands. đường ray giữa là SMA của CLOSE, đường ray trên là đường ray giữa + 2độ lệch chuẩn, và đường ray dưới là đường ray giữa - 2đường lệch chuẩn. Khi giá vượt qua đường ray trên, một tín hiệu mua được tạo ra để đi dài. Khi giá vượt qua đường ray dưới, một tín hiệu bán được tạo ra để đi ngắn. Ngoài ra, chiến lược cũng vẽ ra các đường giữa đường ray + 1 đường lệch chuẩn và đường giữa đường ray - 1 đường lệch chuẩn. Chúng được sử dụng làm đường dừng lỗ.
Nói chung, chiến lược này là một chiến lược Bollinger Bands breakout điển hình. Nó sử dụng sai lệch tiêu chuẩn kép để tăng độ nghiêm ngặt của phán đoán tín hiệu và áp dụng hai đường dừng lỗ để kiểm soát rủi ro một cách tích cực. Chiến lược có một số không gian tối ưu hóa tham số. Bằng cách điều chỉnh các tham số như khoảng thời gian giữa đường ray và nhân sai lệch tiêu chuẩn, có thể đạt được hiệu suất chiến lược tốt hơn.
/*backtest start: 2022-12-11 00:00:00 end: 2023-12-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Bollinger Bands: Madrid : 14/SEP/2014 11:07 : 2.0 // This displays the traditional Bollinger Bands, the difference is // that the 1st and 2nd StdDev are outlined with two colors and two // different levels, one for each Standard Deviation strategy(shorttitle='MBB', title='Bollinger Bands', overlay=true) src = input(close) length = input.int(34, minval=1) mult = input.float(2.0, minval=0.001, maxval=50) basis = ta.sma(src, length) dev = ta.stdev(src, length) dev2 = mult * dev upper1 = basis + dev lower1 = basis - dev upper2 = basis + dev2 lower2 = basis - dev2 colorBasis = src >= basis ? color.blue : color.orange pBasis = plot(basis, linewidth=2, color=colorBasis) pUpper1 = plot(upper1, color=color.new(color.blue, 0), style=plot.style_circles) pUpper2 = plot(upper2, color=color.new(color.blue, 0)) pLower1 = plot(lower1, color=color.new(color.orange, 0), style=plot.style_circles) pLower2 = plot(lower2, color=color.new(color.orange, 0)) fill(pBasis, pUpper2, color=color.new(color.blue, 80)) fill(pUpper1, pUpper2, color=color.new(color.blue, 80)) fill(pBasis, pLower2, color=color.new(color.orange, 80)) fill(pLower1, pLower2, color=color.new(color.orange, 80)) // Entry conditions longCondition = ta.crossover(close, upper1) shortCondition = ta.crossunder(close, lower1) // Entry and exit strategy strategy.entry("Buy", strategy.long, when=longCondition) strategy.entry("Sell", strategy.short, when=shortCondition) strategy.close("Buy", when=shortCondition) strategy.close("Sell", when=longCondition)