Chiến lược kênh giá thích nghi

Tác giả:ChaoZhang, Ngày: 2023-12-04 16:33:45
Tags:

img

Tổng quan

Chiến lược này là một chiến lược kênh giá thích nghi dựa trên chỉ số Average True Range (ATR) và Chỉ số hướng trung bình (ADX). Nó nhằm mục đích xác định thị trường bên và xu hướng trong biến động giá và thực hiện giao dịch phù hợp.

Chiến lược logic

  1. Tính toán mức cao nhất (HH) và thấp nhất (LL) trên một chiều dài nhất định.

  2. Tính toán +DI và -DI dựa trên xu hướng tăng và giảm giá.

  3. Nếu ADX < 25, thị trường được coi là bên cạnh. Nếu đóng > kênh trên (HH - ATR nhân * ATR), đi dài. Nếu đóng < kênh dưới (LL + ATR nhân * ATR), đi ngắn.

  4. Nếu ADX >= 25 và +DI > -DI, thị trường đang tăng. Nếu đóng > kênh trên, đi dài.

  5. Nếu ADX >= 25 và +DI < -DI, thị trường đang giảm.

  6. Vị trí thoát sau các thanh exit_length kể từ khi nhập.

Phân tích lợi thế

  1. Chiến lược thích nghi tự động dựa trên điều kiện thị trường, sử dụng chiến lược kênh trong thị trường bên cạnh và xu hướng theo xu hướng thị trường.

  2. Sử dụng ATR và ADX đảm bảo khả năng thích nghi. ATR điều chỉnh chiều rộng kênh, ADX xác định xu hướng.

  3. Việc ra ngoài cưỡng bức sẽ tăng sự ổn định.

Phân tích rủi ro

  1. ADX có thể tạo ra tín hiệu sai thường xuyên.

  2. Các thông số ATR và ADX kém dẫn đến hiệu suất kém.

  3. Không thể bảo vệ hiệu quả trước sự kiện thiên nga đen.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa các thông số cho ATR và ADX để cải thiện khả năng thích nghi.

  2. Thêm stop loss để giới hạn lỗ.

  3. Thêm bộ lọc để tránh tín hiệu sai.

Kết luận

Chiến lược kết hợp các chỉ số và cơ chế để thích nghi với các điều kiện thị trường. Nhưng đánh giá sai có thể xảy ra do giới hạn chỉ số. Tối ưu hóa trong tương lai về các thông số và kiểm soát rủi ro.


/*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)



Thêm nữa