
Chiến lược này kết hợp các chỉ số dừng Chande Kroll và chỉ số xu hướng trung bình (ADX) để thực hiện một chiến lược theo dõi xu hướng tương đối đơn giản. Chande Kroll dừng được sử dụng để tạo ra tín hiệu vào vị trí dài và ngắn, ADX được sử dụng để lọc ra các tình huống thị trường không có xu hướng rõ ràng và tránh thị trường biến động không định hướng dẫn đến việc dừng lại.
Chiến lược này đầu tiên tính các đường dài stop_long và đường ngắn stop_short của Chande Kroll. Đường dài được tính từ giá cao nhất trong chu kỳ p trước, đường ngắn được tính từ giá thấp nhất trong chu kỳ p trước. Sau đó sử dụng các điểm cao nhất và thấp nhất của đường dài ngắn trong chu kỳ q trước như đường dừng ngắn hiện tại.
Khi giá đóng cửa vượt qua đường ngắn stop_short, tạo ra tín hiệu làm nhiều; khi giá đóng cửa vượt qua đường dài stop_long, tạo ra tín hiệu làm trống
Ngoài ra, các chiến lược tham gia vào chỉ số ADX để đánh giá xu hướng mạnh hoặc yếu. Chỉ khi ADX lớn hơn ngưỡng thấp, tín hiệu dừng sẽ được kích hoạt. Điều này có thể lọc các báo cáo sai lầm về dừng lỗ khi biến động cân bằng.
Chiến lược này kết hợp các ưu điểm của chỉ số xu hướng và chỉ số dừng để vừa nắm bắt được sự biến đổi xu hướng kịp thời, vừa tránh được những đòn thép của thị trường không định hướng. Các tham số tối ưu hóa của Chande Kroll Stop có thể làm mịn các sợi lỏng, đảm bảo chỉ dừng khi xu hướng biến đổi. Chỉ số ADX đảm bảo chỉ tham gia khi xu hướng rõ ràng, tránh được những đòn thổi bay của thị trường.
Thiết lập tham số ADX không đúng có thể bỏ lỡ cơ hội bắt đầu xu hướng. Nếu ADX được thiết lập quá cao, có thể bỏ lỡ cơ hội nhập vào vì ADX quá thấp trong giai đoạn bắt đầu xu hướng.
Đi quá gần điểm dừng cũng có thể dẫn đến 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à chi phí trượt. Điểm dừng cần được thiết lập hợp lý để đưa ra một viễn cảnh nhất định cho xu hướng.
Có thể xem xét chỉ cho phép các tín hiệu dừng kích hoạt khi ADX vượt qua một ngưỡng nhất định, để tăng độ tin cậy của thời gian vào cửa. Cũng có thể kết hợp với các chỉ số xu hướng khác để phán đoán kết hợp, chẳng hạn như kết hợp giá trị ADX với độ nghiêng EMA.
Đường dừng cũng có thể được xem xét để điều chỉnh động theo ATR, mở rộng khoảng trống dừng khi thị trường biến động, tránh quá nhạy cảm. Hoặc có thể kết hợp với các chỉ số hỗ trợ đánh giá xu hướng mạnh hoặc yếu, động điều chỉnh đường dừng.
Chiến lược này tích hợp các lợi thế của chỉ số Chande Kroll Stop Loss và ADX, để thực hiện một chiến lược theo dõi xu hướng tương đối đơn giản và thực tế. Bằng cách tối ưu hóa tham số, bạn có thể nâng cao hơn nữa sự ổn định và khả năng lợi nhuận của chiến lược. Tuy nhiên, cần lưu ý để tránh rủi ro do dừng quá nhạy cảm và lọc ADX quá thoải mái.
/*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)