Start · Sprachen · PHP · Referenz · trader_apo

trader_apo

Funktion

Berechnet den <code>Absoluten Preisoszillator (APO)</code> auf Basis einer Zeitreihe von Preisdaten.

Kategorie: math

Signatur

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

Beschreibung

Der Absolute Price Oscillator (APO) ist ein technischer Indikator aus der Finanzanalyse. Er berechnet die Differenz zwischen zwei gleitenden Durchschnitten (Moving Averages) unterschiedlicher Periodenlänge und gibt das Ergebnis als absolute Zahl zurück – im Gegensatz zum Percentage Price Oscillator (PPO), der relative Werte liefert.

Die Funktion ist Teil der TRADER-Erweiterung für PHP, die auf der TA-Lib (Technical Analysis Library) basiert. Sie eignet sich insbesondere für die Entwicklung von Trading-Algorithmen, Backtesting-Systemen und Finanzauswertungen in PHP.

Ein positiver APO-Wert zeigt an, dass der kurzfristige Durchschnitt über dem langfristigen liegt (bullisches Signal), ein negativer Wert signalisiert das Gegenteil. Die Wahl des Moving-Average-Typs (mAType) erlaubt es, verschiedene Glättungsverfahren wie SMA, EMA, WMA u. a. einzusetzen.

Zu beachten ist, dass der Rückgabe-Array weniger Elemente enthält als der Eingabe-Array, da für die ersten Perioden noch nicht genügend Datenpunkte für die Berechnung vorhanden sind (Lookback-Periode).

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisches Array mit den Preisdaten (z. B. Schlusskurse) als float-Werte. Die Reihenfolge sollte chronologisch aufsteigend sein.
$fastPeriod int 12 Anzahl der Perioden für den schnellen (kurzfristigen) gleitenden Durchschnitt. Muss kleiner als slowPeriod sein. Übliche Werte: 12 oder 10.
$slowPeriod int 26 Anzahl der Perioden für den langsamen (langfristigen) gleitenden Durchschnitt. Muss größer als fastPeriod sein. Übliche Werte: 26 oder 20.
$mAType int 0 Typ des gleitenden Durchschnitts. Mögliche Werte sind TRADER_MA_TYPE_*-Konstanten, z. B. TRADER_MA_TYPE_SMA (0), TRADER_MA_TYPE_EMA (1), TRADER_MA_TYPE_WMA (2) etc.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisches Array mit den berechneten APO-Werten zurück. Der Array beginnt erst ab dem Index, ab dem ausreichend Datenpunkte für die Berechnung vorhanden sind (Lookback-Periode = slowPeriod - 1). Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache APO-Berechnung mit Standardwerten

<?php
// Beispiel-Schlusskurse (z. B. aus einer Datenbank geladen)
$closePrices = [
    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, 44.83,
    45.10, 45.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, 44.83, 45.10
];

// APO mit Fast=12, Slow=26, EMA (mAType=1)
$apo = trader_apo($closePrices, 12, 26, TRADER_MA_TYPE_EMA);

if ($apo === false) {
    echo 'Fehler bei der APO-Berechnung.' . PHP_EOL;
} else {
    foreach ($apo as $index => $value) {
        printf("Index %d: APO = %.4f\n", $index, $value);
    }
}
Index 25: APO = 0.0000 Index 26: APO = 0.0171 Index 27: APO = 0.0312 Index 28: APO = -0.0042 Index 29: APO = 0.0000 Index 30: APO = 0.0158 Index 31: APO = 0.0286

APO mit SMA und Auswertung von Kauf-/Verkaufssignalen

<?php
// Preisdaten (vereinfacht)
$prices = array_map('floatval', [
    100, 101, 102, 103, 100, 99, 98, 97, 96, 95,
    94, 93, 94, 95, 96, 97, 98, 99, 100, 101,
    102, 103, 104, 105, 106, 107, 108, 109, 110, 111
]);

// APO mit SMA (mAType=0), Fast=5, Slow=10
$apo = trader_apo($prices, 5, 10, TRADER_MA_TYPE_SMA);

if ($apo === false) {
    die('Berechnung fehlgeschlagen.');
}

echo "APO-Signalauswertung:\n";
foreach ($apo as $index => $value) {
    $signal = $value > 0 ? 'KAUFSIGNAL (bullisch)' : ($value < 0 ? 'VERKAUFSSIGNAL (bärisch)' : 'NEUTRAL');
    printf("Bar %d: APO=%.4f => %s\n", $index, $value, $signal);
}
APO-Signalauswertung: Bar 9: APO=-2.8000 => VERKAUFSSIGNAL (bärisch) Bar 10: APO=-3.6000 => VERKAUFSSIGNAL (bärisch) ...

// Wichtig · Fallstricke

TRADER-Erweiterung: Die Funktion trader_apo() setzt voraus, dass die PHP-TRADER-Erweiterung installiert und aktiviert ist (pecl install trader). Ohne diese Erweiterung ist die Funktion nicht verfügbar.

Lookback-Periode: Die ersten slowPeriod - 1 Werte können nicht berechnet werden. Der Rückgabe-Array hat daher weniger Elemente als der Eingabe-Array. Die Array-Schlüssel im Rückgabewert beginnen beim ersten berechenbaren Index.

Fehlerbehandlung: Bei ungültigen Parametern (z. B. fastPeriod >= slowPeriod oder leeres Array) gibt die Funktion false zurück. Es empfiehlt sich, den Rückgabewert immer mit === false zu prüfen.