Start · Sprachen · PHP · Referenz · trader_ppo

trader_ppo

Funktion

Berechnet den Percentage Price Oszillator (PPO) anhand einer Zeitreihe und gibt die Ergebniswerte als Array zurück.

Kategorie: math

Signatur

trader_ppo(array $real, int $fastPeriod = 12, int $slowPeriod = 26, int $mAType = TRADER_MA_TYPE_SMA): array|false

Beschreibung

Der Percentage Price Oszillator (PPO) ist ein Momentum-Indikator aus der technischen Analyse, der die prozentuale Differenz zwischen zwei gleitenden Durchschnitten unterschiedlicher Perioden darstellt. Im Gegensatz zum MACD, der die absolute Differenz anzeigt, normalisiert der PPO die Werte und macht damit Vergleiche zwischen verschiedenen Wertpapieren mit unterschiedlichem Preisniveau besser möglich.

Die Formel lautet: PPO = ((Fast MA - Slow MA) / Slow MA) * 100. Ein positiver PPO-Wert signalisiert bullisches Momentum (schneller gleitender Durchschnitt liegt über dem langsamen), ein negativer Wert signalisiert bärisches Momentum. Kreuzt der PPO die Nulllinie, wird dies häufig als Kauf- bzw. Verkaufssignal interpretiert.

Die Funktion gehört zur PHP-Erweiterung Trader (PECL trader), die auf der TA-Lib-Bibliothek basiert. Der Parameter mAType erlaubt die Wahl zwischen verschiedenen Arten von gleitenden Durchschnitten, z. B. SMA, EMA oder WMA, was eine flexible Anpassung an unterschiedliche Analyseanforderungen ermöglicht.

Das Ergebnis-Array ist kürzer als das Eingabe-Array, da für die Berechnung der ersten Werte nicht genügend historische Daten vorhanden sind (Lookback-Periode). Die Schlüssel des Rückgabe-Arrays beginnen daher nicht notwendigerweise bei 0.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisches Array mit den Eingabedaten (z. B. Schlusskurse einer Zeitreihe).
$fastPeriod int 12 Anzahl der Perioden für den schnellen gleitenden Durchschnitt. Muss kleiner als slowPeriod sein. Gültige Werte: 2–100000.
$slowPeriod int 26 Anzahl der Perioden für den langsamen gleitenden Durchschnitt. Muss größer als fastPeriod sein. Gültige Werte: 2–100000.
$mAType int TRADER_MA_TYPE_SMA Typ des gleitenden Durchschnitts. Mögliche Werte sind die TRADER_MA_TYPE_*-Konstanten, z. B. TRADER_MA_TYPE_SMA (0), TRADER_MA_TYPE_EMA (1), TRADER_MA_TYPE_WMA (2) usw.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array mit den berechneten PPO-Werten zurück. Die ersten Einträge des Eingabe-Arrays fehlen im Ergebnis (Lookback-Periode). Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache PPO-Berechnung mit Standardwerten

<?php
// Beispielhafte Schlusskurse
$closes = [
    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, 45.98, 45.77, 45.54,
    45.40, 45.15, 44.89, 44.36, 44.57, 43.67, 44.13, 44.34,
    44.09, 44.15, 43.61, 44.83, 45.10, 45.15
];

// PPO mit Standard-Einstellungen: Fast=12, Slow=26, SMA
$ppo = trader_ppo($closes, 12, 26, TRADER_MA_TYPE_SMA);

if ($ppo === false) {
    echo 'Fehler bei der PPO-Berechnung.' . PHP_EOL;
} else {
    foreach ($ppo as $index => $value) {
        printf("Index %d: PPO = %.4f%%\n", $index, $value);
    }
}
Index 25: PPO = -0.3521% Index 26: PPO = -0.2687% Index 27: PPO = -0.1543% Index 28: PPO = -0.0812% Index 29: PPO = -0.0134%

PPO mit EMA-Typ — Signalerkennung

<?php
// Größerer Datensatz: aufsteigende und absteigende Kurse
$closes = array_merge(
    range(100, 130, 1),  // Aufwärtstrend
    range(129, 100, -1)  // Abwärtstrend
);

// PPO mit EMA (wie MACD üblich)
$ppo = trader_ppo($closes, 12, 26, TRADER_MA_TYPE_EMA);

if ($ppo === false) {
    echo 'Berechnung fehlgeschlagen.' . PHP_EOL;
} else {
    $prevValue = null;
    foreach ($ppo as $index => $value) {
        // Nulllinien-Kreuzung erkennen
        if ($prevValue !== null) {
            if ($prevValue < 0 && $value >= 0) {
                echo "Kaufsignal bei Index $index (PPO kreuzt Nulllinie von unten): " . round($value, 4) . "%\n";
            } elseif ($prevValue > 0 && $value <= 0) {
                echo "Verkaufssignal bei Index $index (PPO kreuzt Nulllinie von oben): " . round($value, 4) . "%\n";
            }
        }
        $prevValue = $value;
    }
}
Verkaufssignal bei Index 55 (PPO kreuzt Nulllinie von oben): -0.0123%

// Wichtig · Fallstricke

Lookback-Periode: Das Ergebnis-Array enthält weniger Elemente als das Eingabe-Array. Die fehlenden Anfangswerte entsprechen der Lookback-Periode, die von slowPeriod und dem gewählten mAType abhängt. Beim Indizieren des Rückgabe-Arrays auf den ursprünglichen Datensatz muss dies berücksichtigt werden.

Voraussetzung: Die PECL-Erweiterung trader muss installiert und in der php.ini aktiviert sein (extension=trader). Die Verfügbarkeit kann mit extension_loaded('trader') geprüft werden.

Fehlerbehandlung: Bei ungültigen Parametern (z. B. fastPeriod >= slowPeriod oder zu wenige Eingabedaten) gibt die Funktion false zurück. Der genaue Fehlercode ist über trader_errno() abrufbar.