Chiến lược theo xu hướng Super ATR là một chiến lược theo xu hướng dựa trên chỉ số ATR. Nó sử dụng chỉ số ATR để đo biến động thị trường và thiết lập dừng lỗ dựa trên nhiều ATR để theo dõi xu hướng.
Chiến lược đầu tiên tính toán chỉ số ATR, đó là trung bình động của biến động giá trong N ngày qua, để đại diện cho rủi ro và biến động thị trường. Chiến lược cho phép chúng ta thay đổi phương pháp tính toán ATR, hoặc là ATR bình thường hoặc SMA.
Sau đó, các dải trên và dưới được tính dựa trên giá trị ATR nhân một nhân tố, tức là:close - Multiplier * ATR
đối với dải trên;close + Multiplier * ATR
Đây tạo thành một kênh xu hướng dựa trên ATR.
Sau đó, chúng ta đánh giá giá hiện tại có vượt qua dải trên hoặc dưới của kênh. Nếu giá vượt qua dải trên, nó được đánh giá là đi vào xu hướng giảm; nếu giá vượt qua dải dưới, nó được đánh giá là đi vào xu hướng tăng. Khi có một sự đột phá xu hướng, chúng tôi mua và bán tương ứng.
Ngoài ra, chiến lược đã thiết lập một cửa sổ thời gian giao dịch chỉ giao dịch trong khoảng thời gian ngày đã chỉ định.
Chiến lược theo xu hướng dựa trên kênh chỉ số này có những lợi thế sau:
Nói chung, đây là một xu hướng đơn giản và thực tế sau chiến lược có thể kiểm soát rủi ro hiệu quả và thu được lợi nhuận tốt.
Ngoài ra còn có một số rủi ro cho chiến lược này:
Để kiểm soát những rủi ro này, chúng ta có thể thực hiện các biện pháp sau:
Có chỗ cho việc tối ưu hóa thêm chiến lược này:
Những tối ưu hóa này có thể tiếp tục cải thiện sự ổn định và lợi nhuận của chiến lược.
Nhìn chung, đây là một chiến lược theo xu hướng rất thực tế. Nó xây dựng một kênh thích nghi bằng cách sử dụng chỉ số ATR và xác định các mục nhập bằng cách phá vỡ kênh. Chiến lược đơn giản và hiệu quả để kiểm soát rủi ro, phù hợp để theo dõi xu hướng trung dài hạn. Chúng tôi cũng đề xuất các đề xuất kiểm soát rủi ro và tối ưu hóa hơn nữa để làm cho chiến lược mạnh mẽ hơn.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('B厂长 @超级趋势精简优化版', 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.entry('SAL', strategy.short, comment = '做空') buy1 = ta.barssince(buySignal) sell1 = ta.barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na