Chiến lược chỉ báo xu hướng trung bình động ADX


Ngày tạo: 2024-01-15 15:32:45 sửa đổi lần cuối: 2024-01-15 15:32:45
sao chép: 0 Số nhấp chuột: 584
1
tập trung vào
1617
Người theo dõi

Chiến lược chỉ báo xu hướng trung bình động ADX

Tổng quan

Chiến lược chỉ số xu hướng trung bình động ADX là một chiến lược giao dịch định lượng sử dụng chỉ số ADX để đánh giá sức mạnh của xu hướng thị trường và hướng của xu hướng. Chiến lược này đánh giá thị trường có xu hướng hay không bằng cách tính toán chỉ số hướng trung bình ((ADX) và đánh giá hướng của xu hướng bằng cách tính toán chỉ số tích cực ((DI +) và chỉ số tiêu cực ((DI -)) để tạo ra tín hiệu mua và bán.

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

Chiến lược này đầu tiên sử dụng chỉ số ADX để xác định thị trường có xu hướng hay không. ADX cao hơn giá trị quan trọng mà người dùng đặt ra (định nghĩa mặc định là 23), cho thấy thị trường đang có xu hướng mạnh. Khi giá trị hiện tại của ADX cao hơn giá trị n ngày trước ADX (định nghĩa mặc định là n ngày xem lại cho người dùng), cho thấy ADX đang tăng và xu hướng thị trường đang hình thành.

Chiến lược sau đó sử dụng DI+ và DI- để xác định hướng của xu hướng thị trường. Khi DI+ cao hơn DI-, thị trường có xu hướng tăng; khi DI+ thấp hơn DI-, thị trường có xu hướng giảm.

Cuối cùng, tổng hợp chiến lược đánh giá ADX và DI, tạo ra các tín hiệu mua và bán cụ thể:

  1. Khi ADX tăng lên, cao hơn giá trị quan trọng và DI + cao hơn DI-, tạo ra tín hiệu mua
  2. Khi ADX tăng, cao hơn giá trị quan trọng và DI + thấp hơn DI-, tạo ra tín hiệu bán
  3. Khi ADX chuyển sang giảm, tạo ra tín hiệu đồng bằng

Chiến lược này cũng cung cấp các tính năng như lọc trung bình di chuyển và phạm vi thời gian phản hồi tùy chỉnh, có thể được cấu hình theo nhu cầu.

Phân tích lợi thế

Chiến lược chỉ số xu hướng trung bình động của ADX có những ưu điểm sau:

  1. Có thể tự động xác định xu hướng thị trường và tránh giao dịch vô hiệu
  2. Có thể tự động đánh giá xu hướng thị trường, theo dõi xu hướng
  3. Cung cấp logic rõ ràng để mua khi có xu hướng / bán khi xu hướng biến mất
  4. Có thể cấu hình trung bình di chuyển để lọc, tránh phá vỡ giả
  5. Có thể cấu hình lại phạm vi thời gian để kiểm tra lịch sử
  6. Chỉ số và tham số có thể điều chỉnh, có thể được tối ưu hóa cho các giống khác nhau

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Chỉ số ADX bị tụt hậu, có thể bỏ lỡ cơ hội sớm trong xu hướng
  2. Đánh giá đa không gian phụ thuộc vào chỉ số DI, chỉ số DI nhạy cảm, có thể tạo ra tín hiệu sai
  3. Bộ lọc trung bình di chuyển có thể bỏ lỡ cơ hội đường ngắn
  4. Phạm vi thời gian phản hồi không phù hợp có thể dẫn đến quá phù hợp
  5. Thiết lập tham số chỉ số không đúng có thể ảnh hưởng đến hiệu quả của chính sách

Để giảm thiểu nguy cơ, bạn có thể xem xét:

  1. Giảm thiểu sự chậm trễ của ADX
  2. Điều chỉnh hoặc xóa bộ lọc DI để tránh tín hiệu sai
  3. Giảm chu kỳ trung bình di chuyển thích hợp
  4. Mở rộng phạm vi thời gian phản hồi, kiểm tra toàn bộ mẫu
  5. Tối ưu hóa các tham số chỉ số để tìm thiết lập tốt nhất

Hướng tối ưu hóa

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

  1. Kết hợp nhiều cổ phiếu để thử nghiệm kết hợp, phân tán rủi ro của một cổ phiếu
  2. Thêm logic dừng lỗ để kiểm soát tổn thất đơn
  3. Kết hợp với các chỉ số khác để xác minh kết hợp, tăng độ chính xác tín hiệu
  4. Tiếp theo, chúng tôi sẽ giới thiệu một thuật toán học máy để đánh giá các tín hiệu mua và bán.
  5. Thêm mô-đun tối ưu hóa tham số tự động để thực hiện điều chỉnh tham số động

Tóm tắt

Chiến lược chỉ số xu hướng trung bình động ADX sử dụng ADX để xác định xu hướng và DI để xác định xu hướng, tạo ra tín hiệu giao dịch khi có xu hướng, chiến lược tư duy rõ ràng. Chiến lược này có thể tự động xác định xu hướng, theo dõi xu hướng, tránh giao dịch không hiệu quả ở thị trường không xu hướng. Với một số tối ưu hóa, chiến lược này có thể trở thành một công cụ mạnh mẽ để định lượng giao dịch đường dài và trung bình.

Mã nguồn chiến lược
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e 
//The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). 
//This is to identify when it is trending.
//It then looks at the DMI levels.  If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition.  Opposite for short.
//Can use a user-defined moving average to filter long/short if desried.
// NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH.

strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
// ADX Info
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(23, title="Keylevel for ADX")
adxLookback = input(3, title="Lookback Period for Slope")

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 200, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    close

// == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH
[diplus, diminus, adx] = dmi(dilen, adxlen)

buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus  and close >= maFilterCheck
// buySignalValue = valuewhen(buySignal, close, 0)
shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus  and close <= maFilterCheck
// shortSignalValue = valuewhen(shortSignal, close, 0)
sellCoverSignal = adx[0]-adx[adxLookback] < 0

// == ENTRY & EXIT CRITERIA
// Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal).
// (1): Price is over the 200 EMA line. (EMA level configurable by the user)
// (2): "D+" is OVER the "D-" line
// (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70)
// 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal

// == STRATEGY ENTRIES/EXITS == 
strategy.entry("Long", strategy.long, when = buySignal)
strategy.close("Long", when = sellCoverSignal)
strategy.entry("Short", strategy.short, when = shortSignal)
strategy.close("Short", when = sellCoverSignal)
    
// == ALERTS == 
// alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy')
// alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')