Chiến lược Supertrend Bollinger Bands là một chiến lược chỉ số dừng lại phổ biến dựa trên ATR (Mức trung bình True Range). Chiến lược này sử dụng chỉ số Supertrend để vẽ các kênh xu hướng tăng và giảm trên biểu đồ và tạo ra các tín hiệu giao dịch kết hợp với Bollinger Bands.
Chiến lược sử dụng hai thông số chính - thời gian và nhân, với các giá trị mặc định lần lượt là 10 và 3.
Dòng trên: Close - (Xử nhân x ATR) Đường dưới: Close + (Xử nhân x ATR)
Khi giá đóng cửa cao hơn đường trên trước, nó được coi là tín hiệu tăng. Khi giá đóng cửa phá vỡ dưới đường dưới trước, nó được coi là tín hiệu giảm.
Chiến lược này cũng kết hợp chỉ số Bollinger Bands, sử dụng dải giữa làm đường cơ sở, và các dải trên và dưới nằm cách nó hai độ lệch chuẩn.
Chiến lược Supertrend Bollinger Bands tích hợp các điểm mạnh của nhiều chỉ số kỹ thuật và sử dụng một cơ chế dừng lại để theo dõi hiệu quả xu hướng thị trường. Chiến lược có thể tùy chỉnh cao này thích nghi tốt với các thị trường khác nhau, làm cho nó trở thành một chiến lược theo đuổi đột phá được khuyến cáo. Tuy nhiên, các rủi ro như whipsaws và giao dịch quá mức nên được giải quyết bằng cách tối ưu hóa thêm để phù hợp với môi trường thị trường phức tạp hơn.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KivancOzbilgic //@version=4 strategy("SuperTrend STRATEGY", overlay=true) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long) shortCondition = sellSignal if (shortCondition) strategy.entry("SELL", strategy.short) buy1= barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)