Start · Sprachen · PHP · Referenz · trader_linearreg

trader_linearreg

Funktion

Berechnet die lineare Regression (Linear Regression) über ein Array von Kurswerten für einen definierten Zeitraum.

Kategorie: math

Signatur

trader_linearreg(array $real, int $timePeriod = 14): array|false

Beschreibung

trader_linearreg ist Teil der PECL-Erweiterung Trader, die technische Analyse-Indikatoren aus der TA-Lib-Bibliothek bereitstellt. Die Funktion berechnet für jeden Datenpunkt die lineare Regression über die letzten timePeriod Werte und gibt den jeweiligen Endwert der Regressionsgerade zurück – also den Schätzwert des letzten Punktes der angepassten Geraden.

Die lineare Regression versucht, eine Gerade so durch die letzten n Werte zu legen, dass die Summe der quadratischen Abweichungen minimiert wird (Methode der kleinsten Quadrate). Das Ergebnis ist kein Durchschnitt, sondern ein auf Basis des Trends gewichteter Schätzwert, der auf Trendrichtung und -stärke hindeutet.

Typische Anwendungsfälle sind: Trendanalyse in Finanzdaten, Glättung von Zeitreihen und als Basis für weitere Indikatoren wie trader_linearreg_slope oder trader_linearreg_angle. Gegenüber einem einfachen gleitenden Durchschnitt reagiert die lineare Regression schneller auf Trendänderungen.

Da die Funktion einen Anlauf von timePeriod - 1 Datenpunkten benötigt, enthält das Ergebnis-Array entsprechend weniger Elemente als die Eingabe. Die Schlüssel des Rückgabe-Arrays beginnen bei dem Index, ab dem genügend Daten vorhanden sind.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisches Array mit den Eingabewerten (z. B. Schlusskurse). Die Werte müssen als float vorliegen oder automatisch konvertierbar sein.
$timePeriod int 14 Anzahl der Perioden, über die die lineare Regression berechnet wird. Gültige Werte: 2–100000. Standardwert ist 14.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den berechneten linearen Regressionswerten zurück. Das Array ist kleiner als das Eingabe-Array, da für die ersten timePeriod - 1 Elemente kein Wert berechnet werden kann. Bei einem Fehler (ungültige Parameter, leeres Array) wird false zurückgegeben.

Beispiele

Lineare Regression auf Schlusskurse anwenden

<?php
// Beispielhafte Schlusskurse (z. B. aus einer Datenbank)
$closes = [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.41, 46.02];

// Lineare Regression mit Periode 5
$linreg = trader_linearreg($closes, 5);

if ($linreg === false) {
    echo 'Fehler bei der Berechnung.' . PHP_EOL;
} else {
    foreach ($linreg as $index => $value) {
        printf("Index %2d: %.4f\n", $index, $value);
    }
}
?>
Index 4: 44.1040 Index 5: 44.4220 Index 6: 44.7480 Index 7: 44.8040 Index 8: 44.4040 Index 9: 44.4040 Index 10: 44.7480 Index 11: 44.8040 Index 12: 44.9040 Index 13: 45.3980 Index 14: 45.3940 Index 15: 45.6860

Vergleich mit gleitendem Durchschnitt

<?php
$closes = [10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10];

$linreg = trader_linearreg($closes, 4);
$sma    = trader_sma($closes, 4);

echo "Index | LinReg  | SMA" . PHP_EOL;
foreach ($linreg as $i => $lr) {
    printf("%5d | %7.4f | %7.4f\n", $i, $lr, $sma[$i]);
}
?>
Index | LinReg | SMA 3 | 13.0000 | 11.5000 4 | 14.0000 | 12.5000 5 | 15.0000 | 13.5000 6 | 14.6000 | 14.0000 7 | 13.4000 | 14.0000 8 | 12.2000 | 13.5000 9 | 11.0000 | 12.5000 10 | 10.0000 | 11.5000

// Wichtig · Fallstricke

Voraussetzung: Die Funktion steht nur zur Verfügung, wenn die PECL-Erweiterung trader installiert und geladen ist (pecl install trader). Ohne diese Erweiterung führt der Aufruf zu einem fatalen Fehler.

Array-Schlüssel: Das Ergebnis-Array behält die ursprünglichen numerischen Schlüssel der Eingabe. Der erste Schlüssel ist daher timePeriod - 1. Beim Zusammenführen mit anderen Daten (z. B. Datumsangaben) ist darauf zu achten, dass Indizes korrekt abgeglichen werden.

Randfälle: Wenn $real weniger Elemente enthält als timePeriod, gibt die Funktion false zurück. Nicht-numerische Werte im Array können zu unerwarteten Ergebnissen führen – das Array sollte vorher bereinigt werden.