ADX lọc Chande Kroll Xu hướng dừng lỗ theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-06 14:52:27
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số dừng lỗ Chande Kroll và chỉ số chỉ số chuyển động theo hướng trung bình (ADX) để thực hiện một chiến lược theo xu hướng tương đối đơn giản.

Chiến lược logic

Chiến lược này đầu tiên tính toán các đường dừng dài và ngắn của đường dừng lỗ của Chande Kroll. Dòng dài được tính dựa trên giá cao nhất trong các giai đoạn p trước. Dòng ngắn được tính dựa trên giá thấp nhất trong các giai đoạn p trước. Điểm cao nhất của đường dài và ngắn trong các giai đoạn q trước sau đó được sử dụng như là đường dừng lỗ dài và ngắn hiện tại. Điều này lọc ra các biến động giá ngắn hạn và chỉ kích hoạt dừng lỗ tại các điểm đảo ngược xu hướng.

Khi giá đóng vượt trên đường ngắn stop_short, một tín hiệu dài được tạo ra. Khi giá đóng vượt dưới đường dài stop_long, một tín hiệu ngắn được tạo ra.

Ngoài ra, chỉ số ADX được sử dụng để đánh giá sức mạnh của xu hướng. Chỉ khi ADX lớn hơn ngưỡng, tín hiệu dừng lỗ sẽ kích hoạt nhập cảnh. Điều này lọc ra các whipsaw không hướng trong hợp nhất.

Ưu điểm

Chiến lược này kết hợp các lợi thế của các chỉ số xu hướng và chỉ số dừng lỗ. Nó có thể nắm bắt kịp thời sự đảo ngược xu hướng trong khi tránh các biến động trong các thị trường không hướng. Tối ưu hóa các thông số dừng lỗ của Chande Kroll có thể lọc mượt mà và đảm bảo chỉ dừng lỗ tại các điểm đảo ngược xu hướng. Chỉ số ADX đảm bảo chỉ nhập vào khi xu hướng là đáng kể, tránh các biến động dừng lỗ trong quá trình củng cố thị trường.

Rủi ro

Các thiết lập tham số ADX không chính xác có thể làm bạn bỏ lỡ các cơ hội khi bắt đầu xu hướng. Nếu ngưỡng ADX được đặt quá cao, các cơ hội nhập vào có thể bị bỏ lỡ khi bắt đầu xu hướng khi các giá trị ADX vẫn thấp.

Các điểm dừng lỗ quá gần cũng có thể gây ra việc mở và đóng các vị trí chiến lược thường xuyên. Điều này sẽ làm tăng chi phí giao dịch và trượt. Các điểm dừng lỗ cần phải được thiết lập hợp lý để cho phép một số không gian cho xu hướng.

Tối ưu hóa

Xem xét cho phép tín hiệu dừng lỗ chỉ được kích hoạt khi ADX vượt quá ngưỡng. Điều này có thể cải thiện độ tin cậy của thời gian nhập cảnh. Các chỉ số xu hướng khác cũng có thể được kết hợp cho các điều kiện liên kết, chẳng hạn như kết hợp các giá trị ADX với độ dốc EMA.

Các đường dừng lỗ cũng có thể được điều chỉnh năng động dựa trên ATR, cho phép dừng rộng hơn khi biến động thị trường tăng để tránh sự nhạy cảm quá mức.

Tóm lại

Chiến lược này tích hợp các điểm mạnh của các chỉ số dừng lỗ và ADX để xây dựng một chiến lược theo xu hướng tương đối đơn giản và thực tế. Thông qua tối ưu hóa tham số, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện hơn nữa.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

Thêm nữa