Signatur
Beschreibung
trader_minus_dm gehört zur TRADER-Erweiterung (Technical Analysis Library – TA-Lib) für PHP und berechnet den Minus Directional Movement (-DM). Der -DM ist ein Bestandteil des von J. Welles Wilder entwickelten Directional Movement Systems und misst die Stärke einer Abwärtsbewegung im Vergleich zur vorherigen Periode.
Der Wert gibt an, um wie viel der aktuelle Tiefstkurs unter dem vorherigen Tiefstkurs liegt, sofern diese Differenz größer ist als die entsprechende Aufwärtsbewegung (+DM). Andernfalls ist der -DM gleich 0. In Kombination mit dem trader_plus_dm und dem Average True Range (trader_atr) lässt sich daraus der Directional Index (-DI) ableiten.
Typische Anwendungsgebiete sind Trendstärke-Analysen in Handelssystemen: Übersteigt der -DI den +DI, ist ein Abwärtstrend dominierend. Die Funktion gibt ein numerisches Array mit den berechneten -DM-Werten zurück, wobei die ersten Ergebnisse aufgrund des Berechnungszeitraums fehlen (Look-ahead-Offset).
- Eingabedaten müssen zeitlich geordnet (älteste Werte zuerst) und gleich lang sein.
- Der Parameter
timePeriodbestimmt die Glättungsperiode (standardmäßig 14).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $high Pflicht | array | Numerisches Array mit den Höchstkursen (High) der einzelnen Perioden, zeitlich aufsteigend sortiert. | |
| $low Pflicht | array | Numerisches Array mit den Tiefstkursen (Low) der einzelnen Perioden, zeitlich aufsteigend sortiert. Muss dieselbe Länge wie high haben. |
|
| $timePeriod | int | 14 | Anzahl der Perioden für die Glättung des -DM-Wertes. Muss im Bereich von 2 bis 100000 liegen. Standard ist 14 (empfohlen von Wilder). |
Rückgabewert
timePeriod - 1 Einträge fehlen, da für die Berechnung ausreichend historische Daten benötigt werden. Bei ungültigen Eingaben oder Fehlern wird false zurückgegeben.Beispiele
Einfache Berechnung des Minus DM für eine Kursreihe
<?php
// Beispielhafte Hoch- und Tiefkurse einer Aktie (14 Tage)
$high = [102.5, 103.0, 101.8, 104.2, 105.0, 103.5, 106.1, 107.0, 105.8, 108.3, 107.5, 109.0, 108.2, 110.1];
$low = [100.1, 101.2, 99.5, 102.0, 103.3, 101.0, 104.5, 105.2, 103.7, 106.1, 105.0, 107.3, 106.0, 108.5];
$minusDM = trader_minus_dm($high, $low, 14);
if ($minusDM === false) {
echo 'Fehler bei der Berechnung.' . PHP_EOL;
} else {
foreach ($minusDM as $index => $value) {
printf("Periode %2d: Minus DM = %.4f\n", $index, $value);
}
}
Vergleich von Minus DM und Plus DM zur Trendrichtungsbestimmung
<?php
$high = [50, 52, 51, 53, 55, 54, 52, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38];
$low = [48, 49, 49, 50, 52, 51, 49, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35];
$timePeriod = 5;
$minusDM = trader_minus_dm($high, $low, $timePeriod);
$plusDM = trader_plus_dm($high, $low, $timePeriod);
if ($minusDM && $plusDM) {
$keys = array_keys($minusDM);
foreach ($keys as $i) {
$trend = $minusDM[$i] > $plusDM[$i] ? 'Abwärtstrend' : 'Aufwärtstrend';
printf("Periode %2d: -DM=%.4f +DM=%.4f => %s\n", $i, $minusDM[$i], $plusDM[$i], $trend);
}
}
// Wichtig · Fallstricke
Voraussetzung: Die TRADER-PHP-Erweiterung (ext-trader) muss installiert und aktiviert sein. Sie basiert auf der TA-Lib-Bibliothek. Unter Debian/Ubuntu: pecl install trader.
Array-Indizes: Das Ergebnis-Array beginnt nicht bei Index 0, sondern bei dem Index, ab dem ausreichend Daten für die Berechnung vorhanden sind (sog. lookback-Offset = timePeriod - 1). Beim Zugriff auf Ergebnisse immer array_keys() oder array_values() verwenden.
Eingabelänge: Beide Arrays (high und low) müssen exakt gleich lang sein und mindestens timePeriod Einträge enthalten, sonst gibt die Funktion false zurück.