Chiến lược theo xu hướng với 3 EMA, DMI và MACD

Tác giả:ChaoZhang, Ngày: 2024-01-25 15:48:59
Tags:

img

Tổng quan

Đây là một chiến lược theo xu hướng kết hợp 3 Mức trung bình chuyển động nhân tố (EMA) với Chỉ số chuyển động theo hướng (DMI) và chỉ số Chuyển động trung bình hội tụ (MACD) để xác định hướng xu hướng và tạo ra tín hiệu mua / bán. Các thành phần chính bao gồm tín hiệu chéo EMA, DMI cho sức mạnh xu hướng và MACD để xác nhận đà.

Chiến lược logic

Lý thuyết cốt lõi dựa trên 3 EMA - 34, 89 và 200 - được tính trên khung thời gian M5 để xác định xu hướng tổng thể.

Các tín hiệu mua được kích hoạt khi:

  • Giá đóng vượt trên 34 EMA
  • +DI (chuyển động theo hướng tăng) > 17
  • ADX (sức mạnh xu hướng) > -DI

Các tín hiệu bán được tạo ra khi:

  • Giá đóng vượt dưới 34 EMA
  • -DI (chuyển động theo hướng giảm) > 17
  • ADX > +DI

Sự xác nhận bổ sung đến từ chỉ số MACD trước khi ghi.

Ưu điểm

Chiến lược này có một số lợi thế chính:

  1. Nhận định hướng xu hướng sớm bằng cách sử dụng đường chéo EMA ngắn hạn
  2. Sử dụng nhiều EMA để đánh giá sức mạnh xu hướng trên các khung thời gian khác nhau
  3. Các bộ lọc DMI giúp tránh tín hiệu sai bằng cách kiểm tra chuyển động theo hướng mạnh mẽ
  4. MACD cung cấp xác nhận động lực cho các thiết lập xác suất cao hơn
  5. Kết hợp các chỉ số cải thiện độ chính xác và thời gian ghi

Rủi ro

Những rủi ro chính cần xem xét:

  1. Whipsaws và tín hiệu sai nếu chỉ sử dụng EMA crossover
  2. Sự chậm trễ tiềm năng trong việc tạo tín hiệu từ nhiều xác nhận
  3. Thể bị tổn thương bởi sự đảo ngược xu hướng đột ngột

Phương pháp giảm thiểu:

  • Sử dụng mức dừng lỗ thích hợp, kích thước vị trí
  • Tối ưu hóa chiều dài EMA cho điều kiện thị trường hiện tại
  • Xem hành động giá để xác nhận trực quan

Cơ hội gia tăng

Các cải tiến khác cho chiến lược:

  1. Thêm các bộ lọc bổ sung như RSI cho mức mua quá mức / bán quá mức
  2. Kết hợp phân tích âm lượng cho tín hiệu mạnh hơn
  3. Kiểm tra và tối ưu hóa các chỉ số và cài đặt dựa trên tài sản và khung thời gian
  4. Sử dụng máy học để liên tục học hỏi từ dữ liệu thị trường mới

Kết luận

Tóm lại, đây là một hệ thống theo dõi xu hướng mạnh mẽ kết hợp các chỉ số đơn giản nhưng mạnh mẽ để giao dịch theo hướng xu hướng hiện hành. Cấu hình EMA ba đo xu hướng nhiều khung thời gian trong khi kiểm tra DMI và MACD tăng thời gian và xác suất nhập lợi nhuận. Với tối ưu hóa và quản lý rủi ro thích hợp, nó có thể là một bổ sung hiệu quả cho các nhà giao dịch xu hướng.


/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("2 EMA di+ Buy Sell, strategy ", overlay=true)

// Define the EMA calculation function
ema(src, length) =>
    ta.ema(src, length)

// Calculate and plot EMA on M5
ema34_M5 = ema(close, 34)
ema89_M5 = ema(close, 89)
ema200_M5 = ema(close, 200)

// Plot EMAs
plot(ema34_M5, color=color.green, title="EMA 34 M5", linewidth=2)
plot(ema89_M5, color=color.blue, title="EMA 89 M5", linewidth=2)
plot(ema200_M5, color=color.black, title="EMA 200 M5", linewidth=2)

// Define DMI parameters
len = input(14, title="DI Length")
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)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur

// Calculate ADX
adxValue = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI == 0 ? 1 : plusDI + minusDI), len)

// Define MACD parameters
fastLength = input(12, title="Fast Length")
slowLength = input(26, title="Slow Length")
signalLength = input(9, title="Signal Length")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalLength)

// Create buy/sell conditions
buyCondition = close > ema34_M5 and plusDI > 17 and adxValue > minusDI 
sellCondition = close < ema34_M5 and minusDI > 17 and adxValue > plusDI 

// Strategy logic
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.entry("Sell", strategy.short, when = sellCondition)

// Create alerts for buy/sell signals
alertcondition(buyCondition, title="Buy Signal", message="Buy Signal")
alertcondition(sellCondition, title="Sell Signal", message="Sell Signal")

// Plot buy/sell arrows on the price chart
bgcolor(buyCondition ? color.new(color.green, 90) : sellCondition ? color.new(color.red, 90) : na)

plotarrow(buyCondition ? 1 : sellCondition ? -1 : na, colorup=color.new(color.green, 0), colordown=color.new(color.red, 0), offset=-1)


Thêm nữa