Der DMI-Indikator wird auch als Momentum-Indikator oder Trend-Indikator bezeichnet, der vollständige Name ist
Der DMI-Indikator ist eine Veränderung des Gleichgewichtspunktes der Käufer und Verkäufer im Prozeß des Preissteigerns und -abstiegs, d. h. die Veränderung der Stärke sowohl der Long- als auch der Short-Seiten wird durch die Preisschwankungen beeinflusst, und der zyklische Prozeß vom Gleichgewicht zum Ungleichgewicht tritt ein, wodurch ein technischer Indikator zur Beurteilung des Trends hergestellt wird.
Vor kurzem haben mich einige Freunde im Quantitative Trading-Geschäft gebeten, mir zu erklären, wie man den DMI-Indikator auf der Quantitative Trading-Plattform von FMZ Quant nutzt. Ich dachte, es sei ein sehr einfaches Problem, und ich öffnete die API-Dokumentation, um diese Indikatorfunktion zu finden. Ich fand heraus, dass dieser Indikator nicht in der
Es stellt sich heraus, dass dieser Indikator aus vier Indikatoren besteht. Der Algorithmus ist nicht sehr kompliziert.
Adresse des Algorithmushttps://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]
}
Mit der Datenbibliothek von FMZ Quant ist es einfach, ein Diagramm zu zeichnen und DMI mit anderen Diagrammen zu vergleichen.
Wenn die Indikatorwerte auf mehreren k-Linienbalken verglichen werden, sind die Werte grundsätzlich gleich (leicht abgerundete Abweichung).
Direkt die DMI-Funktion verwenden (z. B. wie in der Hauptfunktion im Beispiel genannt), die Daten der K-Linie übergeben, die Indikatorparameter festlegen, die im Allgemeinen 14 sind.
Die von der Funktion zurückgegebenen Daten sind ein zweidimensionales Array, das vier Zeilen darstellt.
DI-: m_di DI+: p_di AdX: adx AdXR: adxr
Unter diesen vier Linien des DMI-Indikators sind DI- und DI+ Long- und Short-Indikatoren, die die Stärke sowohl der Long- als auch der Shortposition widerspiegeln.
AdX und adXR sind ein Paar von Indikatorlinien, die zusammen verwendet werden und Trendindikatoren darstellen, die den aktuellen Markttrend und -richtung widerspiegeln.
DI+, je höher der Indikatorwert, desto stärker ist der aktuelle Bullenmarkt, andernfalls desto schwächer der Bullenmarkt. DI, das Gegenteil von oben. DI+, DI- sind häufig miteinander verflochten, und je näher der Wert zwischen ihnen liegt, desto länger ist der Markt in einer Sackgasse.
Wenn nach einem langfristigen Preisrückgang kurzfristig folgende Bedingungen erfüllt sind, bedeutet dies, dass der kurzfristige Preistief erreicht wurde und es zu einem Aufschwung oder einer Umkehrung kommen kann.
Die DI+-Linie, die die Long-Buy-Strength darstellt, liegt unter 10, die Linie wird in der Überverkaufsposition nach oben gedreht und die DI-Linie befindet sich in der Hochposition.
Die AdX-Linie, die den Trend repräsentiert, befindet sich in einer höheren Position über 65, dreht sich nach unten und bildet eine Abkreuzung mit der adXR-Linie.
Wenn nach einem langfristigen Anstieg kurzfristig folgende Bedingungen erfüllt sind, ist der kurzfristige Höchstpreis erreicht und es können kurzfristige Anpassungen oder Umkehrungen auftreten.
Die DI-Linie, die die Leerverkaufsstärke darstellt, liegt unter 10, die Linie wird an der niedrigen Position nach oben gedreht und die DI+-Linie ist an der hohen Position.
Die AdX-Linie, die den Trend repräsentiert, befindet sich in einer höheren Position über 65, dreht sich nach unten und bildet eine Abkreuzung mit der adXR-Linie.
Nach einer Periode von Schwankungen in der Preisbewegung werden die vier Indikatorlinien des DMI