
Chiến lược theo dõi xu hướng tự thích ứng là một chiến lược giao dịch định lượng kết hợp với chỉ số Brin và chỉ số đồng bằng, điều chỉnh động lực của xu hướng, để thực hiện theo dõi xu hướng và dừng lỗ. Chiến lược này sử dụng chỉ số Brin để tính toán biến động giá, tính toán cường độ xu hướng hợp lý dựa trên động lực này, sau đó kết hợp với chỉ số ATR để vẽ kênh xu hướng tự thích ứng, để thực hiện phán đoán và theo dõi xu hướng bò và gấu. Đồng thời, chiến lược có cơ chế dừng lỗ bên trong, có thể kiểm soát rủi ro hiệu quả.
Chỉ số cốt lõi của chiến lược này là dải Brin. Dải Brin được tạo thành từ đường trung ương, đường trên và đường dưới. Đường trung ương là trung bình di chuyển đơn giản của n ngày, đường trên là chênh lệch chuẩn n ngày của đường trung ương + k lần, đường dưới là đường trung ương - k lần.
Sau đó tính tỷ lệ của băng thông Brin ((đường đua trên - đường đua dưới) so với đường đua giữa, được gọi là yếu tố cường độ của . Tỷ lệ này phản ánh tỷ lệ dao động của thị trường hiện tại và cường độ của xu hướng. Chúng tôi đặt các giá trị tối đa hoặc tối thiểu của yếu tố cường độ để ngăn chặn nó quá lớn hoặc quá nhỏ.
Sau khi nhận được một yếu tố cường độ hợp lý, kết hợp với chỉ số ATR, lên và xuống đường ray di chuyển ATR lên và xuống*Khoảng cách này tạo thành một kênh xu hướng tự điều chỉnh. Khi giá đóng cửa từ dưới lên, làm nhiều; Khi từ trên xuống xuống, làm trống.
Ngoài ra, chiến lược cũng thiết lập một cơ chế dừng lỗ. Nếu giá giảm xuống mức thấp nhất khi mở vị trí sau khi các vị trí đa đầu được hình thành, thì sẽ dừng vị trí bằng phẳng; vị trí đầu trống cũng vậy.
Chiến lược này có những ưu điểm sau:
Khả năng tự điều chỉnh. Cách tính toán của yếu tố cường độ cho phép chiến lược điều chỉnh chiều rộng kênh theo động thái biến động của thị trường, mở rộng kênh trong thị trường tăng trưởng và thu hẹp kênh trong thị trường dao động, để tự điều chỉnh cho các loại thị trường khác nhau.
Tần suất hoạt động trung bình. Tần suất điều chỉnh kênh của chiến lược Brin Belt thấp hơn so với chiến lược trung bình di chuyển đơn giản, tránh mở lỗ không cần thiết.
Nhập vào chính xác. Cách vào này có thể lọc hiệu quả tiếng ồn thị trường và đảm bảo khả năng bắt đầu xu hướng cao.
Có cơ chế dừng lỗ. Các phương pháp dừng lỗ tích hợp có thể kiểm soát hiệu quả các khoản lỗ đơn lẻ, là một lợi thế lớn của chiến lược này.
Chiến lược này cũng có một số rủi ro:
Các tham số có độ nhạy cao hơn. Chu kỳ n và nhân số k của dải Brin có ảnh hưởng lớn đến kết quả, cần thử nghiệm lặp lại để tìm ra sự kết hợp tham số tối ưu.
Không thể theo dõi xu hướng khi buôn bán quỹ đạo Brin. Khi giá biến động mạnh, quỹ đạo Brin sẽ bị kéo ra nhanh chóng, dẫn đến không thể theo dõi xu hướng. Khi đó, bạn cần tạm dừng chiến lược và chờ đợi quỹ đạo kết hợp để chạy lại.
Đôi khi sẽ có tín hiệu sai. Chiến lược Brin không hoàn hảo, cũng sẽ có một số tín hiệu sai được tạo ra, điều này cần phải chịu tổn thất tương ứng.
Phương pháp dừng lỗ khá đơn giản. Chiến lược này chỉ dừng lỗ khi xem xét giá cao nhất và giá thấp nhất sau khi mở vị trí, không kết hợp với các phương pháp dừng lỗ phức tạp hơn như tỷ lệ biến động, có thể quá quyết liệt hoặc bảo thủ, cần được tối ưu hóa.
Chiến lược này cũng cần phải được tối ưu hóa về những khía cạnh sau:
Thử nghiệm hiệu quả của các tham số khác nhau về tiền tệ và chu kỳ khác nhau. Các tham số của chiến lược có thể được tối ưu hóa cho các loại tiền tệ và chu kỳ khác nhau, cải thiện khả năng thích ứng của chiến lược.
Tối ưu hóa cơ chế dừng lỗ. Có thể giới thiệu dừng di chuyển, dừng dao động, dừng theo dõi, v.v., làm cho phương thức dừng lỗ trở nên thông minh hơn.
Kết hợp với các chỉ số khác để lọc. Có thể thêm các chỉ số như MACD, KDJ, để tránh các tín hiệu sai của Brin trong thị trường dao động ngang.
Tăng cơ chế quản lý vị trí. Thực hiện các phương thức quản lý như theo dõi lệnh dừng, tăng vị trí kim tự tháp, vị trí tỷ lệ cố định, có thể cải thiện tỷ lệ lợi nhuận của chiến lược.
Thực hiện tối ưu hóa phản hồi. Kiểm tra toàn diện hiệu quả của chiến lược để tìm các tham số tối ưu bằng cách mở rộng phạm vi thời gian phản hồi, điều chỉnh tham số, phân tích báo cáo phản hồi.
Xu hướng tự thích ứng theo sau chiến lược nói chung là một chiến lược định lượng trưởng thành hơn. Nó sử dụng xu hướng bắt giữ động lực của chỉ số băng tần Brin, kết hợp với chỉ số ATR để xây dựng kênh tự thích ứng, để thực hiện phán đoán về xu hướng đa không gian. Đồng thời, cơ chế kiểm soát rủi ro dừng tích hợp. Ưu điểm của chiến lược này là phù hợp với tần số hoạt động, chính xác và kiểm soát rủi ro.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)