Start · Sprachen · PHP · Referenz · trader_plus_dm

trader_plus_dm

Funktion

Berechnet die positive gerichtete Bewegung (Plus DM) für eine Zeitreihe aus Hoch- und Tiefpreisen.

Kategorie: math

Signatur

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

Beschreibung

trader_plus_dm ist Teil der TRADER-Erweiterung für PHP, die auf der TA-Lib-Bibliothek basiert. Die Funktion berechnet den Plus Directional Movement (+DM), eine Komponente des Directional Movement Systems von J. Welles Wilder. +DM gibt an, ob die aktuelle Aufwärtsbewegung stärker ist als die Abwärtsbewegung des gleichen Zeitraums.

+DM wird berechnet, indem für jeden Zeitraum die Differenz zwischen dem aktuellen Hoch und dem vorherigen Hoch mit der Differenz zwischen dem vorherigen Tief und dem aktuellen Tief verglichen wird. Ist die Aufwärtsbewegung größer und positiv, wird dieser Wert als +DM übernommen, andernfalls ist +DM null. Über den timePeriod-Parameter wird ein gleitender Durchschnitt dieser Werte berechnet.

+DM wird typischerweise zusammen mit trader_plus_di (Plus Directional Indicator), trader_minus_dm und dem ADX-Indikator verwendet, um Trendstärke und -richtung zu analysieren. Diese Kombination ist besonders nützlich im algorithmischen Handel, um Kauf- und Verkaufssignale zu erzeugen.

Die Funktion erwartet parallele Arrays mit Hochs und Tiefs in chronologischer Reihenfolge und gibt ein Array mit den berechneten +DM-Werten zurück. Beachte, dass die Ausgabe kürzer ist als die Eingabe, da für die ersten Perioden keine Werte berechnet werden können (Lookback-Periode).

Parameter

Name Typ Default Beschreibung
$high Pflicht array Array mit den Höchstkursen (High-Preisen) in chronologischer Reihenfolge. Muss dieselbe Länge wie low haben.
$low Pflicht array Array mit den Tiefstkursen (Low-Preisen) in chronologischer Reihenfolge. Muss dieselbe Länge wie high haben.
$timePeriod int 14 Anzahl der Perioden für die Berechnung des geglätteten +DM. Typischerweise wird der Standardwert 14 verwendet, gültige Werte liegen zwischen 2 und 100000.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein indiziertes Array mit den berechneten Plus-DM-Werten zurück. Die Anzahl der Rückgabewerte ist geringer als die Eingabelänge (Lookback = timePeriod - 1). Bei einem Fehler (z. B. ungültige Eingabe oder nicht installierte TRADER-Erweiterung) wird false zurückgegeben.

Beispiele

Einfache Plus-DM-Berechnung

<?php
// Beispiel-Kursdaten (High und Low)
$high = [50.5, 51.2, 52.0, 51.8, 53.1, 54.0, 53.5, 55.0, 54.8, 56.2,
         57.0, 56.5, 58.0, 57.5, 59.0, 58.8, 60.0, 59.5, 61.0, 60.5];
$low  = [49.0, 50.0, 50.5, 50.2, 51.5, 52.5, 52.0, 53.5, 53.0, 54.5,
         55.5, 55.0, 56.5, 56.0, 57.5, 57.2, 58.5, 58.0, 59.5, 59.0];

$timePeriod = 5;
$plusDm = trader_plus_dm($high, $low, $timePeriod);

if ($plusDm === false) {
    echo "Fehler bei der Berechnung (TRADER-Erweiterung installiert?)\n";
} else {
    echo "Plus DM Werte (Periode: $timePeriod):\n";
    foreach ($plusDm as $index => $value) {
        printf("Index %2d: %.4f\n", $index, $value);
    }
}
Plus DM Werte (Periode: 5): Index 4: 4.0000 Index 5: 5.0000 ...

Kombination von +DM und -DM für Trendanalyse

<?php
// Typische Verwendung im Direktionalen Bewegungssystem
$high = [44.34, 44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.15,
         43.61, 44.33, 44.83, 45.10, 45.15, 43.61, 44.33];
$low  = [43.61, 43.61, 43.61, 43.01, 43.34, 43.61, 44.01, 44.33,
         43.01, 43.34, 43.61, 44.01, 44.33, 43.01, 43.34];

$period = 5;
$plusDm  = trader_plus_dm($high, $low, $period);
$minusDm = trader_minus_dm($high, $low, $period);

if ($plusDm !== false && $minusDm !== false) {
    $keys = array_keys($plusDm);
    foreach ($keys as $i) {
        $direction = $plusDm[$i] > $minusDm[$i] ? 'Aufwärtstrend' : 'Abwärtstrend';
        printf("Index %2d: +DM=%.4f, -DM=%.4f => %s\n",
            $i, $plusDm[$i], $minusDm[$i], $direction);
    }
} else {
    echo "Fehler bei der Berechnung.\n";
}

// Wichtig · Fallstricke

Lookback-Periode: Die Anzahl der berechneten Ausgabewerte ist um timePeriod - 1 geringer als die Anzahl der Eingabewerte. Die ersten Einträge im Ergebnisarray beginnen daher nicht bei Index 0, sondern bei Index timePeriod - 1.

Voraussetzung: Die TRADER-PHP-Erweiterung muss installiert und aktiviert sein (pecl install trader). Sie ist nicht standardmäßig in PHP enthalten. Alternativ kann die Bibliothek über Composer mit einem kompatiblen Paket eingebunden werden.

Datenkonsistenz: Die Arrays high und low müssen exakt dieselbe Länge haben und konsistente, aufeinander folgende OHLC-Daten enthalten. Fehlende oder falsch sortierte Werte führen zu falschen Ergebnissen oder false.