Xu hướng ADX tăng động theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-11 17:18:32
Tags:

img

Tổng quan

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ả.

Chiến lược logic

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:

  1. ADX vượt quá ngưỡng (ví dụ 10)
  2. ADX tăng nhanh lên
  3. Giá vượt trên Mức trung bình di chuyển đơn giản hoặc tỷ lệ biểu thức

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.

Phân tích lợi thế

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.

Phân tích rủi ro và tối ưu hóa

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.

Kết luận

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)

Thêm nữa