Chiến lược này sử dụng chỉ số ATR để xây dựng một kênh xu hướng năng động nhiều khung thời gian để theo dõi xu hướng. Nó tạo ra tín hiệu khi giá vượt qua kênh bằng cách liên tục điều chỉnh kênh để nắm bắt xu hướng lớn hơn.
Chiến lược này sử dụng chỉ số ATR để xây dựng một kênh xu hướng tăng và một kênh xu hướng giảm. Cụ thể, đường kênh xu hướng tăng là giá đóng trừ N lần chỉ số ATR; đường kênh xu hướng giảm là giá đóng cộng với N lần chỉ số ATR. Giá trị N có thể được điều chỉnh thông qua các tham số.
Khi giá vượt qua kênh xu hướng tăng, một tín hiệu mua được tạo ra; khi giá vượt qua kênh xu hướng giảm, một tín hiệu bán được tạo ra.
Ngoài ra, chiến lược cũng xác định một biến xu hướng để xác định xem hiện tại có xu hướng tăng hay giảm.
Cải thiện:
Nhìn chung, đây là một chiến lược theo dõi xu hướng tốt. Nó điều chỉnh năng động để giao dịch cùng với xu hướng và tránh theo đuổi mức cao và bán thấp. Với tối ưu hóa tham số và cải tiến thích hợp, lợi thế chiến lược có thể được tăng thêm và giảm rủi ro để đạt được kết quả tốt hơn.
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('超级趋势精简优化版', overlay=true) Periods = input(title='ATR周期', defval=10) src = input(hl2, title='价格数据源') Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0) changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)') showsignals = input(title='显示买入/卖出信号', defval=false) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.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='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0)) FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12) FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31) FromYear = input.int(defval=2018, title='From Year', minval=999) ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12) ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31) ToYear = input.int(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 and window() strategy.entry('BUY', strategy.long, comment = '买入') shortCondition = sellSignal if shortCondition and window() strategy.close('BUY',comment = '卖出') buy1 = ta.barssince(buySignal) sell1 = ta.barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na