ADX, MA và EMA Long Only Trend Tracking Strategy

Tác giả:ChaoZhang, Ngày: 2024-01-29 11:30:15
Tags:

img

Tổng quan

Chiến lược này chủ yếu sử dụng chỉ số ADX để đánh giá xu hướng và kết hợp các đường trung bình động MA và EMA với các thiết lập tham số khác nhau để xây dựng một chiến lược theo dõi xu hướng chỉ dài. Khi ADX tăng, nó chỉ ra một hướng dài. Khi giá vượt qua đường MA và EMA tăng, mở các vị trí dài. Khi ADX giảm hoặc giá giảm dưới MA hoặc EMA, đóng các vị trí.

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

Chiến lược này chủ yếu sử dụng ADX để đánh giá xu hướng và sức mạnh của thị trường. ADX tính toán mức độ và hướng thay đổi giá để xác định sự tồn tại và sức mạnh của xu hướng. Khi ADX tăng, điều đó có nghĩa là hiện đang có xu hướng tăng. Khi ADX giảm, điều đó có nghĩa là xu hướng đang suy yếu.

Chiến lược này cũng sử dụng hai đường trung bình động, MA và EMA, với các thiết lập tham số khác nhau làm phán đoán phụ trợ. Chúng có thể lọc hiệu quả sự ngẫu nhiên của giá và hiển thị hướng xu hướng chính của giá. Khi giá tăng và phá vỡ MA và EMA, đó là tín hiệu dài. Khi giá giảm và phá vỡ, đó là tín hiệu đóng cửa.

Kết hợp các đặc điểm của ADX và đường trung bình động, chiến lược xây dựng các tín hiệu giao dịch để đánh giá hướng xu hướng: đi dài khi ADX tăng và giá vượt qua MA và EMA tăng, và đóng các vị trí khi ADX giảm hoặc giá vượt qua MA / EMA. Nó thực hiện một chiến lược theo dõi xu hướng chỉ dài.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Sử dụng ADX để đánh giá sức mạnh của xu hướng, giảm các giao dịch không hợp lệ và theo dõi xu hướng.
  2. Kết hợp hai đường trung bình động với các thiết lập tham số khác nhau có thể xác định hiệu quả xu hướng.
  3. Chỉ có các vị trí dài tránh các hoạt động đảo ngược thường xuyên và mất trượt.
  4. Các điều kiện nhập cảnh nghiêm ngặt có thể kiểm soát rủi ro hiệu quả.
  5. Thực hiện một chiến lược theo dõi xu hướng dài.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Chỉ số ADX có độ trễ, có thể bỏ lỡ điểm đầu vào tốt nhất.
  2. Chỉ có các vị trí dài không thể lợi nhuận từ thị trường giảm.
  3. Có một rủi ro mất mát nhất định khi xu hướng thay đổi.
  4. Cài đặt tham số không chính xác cũng ảnh hưởng đến hiệu suất chiến lược.

Giải pháp:

  1. Điều chỉnh các thông số ADX để giảm chậm hợp lý.
  2. Thiết lập stop loss để kiểm soát single loss.
  3. Kiểm tra và tối ưu hóa các thông số để chọn tốt nhất.

Tối ưu hóa

Chiến lược có thể được tối ưu hóa từ các khía cạnh sau:

  1. Thêm một chiến lược dừng lỗ để kiểm soát tốt hơn rủi ro.
  2. Thêm quản lý vị trí để điều chỉnh các vị trí một cách năng động dựa trên điều kiện thị trường.
  3. Kiểm tra và tối ưu hóa các thông số để tìm ra sự kết hợp tốt nhất.
  4. Thêm các thuật toán học máy để tối ưu hóa các tham số một cách năng động.
  5. Xây dựng các chiến lược Martingale để giảm tác động của tỷ lệ lợi nhuận.

Kết luận

Nói chung, đây là một chiến lược theo dõi xu hướng chỉ dài sử dụng ADX để đánh giá sức mạnh xu hướng và hai đường trung bình động như bộ lọc phụ trợ. Nó kiểm soát hiệu quả sự xuất hiện của các giao dịch không hợp lệ và đạt được hiệu quả theo dõi xu hướng. Đây là một chiến lược chỉ dài tương đối ổn định. Với một số tối ưu hóa, sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm.


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

//@version=4
strategy("ADX, MA, and EMA Long Strategy - ADX Trending Up", shorttitle="ADX_MA_EMA_Long_UpTrend", overlay=true)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
maPeriod = input(50, title="MA Period")
emaPeriod = input(50, title="EMA Period")
dirmov(len) =>
    up = change(high)
    down = -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 = rma(tr, len)
    plus = fixnan(100 * rma(plusDM, len) / truerange)
    minus = fixnan(100 * rma(minusDM, len) / truerange)
    [plus, minus]
adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
maValue = sma(close, maPeriod)
emaValue = ema(close, emaPeriod)
longCondition = sig > sig[1] and close > maValue and close > emaValue
if (longCondition)
    strategy.entry("Long", strategy.long)
exitCondition = sig < sig[1] or  close < maValue or close < emaValue
if (exitCondition)
    strategy.close("Long")
plot(maValue, color=color.blue, title="MA")
plot(emaValue, color=color.orange, title="EMA")
plot(sig, color=color.red, title="ADX")


Thêm nữa