Chiến lược này là một chiến lược theo dõi xu hướng và đột phá dựa trên chỉ số Recursive Bands được phát triển bởi alexgrover. Nó sử dụng chỉ số Recursive Bands để xác định xu hướng giá và mức hỗ trợ / kháng cự chính, kết hợp với các điều kiện động lực để lọc các đột phá sai, đạt được tín hiệu nhập cảnh tần số thấp nhưng chất lượng cao.
Chỉ số Recursive Bands bao gồm một dải trên, dải dưới và đường giữa.
Upper Band = Max ((Bara trước đây là dải trên, Close price + nSự biến động) Phạm vi thấp hơn = Min(phạm vi thấp hơn của thanh trước, Giá đóng - nSự biến động) Đường giữa = (Band trên + Band dưới) / 2
Ở đây n là một hệ số mở rộng, và độ biến động có thể được chọn từ ATR, độ lệch chuẩn, phạm vi trung bình thực sự hoặc một phương pháp RFV đặc biệt.
Chiến lược đầu tiên kiểm tra xem dải dưới và dải trên có xu hướng theo cùng một hướng để tránh đột phá sai.
Khi giá phá vỡ dưới dải dưới, mua dài. Khi giá phá vỡ trên dải trên, mua ngắn.
Ngoài ra, logic dừng lỗ được thực hiện.
Những lợi thế của chiến lược này là:
Ngoài ra còn có một số rủi ro với chiến lược này:
Những rủi ro này có thể được quản lý bằng cách tối ưu hóa tham số, thực hiện dừng lỗ, tăng ngưỡng trượt v.v.
Một số hướng để tối ưu hóa chiến lược hơn nữa:
Tóm lại, đây là một chiến lược theo dõi xu hướng rất thực tế và hiệu quả. Nó kết hợp khung tái diễn cho hiệu quả tính toán, sử dụng hỗ trợ xu hướng / kháng cự để xác định xu hướng chính, thêm các điều kiện động lực để lọc các đột phá sai và đảm bảo chất lượng tín hiệu. Với điều chỉnh tham số và kiểm soát rủi ro thích hợp, nó có thể đạt được kết quả tốt. Đáng nghiên cứu và tối ưu hóa hơn để thích nghi với các chế độ thị trường phức tạp hơn.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 // Original indicator by alexgrover strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000) length = input.int(260, step=10, title='Length') src = input(close, title='Source') method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method') bandDirectionCheck = input.bool(true, title='Bands Hold Direction') lookback = input(3) //---- atr = ta.atr(length) stdev = ta.stdev(src, length) ahlr = ta.sma(high - low, length) rfv = 0. rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1] //----- f(a, b, c) => method == a ? b : c v(x) => f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x)))) //---- sc = 2 / (length + 1) a = 0. a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src))) b = 0. b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src))) c = (a+b)/2 // Colors beColor = #675F76 buColor = #a472ff // Plots pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band') pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band') pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band') fill(pC, pA, color=color.new(beColor,90)) fill(pC, pB, color=color.new(buColor,90)) // Band keeping direction // By Adulari longc = 0 shortc = 0 for i = 0 to lookback-1 if b[i] > b[i+1] longc:=longc+1 if a[i] < a[i+1] shortc:=shortc+1 bhdLong = if bandDirectionCheck longc==lookback else true bhdShort = if bandDirectionCheck shortc==lookback else true // Strategy if b>=low and bhdLong strategy.entry(id='Long',direction=strategy.long) if high>=a and bhdShort strategy.entry(id='Short',direction=strategy.short) // TP at middle line //if low<=c and strategy.position_size<0 and strategy.position_avg_price>close //strategy.exit(id="Short",limit=close) //if high>=c and strategy.position_size>0 and strategy.position_avg_price<close //strategy.exit(id="Long",limit=close)