
Chiến lược này là một chiến lược dẫn đường giá tự điều chỉnh dựa trên các chỉ số phạm vi trung bình thực (ATR) và chỉ số hướng trung bình (ADX). Nó nhằm mục đích xác định thị trường và xu hướng trong chuyển động giá và giao dịch phù hợp.
Tính giá cao nhất ((HH) và giá thấp nhất ((LL) của đường K gốc chiều gần nhất. Đồng thời tính ATR trên đường K gốc chiều.
+DI và -DI, sau đó tính ADX.
Nếu ADX <25, thị trường sẽ được định nghĩa là đã thu hẹp. Nếu giá đóng cửa cao hơn giới hạn giá trên kênh, thì HH - ATR nhân*ATR), làm nhiều hơn; nếu giá đóng cửa thấp hơn giới hạn thấp của cổng giá ((LL + ATR nhân*ATR), làm việc trống.
Nếu ADX> = 25 và + DI> - DI, thì thị trường sẽ bị coi là thị trường bò. Nếu giá đóng cửa ở mức cao hơn giới hạn giá, thì hãy làm nhiều hơn.
Nếu ADX> = 25 và + DI < - DI, thì được coi là thị trường đầu trống. Tại thời điểm này, nếu giá đóng cửa thấp hơn giới hạn thấp của cổng giá, hãy làm trống.
Sau khi vào vị trí, nếu vượt quá đường K gốc exit_length mà không bị dừng, thì bắt buộc dừng lỗ bằng.
Chiến lược này có thể tự động thích ứng với môi trường thị trường. Sử dụng chiến lược kênh giá trong thị trường tổng hợp, giao dịch theo xu hướng trong thị trường xu hướng.
Việc sử dụng các chỉ số ATR và ADX đảm bảo khả năng tự điều chỉnh chiến lược. ATR được sử dụng để điều chỉnh chiều rộng của kênh giá, ADX được sử dụng để đánh giá xu hướng thị trường.
Các cơ chế ngăn chặn thiệt hại có thể giúp cho sự ổn định của chiến lược.
ADX có khả năng tạo ra tín hiệu sai.
Thiết lập ATR và ADX không chính xác có thể gây ra hiệu quả chiến lược kém.
Rủi ro không thể tránh được sự biến động về hành vi.
Tối ưu hóa các tham số của chỉ số ATR và ADX để có hiệu quả thích ứng tốt hơn.
Tăng Stop Loss Line để giảm rủi ro mất mát.
Thêm điều kiện lọc để lọc các tín hiệu sai.
Chiến lược kênh giá tự thích ứng sử dụng nhiều chỉ số và cơ chế tổng hợp, sử dụng các chiến lược khác nhau trong các tình huống khác nhau, có một mức độ thích ứng và ổn định. Tuy nhiên, do giới hạn của thiết lập chỉ số và lựa chọn tham số, chiến lược này cũng phải đối mặt với một số rủi ro sai lầm.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Adaptive Price Channel Strategy", overlay=true)
length = input(20, title="Length")
exit_length = input(10, title="Exit After X Periods")
atr_multiplier = input(3.2, title="ATR Multiplier")
startDate = input(defval = timestamp("2019-01-15T08:15:15+00:00"), title = "Start Date")
endDate = input(defval = timestamp("2033-04-01T08:15:00+00:00"), title = "End Date")
hh = ta.highest(high, length)
ll = ta.lowest(low, length)
atr = ta.atr(length)
// calculate +DI and -DI
upMove = high - high[1]
downMove = low[1] - low
plusDM = na(upMove[1]) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
minusDM = na(downMove[1]) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
plusDI = ta.rma(plusDM, length) / atr * 100
minusDI = ta.rma(minusDM, length) / atr * 100
// calculate ADX
dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, length)
var int barSinceEntry = na
if (not na(close[length]) )
if (adx < 25) // Sideways market
if (close > hh - atr_multiplier * atr)
strategy.entry("PChLE", strategy.long, comment="PChLE")
barSinceEntry := 0
else if (close < ll + atr_multiplier * atr)
strategy.entry("PChSE", strategy.short, comment="PChSE")
barSinceEntry := 0
else if (adx >= 25 and plusDI > minusDI) // Bullish market
if (close > hh - atr_multiplier * atr)
strategy.entry("PChLE", strategy.long, comment="PChLE")
barSinceEntry := 0
else if (adx >= 25 and plusDI < minusDI) // Bearish market
if (close < ll + atr_multiplier * atr)
strategy.entry("PChSE", strategy.short, comment="PChSE")
barSinceEntry := 0
if (na(barSinceEntry))
barSinceEntry := barSinceEntry[1] + 1
else if (barSinceEntry >= exit_length)
strategy.close("PChLE")
strategy.close("PChSE")
barSinceEntry := na
plot(hh, title="Highest High", color=color.green, linewidth=2)
plot(ll, title="Lowest Low", color=color.red, linewidth=2)