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

Tác giả:ChaoZhang, Ngày: 2023-09-13 17:02:31
Tags:

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. Nó sử dụng chỉ số ADX để đánh giá sức mạnh xu hướng và nắm bắt các cơ hội đảo ngược khi mua quá mức / bán quá mức.

ADX là viết tắt của Chỉ số hướng trung bình, phản ánh sức mạnh của một xu hướng. Giá trị ADX càng cao, xu hướng càng mạnh. ADX trên 25 cho thấy một xu hướng đáng kể đang có mặt.

DMI bao gồm các đường DI + và DI-. DI + trên DI- cho thấy xu hướng tăng, trong khi DI - trên DI + báo hiệu xu hướng giảm.

Logic giao dịch là:

  1. Khi ADX trên 45, xu hướng được coi là rất dốc.

  2. Nếu DI + thấp hơn DI- thì nó báo hiệu trạng thái bán quá mức và cơ hội đảo ngược xu hướng, đi dài.

  3. Ngược lại, nếu DI- thấp hơn DI+, nó cho thấy các điều kiện mua quá mức và cơ hội đảo ngược để đi ngắn.

  4. Lấy lợi nhuận kịp thời sau khi đảo ngược.

Ưu điểm là sử dụng ADX để xác định các điểm đảo ngược xu hướng mạnh. Giá trị ADX cao lọc các tín hiệu sai từ các thị trường khác nhau một cách hiệu quả. Nhưng các tham số ADX cần tối ưu hóa và dừng lỗ cũng rất quan trọng.

Tóm lại, ADX rất giỏi trong việc đo lường thời gian đảo ngược xu hướng mạnh mẽ.


/*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())

Thêm nữa