Start · Sprachen · PHP · Referenz · trader_willr

trader_willr

Funktion

Berechnet Williams' %R, einen Momentum-Indikator aus der technischen Analyse, der Überkauft- und Überverkauft-Zustände eines Wertpapiers misst.

Kategorie: math

Signatur

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

Beschreibung

Die Funktion trader_willr() gehört zur TRADER-Erweiterung (TA-Lib) für PHP und berechnet den Williams' Percent Range (%R), einen von Larry Williams entwickelten Momentum-Oszillator. Der Indikator misst die Lage des aktuellen Schlusskurses relativ zum höchsten Hoch und niedrigsten Tief innerhalb eines definierten Zeitraums.

Der Wertebereich liegt immer zwischen -100 und 0. Werte nahe 0 signalisieren einen überkauften Markt (der Kurs liegt nahe dem Periodenhoch), während Werte nahe -100 einen überverkauften Zustand anzeigen (der Kurs liegt nahe dem Periodentief). Typische Signalgrenzen sind -20 (überkauft) und -80 (überverkauft).

Die Berechnung erfolgt nach der Formel: %R = ((Höchstkurs − Schlusskurs) / (Höchstkurs − Tiefstkurs)) × −100. Die Eingabe-Arrays $high, $low und $close müssen zeitlich geordnete Kursdaten (indiziert ab 0) mit identischer Länge enthalten. Das Ergebnis-Array enthält weniger Elemente als die Eingabe, da für die ersten timePeriod - 1 Einträge kein Wert berechnet werden kann.

Der Williams' %R wird häufig in Kombination mit anderen Indikatoren (z. B. Trendfolge-Indikatoren) eingesetzt, um Fehlsignale zu reduzieren. Er eignet sich besonders für kurzfristige Handelsentscheidungen und ist ein gängiges Werkzeug im algorithmischen Trading.

Parameter

Name Typ Default Beschreibung
$high Pflicht array Zeitlich sortiertes Array mit den Tageshöchstkursen (floats), indiziert ab 0.
$low Pflicht array Zeitlich sortiertes Array mit den Tagestiefstkursen (floats), muss dieselbe Länge wie $high haben.
$close Pflicht array Zeitlich sortiertes Array mit den Schlusskursen (floats), muss dieselbe Länge wie $high haben.
$timePeriod int 14 Anzahl der Perioden (Kerzen/Tage), über die der Indikator berechnet wird. Typischer Standardwert ist 14. Gültige Werte liegen im Bereich 2 bis 100000.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den berechneten Williams' %R-Werten (floats im Bereich -100 bis 0) zurück. Das Array ist kürzer als die Eingabe-Arrays (um timePeriod - 1 Elemente). Bei ungültigen Eingaben oder einem Fehler wird false zurückgegeben.

Beispiele

Grundlegende Berechnung des Williams' %R

<?php
// Beispiel-Kursdaten (z. B. 20 Tageskerzen)
$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.80, 44.20, 44.57, 43.61, 44.33, 44.83, 45.00];
$low   = [43.61, 43.51, 43.89, 43.26, 43.55, 44.32, 44.47, 44.61, 43.26, 43.55,
           44.32, 44.47, 44.61, 43.20, 43.67, 44.01, 43.26, 43.55, 44.32, 44.48];
$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, 43.99, 44.10, 44.50, 44.33, 44.83, 44.90, 44.95];

$timePeriod = 14;
$result = trader_willr($high, $low, $close, $timePeriod);

if ($result === false) {
    echo 'Fehler bei der Berechnung.';
} else {
    echo 'Williams %R Werte:' . PHP_EOL;
    foreach ($result as $index => $value) {
        printf('Index %d: %.4f%s', $index, $value, PHP_EOL);
    }
}
Williams %R Werte: Index 13: -5.1282 Index 14: -38.4615 Index 15: -13.3333 Index 16: -100.0000 Index 17: -53.8462 Index 18: -46.1538 Index 19: -26.3158

Signalauswertung: Überkauft / Überverkauft

<?php
$high  = [45.10, 45.15, 44.83, 44.33, 43.61, 43.26, 43.55, 44.32, 44.47, 44.61,
           44.83, 45.00, 45.15, 45.20, 44.90, 44.50, 44.10, 43.80, 43.20, 42.90];
$low   = [44.47, 44.61, 44.32, 43.55, 43.26, 42.80, 43.10, 43.90, 44.00, 44.30,
           44.40, 44.60, 44.80, 44.90, 44.20, 43.80, 43.40, 43.10, 42.50, 42.20];
$close = [45.10, 45.00, 44.70, 44.20, 43.61, 43.00, 43.50, 44.10, 44.40, 44.60,
           44.80, 44.95, 45.10, 45.15, 44.50, 44.10, 43.70, 43.30, 42.80, 42.50];

$willr = trader_willr($high, $low, $close, 14);

if ($willr !== false) {
    $lastIndex = array_key_last($willr);
    $lastValue = $willr[$lastIndex];

    echo sprintf('Letzter Williams %%R-Wert: %.2f', $lastValue) . PHP_EOL;

    if ($lastValue >= -20) {
        echo 'Signal: ÜBERKAUFT — möglicher Verkaufszeitpunkt';
    } elseif ($lastValue <= -80) {
        echo 'Signal: ÜBERVERKAUFT — möglicher Kaufzeitpunkt';
    } else {
        echo 'Signal: Neutraler Bereich';
    }
}
Letzter Williams %R-Wert: -96.67 Signal: ÜBERVERKAUFT — möglicher Kaufzeitpunkt

// Wichtig · Fallstricke

Voraussetzung: Die TRADER-Erweiterung muss installiert und aktiviert sein (pecl install trader bzw. extension=trader in der php.ini). Sie basiert auf der C-Bibliothek TA-Lib.

Array-Indizierung: Das Ergebnis-Array beginnt nicht zwingend bei Index 0 — der erste gültige Index entspricht timePeriod - 1 der Eingabe-Arrays. Beim Zugriff auf Ergebniswerte sollte dies berücksichtigt werden.

Abgrenzung zu Stochastic %K: Williams' %R ist dem Stochastik-Indikator sehr ähnlich, jedoch invertiert (Wertebereich -100 bis 0 statt 0 bis 100). Beide messen ähnliche Marktzustände, sind aber nicht identisch.

Keine Handelsentscheidungen allein auf Basis dieses Indikators: Wie alle technischen Indikatoren liefert Williams' %R keine Garantie für zukünftige Kursbewegungen und sollte stets in Kombination mit anderen Analysemethoden verwendet werden.