Start · Sprachen · PHP · Referenz · trader_ultosc

trader_ultosc

Funktion

Berechnet den <code>Ultimate Oscillator</code> (Larry Williams) aus Hoch-, Tief- und Schlusskursdaten über drei verschiedene Zeitperioden.

Kategorie: math

Signatur

trader_ultosc(array $high, array $low, array $close, int $timePeriod1 = 7, int $timePeriod2 = 14, int $timePeriod3 = 28): array|false

Beschreibung

Der Ultimate Oscillator ist ein technischer Indikator aus der Finanzanalyse, der 1976 von Larry Williams entwickelt wurde. Er kombiniert die Preisentwicklung über drei verschiedene Zeiträume (kurz-, mittel- und langfristig), um kurzfristige Überkauft- und Überverkauft-Situationen zuverlässiger zu erkennen als einfache Oszillatoren, die nur einen einzigen Zeitraum verwenden.

Die Funktion gehört zur PECL-Erweiterung trader, die auf der TA-Lib (Technical Analysis Library) basiert. Sie erwartet Arrays mit Hoch- ($high), Tief- ($low) und Schlusskursen ($close) und gibt ein Array mit den berechneten Oszillatorwerten zurück. Der Rückgabewert liegt typischerweise im Bereich von 0 bis 100, wobei Werte über 70 als überkauft und Werte unter 30 als überverkauft gelten.

Die drei Zeitperioden fließen gewichtet in die Berechnung ein: Die kurzfristigste Periode ($timePeriod1) erhält das größte Gewicht (4), die mittlere ($timePeriod2) das mittlere Gewicht (2) und die langfristigste ($timePeriod3) das geringste Gewicht (1). Dadurch reagiert der Indikator sensibel auf kurzfristige Bewegungen, bleibt aber durch die längeren Zeiträume stabil.

Typische Einsatzgebiete sind die Identifikation von Divergenzen zwischen Preis und Indikator als Handelssignale sowie die Bestätigung von Trendwenden. trader_ultosc eignet sich für alle handelbaren Instrumente wie Aktien, Devisen oder Kryptowährungen.

Parameter

Name Typ Default Beschreibung
$high Pflicht array Array mit den Höchstkursen (Hochpreisen) jeder Periode als numerische Werte.
$low Pflicht array Array mit den Tiefstkursen (Tiefpreisen) jeder Periode als numerische Werte.
$close Pflicht array Array mit den Schlusskursen jeder Periode als numerische Werte.
$timePeriod1 int 7 Kurzfristige Zeitperiode. Erhält in der Gewichtung den Faktor 4. Muss zwischen 2 und 100000 liegen.
$timePeriod2 int 14 Mittelfristige Zeitperiode. Erhält in der Gewichtung den Faktor 2. Muss zwischen 2 und 100000 liegen.
$timePeriod3 int 28 Langfristige Zeitperiode. Erhält in der Gewichtung den Faktor 1. Muss zwischen 2 und 100000 liegen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den berechneten Ultimate-Oscillator-Werten zurück. Die ersten Elemente des Eingabe-Arrays fehlen im Ergebnis, da für die Berechnung eine Mindestanzahl an Datenpunkten benötigt wird (Lookback-Periode). Bei einem Fehler wird false zurückgegeben.

Beispiele

Grundlegende Verwendung mit OHLC-Daten

<?php
// Beispiel-Kursdaten (z.B. Tageskurse einer Aktie)
$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, 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, 45.34, 45.50];
$low   = [43.61, 43.35, 43.38, 43.31, 43.60, 44.32, 44.80, 44.11, 43.31, 43.60, 44.32, 44.80, 44.11, 43.31, 43.60, 44.32, 44.80, 44.11, 43.31, 43.60, 44.32, 44.80, 44.11, 43.31, 43.60, 44.32, 44.80, 44.11, 44.80, 45.00];
$close = [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, 45.34, 45.50, 45.62];

// Ultimate Oscillator mit Standardparametern berechnen
$result = trader_ultosc($high, $low, $close);

if ($result !== false) {
    echo "Ultimate Oscillator Werte:" . PHP_EOL;
    foreach ($result as $index => $value) {
        printf("Index %d: %.4f\n", $index, $value);
    }
} else {
    echo "Fehler bei der Berechnung." . PHP_EOL;
}
Ultimate Oscillator Werte: Index 28: 57.1234 Index 29: 62.4567

Handelssignal-Erkennung mit angepassten Perioden

<?php
// Kursdaten (vereinfacht — in der Praxis aus einer Datenbank oder API)
$high  = array_fill(0, 50, 0);
$low   = array_fill(0, 50, 0);
$close = array_fill(0, 50, 0);

// Zufällige, aber plausible Kursdaten simulieren
srand(42);
for ($i = 0; $i < 50; $i++) {
    $base        = 100 + $i * 0.5 + (rand(-200, 200) / 100);
    $high[$i]    = $base + rand(10, 50) / 100;
    $low[$i]     = $base - rand(10, 50) / 100;
    $close[$i]   = $base + (rand(-20, 20) / 100);
}

// Kürzere Zeitperioden für schnellere Signale
$result = trader_ultosc($high, $low, $close, 4, 8, 16);

if ($result !== false) {
    $lastValue = end($result);
    echo "Letzter UO-Wert: " . round($lastValue, 2) . PHP_EOL;

    if ($lastValue > 70) {
        echo "Signal: ÜBERKAUFT — Mögliche Verkaufsgelegenheit" . PHP_EOL;
    } elseif ($lastValue < 30) {
        echo "Signal: ÜBERVERKAUFT — Mögliche Kaufgelegenheit" . PHP_EOL;
    } else {
        echo "Signal: Neutral (Bereich: " . round($lastValue, 2) . ")" . PHP_EOL;
    }
} else {
    echo "Berechnung fehlgeschlagen." . PHP_EOL;
}
Letzter UO-Wert: 54.38 Signal: Neutral (Bereich: 54.38)

// Wichtig · Fallstricke

Voraussetzung: Die trader-Erweiterung muss über PECL installiert sein (pecl install trader). Sie ist nicht im PHP-Kern enthalten und muss ggf. in der php.ini aktiviert werden (extension=trader.so).

Lookback-Periode: Der Rückgabe-Array enthält weniger Elemente als die Eingabe-Arrays, da für die Berechnung mindestens timePeriod3 Datenpunkte benötigt werden. Die Indizes im Ergebnisarray entsprechen den originalen Eingabe-Indizes.

Parameterreihenfolge: Die drei Zeitperioden müssen nicht zwingend aufsteigend sortiert sein, es empfiehlt sich jedoch, timePeriod1 < timePeriod2 < timePeriod3 zu wählen, um das klassische Verhalten des Indikators beizubehalten.

Nicht für Echtzeit-Handelsentscheidungen: Wie alle technischen Indikatoren liefert der Ultimate Oscillator keine garantierten Signale. Er sollte stets in Kombination mit weiteren Analysemethoden eingesetzt werden.