Chiến lược chốt lời đa cấp EMA-ADX để theo dõi xu hướng động

EMA ADX ATR
Ngày tạo: 2025-02-18 14:08:02 sửa đổi lần cuối: 2025-02-18 14:08:02
sao chép: 0 Số nhấp chuột: 405
1
tập trung vào
1617
Người theo dõi

Chiến lược chốt lời đa cấp EMA-ADX để theo dõi xu hướng động

Tổng quan

Chiến lược này là một hệ thống giao dịch theo dõi xu hướng kết hợp các chỉ số EMA và ADX để tối ưu hóa quản lý tiền bằng cách dừng nhiều cấp và dừng di chuyển. Chiến lược sử dụng đường thẳng EMA để xác định hướng xu hướng, chỉ số ADX để lọc cường độ xu hướng và thiết kế cơ chế dừng ba tầng để phân chia lợi nhuận, đồng thời sử dụng ATR để điều chỉnh động vị trí dừng để kiểm soát rủi ro.

Nguyên tắc chiến lược

Logic cốt lõi của chiến lược bao gồm những phần chính sau:

  1. Sử dụng đường trung bình 50 chu kỳ của EMA để xác định hướng xu hướng, giá phá vỡ EMA trên mở nhiều, phá vỡ dưới mở
  2. Bộ lọc xu hướng yếu thông qua chỉ số ADX 14 chu kỳ, xác nhận xu hướng có hiệu lực khi ADX> 20
  3. Dựa trên 14 chu kỳ ATR tính toán động vị trí dừng lỗ, nhiều đơn đặt mua giảm 1 ATR ở giá thấp nhất, đơn trống thêm 1 ATR ở giá cao nhất
  4. Có 3 lớp ngăn chặn:
    • Lớp thứ nhất: 30% vị trí bị xử lý với ATR gấp 1 lần
    • Lớp thứ hai: 50% vị thế bị xử lý với 2 lần ATR
    • Lớp thứ ba: 20% các vị trí sử dụng 3 lần ATR để chặn di động
  5. Tự động xóa tất cả các vị trí còn lại khi giá đạt đến điểm dừng thứ hai

Lợi thế chiến lược

  1. Thiết kế ngăn chặn nhiều lớp giúp bạn khóa lợi nhuận kịp thời và không bỏ lỡ các hoạt động lớn
  2. Cơ chế dừng lỗ di động có thể thích ứng với sự biến động của thị trường, cung cấp kiểm soát rủi ro động
  3. Bộ lọc ADX có hiệu quả trong việc ngăn chặn tín hiệu giả của thị trường
  4. EMA và giá giao nhau cung cấp tín hiệu nhập cảnh rõ ràng
  5. Việc ngăn chặn phân khúc làm giảm sự biến động cảm xúc, có lợi cho việc thực hiện chiến lược lâu dài

Rủi ro chiến lược

  1. Thêm chi phí có thể xảy ra trong một thị trường bất ổn
  2. EMA có thể không phản ứng kịp thời khi quay ngược nhanh
  3. Mức ADX cố định có thể cần điều chỉnh theo môi trường thị trường khác nhau
  4. Multilayer Stop Stop có thể giảm vị thế quá sớm trong xu hướng đơn phương Các biện pháp giảm thiểu:
  • ADX có thể được điều chỉnh theo các biến động của chu kỳ thị trường khác nhau
  • Xem xét tăng các chỉ số xác nhận xu hướng
  • Tối ưu hóa tham số chi tiết hơn cho tỷ lệ dừng

Hướng tối ưu hóa chiến lược

  1. Tiếp tục giới thiệu các chỉ số giao dịch để tăng cường xác nhận xu hướng
  2. Điều chỉnh ADX theo biến động của thị trường
  3. Tối ưu hóa tỷ lệ phân bổ vị trí ở cấp độ ngăn chặn
  4. Tăng cường độ của xu hướng để đáp ứng các chiến lược dừng khác nhau
  5. Xem xét thêm các yếu tố theo mùa và phán đoán chu kỳ thị trường

Tóm tắt

Đây là một chiến lược theo dõi xu hướng có cấu trúc, logic rõ ràng, cân bằng lợi nhuận và rủi ro bằng nhiều tầng dừng và dừng động. Thiết kế tổng thể của chiến lược phù hợp với các nguyên tắc cơ bản của giao dịch định lượng, có khả năng mở rộng và tối ưu hóa tốt.

Mã nguồn chiến lược
/*backtest
start: 2024-03-06 18:40:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("BTC Optimized Strategy v6", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// === 參數設定 ===
lengthEMA = input(50, title="EMA 週期")
adxLength = input(14, title="ADX 週期")
atrLength = input(14, title="ATR 週期")
riskReward = input(2.0, title="風險報酬比")
tp1_ratio = input(1.0, title="TP1 (ATR 倍數)")
tp2_ratio = input(2.0, title="TP2 (ATR 倍數)")
trailATR = input(3.0, title="移動止盈 ATR 倍數")

// === 計算技術指標 ===
ema = ta.ema(close, lengthEMA)
atr = ta.atr(atrLength)

// === 計算 ADX ===
upMove = math.max(high - nz(high[1], high), 0)
downMove = math.max(nz(low[1], low) - low, 0)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1], close))), math.abs(low - nz(close[1], close)))
plusDM = upMove > downMove and upMove > 0 ? upMove : 0
minusDM = downMove > upMove and downMove > 0 ? downMove : 0
plusDI = 100 * ta.rma(plusDM, adxLength) / ta.rma(tr, adxLength)
minusDI = 100 * ta.rma(minusDM, adxLength) / ta.rma(tr, adxLength)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)

// === 趨勢過濾條件 ===
isTrending = adx > 20

// === 進場條件 ===
longCondition = ta.crossover(close, ema) and isTrending
shortCondition = ta.crossunder(close, ema) and isTrending

// === 計算止損、止盈價格 ===
longStopLoss = low - atr
shortStopLoss = high + atr
longTP1 = close + tp1_ratio * atr
longTP2 = close + tp2_ratio * atr
shortTP1 = close - tp1_ratio * atr
shortTP2 = close - tp2_ratio * atr

// === 設定進場和出場 ===
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long_Exit1", from_entry="Long", qty_percent=30, limit=longTP1, stop=longStopLoss)
    strategy.exit("Long_Exit2", from_entry="Long", qty_percent=50, limit=longTP2, stop=longStopLoss)
    strategy.exit("Long_Trail", from_entry="Long", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short_Exit1", from_entry="Short", qty_percent=30, limit=shortTP1, stop=shortStopLoss)
    strategy.exit("Short_Exit2", from_entry="Short", qty_percent=50, limit=shortTP2, stop=shortStopLoss)
    strategy.exit("Short_Trail", from_entry="Short", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

// === 當價格超過 TP2 後,自動平倉 ===
if close >= longTP2
    strategy.close("Long")

if close <= shortTP2
    strategy.close("Short")

// === 畫圖標示 ===
plotshape(series=longCondition, location=location.belowbar, color=color.blue, style=shape.labelup, title="買入")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="賣出")
plot(ema, color=color.orange, title="EMA")