Start · Sprachen · PHP · Referenz · trader_minus_dm

trader_minus_dm

Funktion

Berechnet die negative gerichtete Bewegung (Minus DM) für eine Zeitreihe von Hoch- und Tiefkursen.

Kategorie: math

Signatur

trader_minus_dm(array $high, array $low, int $timePeriod = 14): array|false

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 timePeriod bestimmt 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

Typ
array|false
Beschreibung
Gibt ein numerisches Array mit den berechneten Minus-DM-Werten zurück. Die ersten 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);
    }
}
Periode 13: Minus DM = 0.0000

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.