Chiến lược này được gọi là
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à:
Khi ADX trên 45, xu hướng được coi là rất dốc.
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.
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.
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())