Chiến lược đảo ngược xu hướng dựa trên chỉ báo ADX


Ngày tạo: 2023-09-13 17:02:31 sửa đổi lần cuối: 2023-09-13 17:02:31
sao chép: 3 Số nhấp chuột: 915
1
tập trung vào
1617
Người theo dõi

Chiến lược này được gọi là chiến lược đảo ngược xu hướng dựa trên chỉ số ADX. Chiến lược này sử dụng chỉ số ADX để đánh giá cường độ của xu hướng và nắm bắt cơ hội đảo ngược khi quá mua quá bán.

ADX là chỉ số xu hướng trung bình, phản ánh cường độ của xu hướng. ADX càng cao, xu hướng càng mạnh. Khi ADX lớn hơn 25, xu hướng được coi là rõ ràng hơn.

DMI bao gồm hai dòng DI + và DI - . DI + biểu thị xu hướng tăng khi lên, và DI - biểu thị xu hướng giảm khi lên.

Logic giao dịch của chiến lược này:

  1. Khi ADX cao hơn 45, xu hướng được coi là rất mạnh.

  2. Nếu DI+ thấp hơn DI- thì đây là tình trạng bán quá mức, có cơ hội đảo ngược xu hướng và làm nhiều hơn.

  3. Ngược lại, nếu DI- thấp hơn DI +, nó được coi là quá mua, có cơ hội đảo ngược, làm trống.

  4. Sau khi quay lại, nó dừng lại kịp thời.

Lợi thế của chiến lược này là sử dụng ADX để xác định điểm đảo ngược của xu hướng mạnh, giá trị ADX cao có thể lọc hiệu quả các tín hiệu sai của thị trường chấn động. Tuy nhiên, các tham số ADX cần được tối ưu hóa và chiến lược dừng lỗ cũng rất quan trọng.

Nhìn chung, chỉ số ADX tốt hơn trong việc xác định thời gian thay đổi xu hướng mạnh mẽ. Tuy nhiên, các nhà giao dịch vẫn cần chú ý đến nhiều yếu tố khác, ADX chỉ là một trong những chỉ số hỗ trợ.

Mã nguồn chiến lược
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='DMI swings',title='DMI swings', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true        // create function "within window of time"

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)

//Entry 
strategy.entry(id="long", long = true, when = avg_dm > 45 and pos_dm < neg_dm and window())

//Exit
strategy.close("long", when = avg_dm > 45 and pos_dm > neg_dm and window())