Signatur
Beschreibung
Die Funktion trader_adx() gehört zur PECL-Erweiterung Trader, die technische Analyseindikatoren aus der TA-Lib-Bibliothek in PHP bereitstellt. Der Average Directional Movement Index (ADX) ist ein klassischer Trendstärke-Indikator aus der technischen Analyse, der von J. Welles Wilder entwickelt wurde.
Der ADX misst, wie stark ein Trend ist, aber nicht seine Richtung. Werte unter 20 deuten auf einen schwachen oder kaum vorhandenen Trend hin, Werte über 25–30 signalisieren einen etablierten Trend, und Werte über 50 stehen für einen sehr starken Trend. Er eignet sich zur Filterung von Handelssignalen: Nur bei hohem ADX-Wert werden Trendsignale anderer Indikatoren als zuverlässig gewertet.
Als Eingabe werden Arrays mit Höchstkursen (high), Tiefstkursen (low) und Schlusskursen (close) über denselben Zeitraum benötigt. Der Parameter timePeriod bestimmt, über wie viele Perioden der ADX geglättet wird. Das Ergebnis-Array ist typischerweise kürzer als die Eingabe-Arrays, da für die Berechnung eine Anlaufphase benötigt wird.
Wichtig: Die Trader-Erweiterung muss als PECL-Paket installiert und in der php.ini aktiviert sein. Die Funktion gibt bei Erfolg ein numerisch indiziertes Array mit den berechneten ADX-Werten zurück oder false bei einem Fehler.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $high Pflicht | array | Array mit den Höchstkursen (High-Preisen) jeder Periode. Die Werte müssen numerisch und chronologisch geordnet sein. | |
| $low Pflicht | array | Array mit den Tiefstkursen (Low-Preisen) jeder Periode. Muss dieselbe Länge wie high haben. |
|
| $close Pflicht | array | Array mit den Schlusskursen (Close-Preisen) jeder Periode. Muss dieselbe Länge wie high und low haben. |
|
| $timePeriod | int | 14 | Anzahl der Perioden, über die der ADX berechnet wird. Typischer Standardwert ist 14. Gültige Werte liegen zwischen 2 und 100000. |
Rückgabewert
2 * timePeriod - 1 Datenpunkte werden verbraucht). Bei einem Fehler (z. B. ungültige Parameter oder die Erweiterung ist nicht verfügbar) wird false zurückgegeben.Beispiele
Einfache ADX-Berechnung mit Beispielkursdaten
<?php
// Beispiel-Kursdaten (High, Low, Close) für 20 Perioden
$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, 45.98, 45.18, 46.03, 46.41, 46.22, 45.64, 46.21];
$low = [43.61, 43.15, 43.13, 42.62, 43.23, 43.37, 43.93, 44.12, 42.62, 43.23,
43.37, 43.93, 44.12, 44.57, 44.40, 45.16, 45.57, 45.07, 44.52, 45.43];
$close = [44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.15, 45.98, 44.33, 44.83,
45.10, 45.15, 45.98, 45.18, 46.03, 46.41, 46.22, 45.64, 46.21, 46.45];
$timePeriod = 14;
$adx = trader_adx($high, $low, $close, $timePeriod);
if ($adx === false) {
echo "Fehler bei der ADX-Berechnung.\n";
} else {
echo "ADX-Werte (letzte 3):\n";
$last = array_slice($adx, -3);
foreach ($last as $index => $value) {
printf("Index %d: ADX = %.4f\n", $index, $value);
}
}
ADX-basierte Trendstärke-Klassifizierung
<?php
// Kursdaten aus einer Datenbank o. Ä. laden (hier vereinfacht)
$high = [100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147];
$low = [98, 100,103,105,108,110,113,115,118,120,123,125,128,130,133,135,138,140,143,145];
$close = [101,104,106,109,111,114,116,119,121,124,126,129,131,134,136,139,141,144,146,146];
$adx = trader_adx($high, $low, $close, 14);
if ($adx !== false) {
$latestAdx = end($adx);
echo sprintf("Aktueller ADX-Wert: %.2f\n", $latestAdx);
if ($latestAdx < 20) {
echo "Trendstärke: Schwach – kein klarer Trend vorhanden.\n";
} elseif ($latestAdx < 40) {
echo "Trendstärke: Mäßig – Trend vorhanden.\n";
} elseif ($latestAdx < 60) {
echo "Trendstärke: Stark – klarer Trend.\n";
} else {
echo "Trendstärke: Sehr stark – ausgeprägter Trend.\n";
}
} else {
echo "Berechnung fehlgeschlagen.\n";
}
// Wichtig · Fallstricke
Installation: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung trader installiert ist (pecl install trader) und in der php.ini mit extension=trader aktiviert wurde.
Array-Länge: Das Ergebnis-Array ist kürzer als die Eingabe-Arrays. Die Anlaufphase beträgt 2 * timePeriod - 1 Elemente. Bei einem timePeriod von 14 werden mindestens 27 Datenpunkte benötigt, damit überhaupt ein Ergebnis berechnet wird.
Index-Verschiebung: Die Indizes des Ergebnis-Arrays beginnen nicht bei 0, sondern sind gegenüber den Eingabe-Arrays verschoben. Bei der Zuordnung von Ergebniswerten zu Zeitstempeln muss diese Verschiebung berücksichtigt werden.
Datenkonsistenz: Alle drei Eingabe-Arrays (high, low, close) müssen exakt dieselbe Anzahl von Elementen haben und dieselben Zeitpunkte repräsentieren. Unvollständige oder gemischte Daten führen zu falschen Ergebnissen oder false.