
Chiến lược BOLL siêu xu hướng là một chiến lược chỉ số dừng lỗ phổ biến dựa trên mức biến động thực tế trung bình của ATR. Chiến lược này sử dụng chỉ số đường trung bình siêu xu hướng để vẽ các kênh xu hướng đa không gian trên biểu đồ và kết hợp với chỉ số Bollin để phát tín hiệu mua và bán.
Chiến lược này sử dụng hai tham số chính là chu kỳ và nhân, 10 và 3, để tính toán đường trung bình siêu xu hướng. Công thức tính toán cụ thể như sau:
Đường đường lên: giá đóng cửa - (nâng x ATR trung bình biến động thực tế) Dòng đường xuống: giá đóng cửa + (nội số × ATR trung bình biến động thực tế)
Khi giá đóng cửa cao hơn đường ray lên của chu kỳ trước, nó được coi là tín hiệu đa đầu; khi giá đóng cửa rơi xuống đường ray xuống của chu kỳ trước, nó được coi là tín hiệu đầu trống.
Chiến lược này cũng kết hợp với chỉ số Bollinger Bands, sử dụng đường trung tâm làm đường chuẩn, phân biệt đường trên và đường dưới với hai đường phân cách tiêu chuẩn giữa đường trung tâm. Một tín hiệu mua được tạo ra khi giá từ dưới lên phá vỡ đường trung tâm; một tín hiệu bán được tạo ra khi giá từ trên xuống phá vỡ đường trung tâm.
Chiến lược chỉ số BOLL siêu xu hướng trung bình tích hợp các ưu điểm của nhiều chỉ số kỹ thuật, sử dụng cơ chế dừng theo dõi động, có thể theo dõi xu hướng thị trường một cách hiệu quả. Các tham số của chiến lược có thể tùy chỉnh, có khả năng thích ứng, là một chiến lược theo dõi đột phá đáng được đề xuất. Tuy nhiên, cũng cần lưu ý để phòng ngừa nguy cơ bị dừng lỗ và giao dịch thường xuyên, cần được tối ưu hóa hơn để thích ứng 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)