Chỉ số DMI còn được gọi là chỉ số động lực hoặc chỉ số xu hướng, tên đầy đủ là Chỉ số chuyển động theo hướng (DMI). Nó được tạo ra bởi chuyên gia phân tích kỹ thuật người Mỹ Wells Wilder, nó là một phương pháp phân tích kỹ thuật thị trường trung và dài hạn.
Chỉ số DMI là một sự thay đổi ở điểm cân bằng của người mua và người bán trong quá trình tăng và giảm giá, nghĩa là sự thay đổi sức mạnh của cả hai bên dài và ngắn bị ảnh hưởng bởi biến động giá, và quá trình chu kỳ từ cân bằng đến mất cân bằng xảy ra, do đó cung cấp một chỉ số kỹ thuật để đánh giá xu hướng.
Gần đây, một số bạn bè trong kinh doanh giao dịch định lượng đã tham khảo ý kiến tôi về cách sử dụng chỉ số DMI trên nền tảng giao dịch định lượng FMZ Quant. Tôi nghĩ đó là một vấn đề rất đơn giản, và tôi đã mở tài liệu API để tìm hàm chỉ số này.
Nó được tìm thấy rằng chỉ số này bao gồm bốn chỉ số. thuật toán không quá phức tạp. Chỉ cần làm theo thuật toán sẽ ổn.
Địa chỉ thuật toán:https://www.fmz.com/strategy/154050
// indicator function
function AdX(MDI, PDI, adx_period) {
if(typeof(MDI) == "undefined" || typeof(PDI) == "undefined"){
Return false
}
if(MDI.length < 10 || PDI.length < 10){
Return false
}
/*
dX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
AdX = sma(dX, len)
*/
var dx = []
for(var i = 0; i < MDI.length; i++){
if(!MDI[i] || !PDI[i]){
continue
}
var dxValue = Math.abs((PDI[i] - MDI[i])) / (PDI[i] + MDI[i]) * 100
var obj = {
close : dxValue,
}
dx.push(obj)
}
if(dx.length < adx_period){
Return false
}
var adx = talib.SMA(dx, adx_period)
Return adx
}
function DMI(records, pdi_period, mdi_period, adxr_period, adx_period) {
var recordsHLC = []
for(var i = 0; i < records.length ; i++){
var bar = {
High : records[i].High,
Low : records[i].Low,
close : records[i].close,
}
recordsHLC.push(bar)
}
var m_di = talib.MINUS_DI(recordsHLC, mdi_period)
var p_di = talib.PLUS_DI(recordsHLC, pdi_period)
var adx = AdX(m_di, p_di, adx_period)
// adXR=(AdX of the day before the AdX+ AX)÷2
var n = 0
var adxr = []
for (var j = 0 ; j < adx.length; j++) {
if (typeof(adx[j]) == "number") {
n++
}
if (n >= adxr_period) {
var curradxr = (adx[j] + adx[j - adxr_period]) / 2
adxr.push(curradxr)
} else {
adxr.push(NaN)
}
}
Return [m_di, p_di, adx, adxr]
}
Sử dụng thư viện dữ liệu của FMZ Quant, dễ dàng vẽ biểu đồ và so sánh DMI với các biểu đồ khác.
So sánh các giá trị chỉ số trên một số thanh đường k, các giá trị về cơ bản là giống nhau (sự lệch tròn nhẹ).
Sử dụng trực tiếp chức năng DMI (như cách được gọi trong chức năng chính trong ví dụ), truyền dữ liệu đường K, đặt các tham số chỉ số, thường là 14.
Dữ liệu được trả về bởi hàm là một mảng hai chiều đại diện cho bốn đường.
DI-: m_di DI+: p_di AdX: adx adXR: adxr
Trong số bốn dòng chỉ số DMI này, DI- và DI + là các chỉ số dài và ngắn, phản ánh sức mạnh của cả hai vị trí dài và ngắn.
AdX và adXR là một cặp đường chỉ số được sử dụng cùng nhau, đó là các chỉ số xu hướng, phản ánh xu hướng và hướng của thị trường hiện tại.
DI +, giá trị chỉ số càng cao, thị trường tăng hiện tại càng mạnh, nếu không thì thị trường tăng càng yếu. DI, trái ngược với trên. DI +, DI- thường đan xen nhau, và giá trị càng gần nhau, thị trường bị bế tắc.
Sau khi giảm giá lâu dài, nếu các điều kiện sau được đáp ứng trong ngắn hạn, nó cho thấy rằng giá ngắn hạn đã đạt đến đáy và có thể có sự phục hồi hoặc đảo ngược.
Đường DI + đại diện cho sức mạnh mua dài dưới 10, và đường được xoay lên ở vị trí quá bán, và đường DI ở vị trí cao.
Dòng AdX đại diện cho xu hướng ở vị trí cao hơn trên 65, quay xuống và tạo thành đường chéo xuống với đường adXR.
Sau khi tăng dài hạn, nếu các điều kiện sau được đáp ứng trong ngắn hạn, giá cao ngắn hạn đã đạt được và có thể có điều chỉnh hoặc đảo ngược ngắn hạn.
Đường DI đại diện cho sức mạnh bán tháo là dưới 10, và đường được xoay lên ở vị trí thấp, và đường DI + ở vị trí cao.
Dòng AdX đại diện cho xu hướng ở vị trí cao hơn trên 65, quay xuống và tạo thành đường chéo xuống với đường adXR.
Sau một khoảng thời gian biến động trong chuyển động giá, bốn đường chỉ số DMI