Chiến lược này theo dõi những thay đổi năng động của chỉ số ADX để nắm bắt những thay đổi sớm trong xu hướng thị trường để theo dõi xu hướng kịp thời. Khi ADX tăng nhanh từ mức thấp, nó báo hiệu một xu hướng đang hình thành mang lại một cơ hội tuyệt vời để tham gia. Với sự trợ giúp của đường trung bình động, nó có thể lọc ra các tín hiệu sai hiệu quả.
Cốt lõi của chiến lược này nằm trong việc đánh giá sự phát triển của xu hướng dựa trên những thay đổi năng động của chỉ số ADX. ADX thấp có nghĩa là biến động nhỏ trong xu hướng. Khi ADX tăng nhanh từ mức thấp, nó báo hiệu một xu hướng đang hình thành. Chiến lược nắm bắt sự xuất hiện của xu hướng bằng cách theo dõi sự gia tăng mạnh của ADX.
Cụ thể, tín hiệu vào bao gồm các yếu tố sau:
Khi tất cả các điều kiện trên được đáp ứng, nó báo hiệu một xu hướng tăng đang hình thành để đi dài. Khi giá giảm xuống dưới đường trung bình động, đóng các vị trí. Hai đường trung bình động được sử dụng để đánh giá xu hướng chính xác hơn.
Logic dừng lỗ tương tự. Đi ngắn khi ADX giảm nhanh chóng, và đóng các vị trí khi giá tăng trên mức trung bình động.
Lợi thế lớn nhất ở đây là nắm bắt kịp thời các xu hướng mới nổi. Cách nhìn thông thường về các giá trị ADX tuyệt đối thường đòi hỏi xác nhận trên 20 hoặc 25 để gọi xu hướng, do đó bỏ lỡ thời gian nhập khẩu tối ưu. Chiến lược này nắm bắt sự phát triển sớm của xu hướng bằng cách theo dõi sự tăng nhanh của ADX.
Hơn nữa, các đường trung bình động giúp lọc các tín hiệu sai một cách hiệu quả, tăng tính ổn định của chiến lược.
Rủi ro lớn nhất đến từ bản chất chậm trễ của ADX. Mặc dù bắt được sự gia tăng nhanh chóng để giảm chậm trễ, vẫn có một số sự chậm trễ. Điều này gây ra việc bỏ lỡ một số thị trường đảo ngược nhanh chóng.
Ngoài ra, ADX không đánh giá hoàn hảo xu hướng và chắc chắn chẩn đoán sai chúng theo thời gian.
Có một không gian rộng lớn để tối ưu hóa chiến lược này, chủ yếu là tăng độ chính xác của ADX trong việc nắm bắt xu hướng. Các phương pháp như học máy có thể được khám phá, các mô hình đào tạo để dự đoán phân bố xác suất dựa trên các thay đổi ADX. Các khía cạnh khác như điều chỉnh tham số, các chỉ số bổ sung, v.v. cũng có thể được thử nghiệm.
Chiến lược theo xu hướng ADX tăng động này nắm bắt các thay đổi xu hướng nhanh chóng bằng cách xác định sự tăng ADX mạnh, do đó theo xu hướng kịp thời. Ưu điểm lớn nhất là sự nhanh nhẹn của nó trong thời gian, nắm bắt hiệu quả sự phát triển xu hướng sớm. Trong khi đó, vẫn còn một số rủi ro sai đoán đòi hỏi tối ưu hóa và thử nghiệm liên tục.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m 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/ // © dhilipthegreat //@version=4 //Rising ADX strategy strategy(title="Rising ADX strategy", overlay=false) adxlen = input(14, title="ADX Length", minval=1) threshold = input(10, title="threshold", minval=5) hline(threshold, color=color.black, linestyle=hline.style_dashed) atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen=input(20, title="Moving average 1 ",minval=1, maxval=50) avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen2=input(20, title="Moving average 2",minval=1, maxval=200) avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na //ADX&DI dilen = 14 dirmov(len,_high,_low,_tr) => up = change(_high) down = -change(_low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(_tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen,_high,_low,_tr) => [plus, minus] = dirmov(dilen,_high,_low,_tr) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [plus, minus] = dirmov(dilen,high,low,tr) sig = adx(dilen, adxlen,high,low,tr) prev_sig = adx(dilen, adxlen,high[1],low[1],tr) plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2) ////// longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2 barcolor(longCondition ? color.yellow: na) Long_side = input(true, "Long side") if Long_side strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1) exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2 strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2 barcolor(shortCondition ? color.gray: na) Short_side = input(true, "Short side") if Short_side strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1) sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2 strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all barcolor(strategy.position_size>1 ? color.lime: na) bgcolor(strategy.position_size>1 ? color.lime: na) barcolor(strategy.position_size<0 ? color.orange: na) bgcolor(strategy.position_size<0 ? color.orange: na)