Signatur
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
-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);
}
}
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';
}
}
// 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.