Start · Sprachen · PHP · Referenz · trader_sma

trader_sma

Funktion

Berechnet den einfachen gleitenden Durchschnitt (Simple Moving Average) einer Zeitreihendatenreihe.

Kategorie: math

Signatur

trader_sma(array $real, int $timePeriod = 30): array|false

Beschreibung

trader_sma ist Teil der TRADER-Erweiterung für PHP, die auf der TA-Lib (Technical Analysis Library) basiert. Die Funktion berechnet den Simple Moving Average (SMA) – den klassischen arithmetischen Mittelwert über ein gleitendes Zeitfenster – für ein übergebenes Array von Kursdaten oder Messwerten.

Der SMA wird häufig in der technischen Analyse von Finanzmärkten eingesetzt, um kurzfristige Schwankungen (Rauschen) in Kurs- oder Volumendaten zu glätten und Trends sichtbar zu machen. Für jeden Datenpunkt im Ergebnis wird der Durchschnitt der vorherigen $timePeriod Werte berechnet. Die ersten $timePeriod - 1 Elemente des Eingabe-Arrays haben kein Ergebnis und fehlen im Rückgabe-Array; der Index des Ergebnis-Arrays beginnt entsprechend versetzt.

Typische Anwendungsgebiete sind: Aktien- und Kryptowährungs-Trendanalyse, Signalgenerierung (z. B. Kreuzung von kurzem und langem SMA), sowie allgemeine Glättung von Zeitreihendaten in wissenschaftlichen oder industriellen Anwendungen.

  • Kurzer SMA (z. B. 10 Perioden): reagiert schnell auf Preisänderungen.
  • Langer SMA (z. B. 200 Perioden): glättet stark, zeigt langfristigen Trend.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisch indiziertes Array mit den Eingangswerten (z. B. Schlusskurse, Messwerte). Alle Werte müssen vom Typ float oder int sein.
$timePeriod int 30 Die Anzahl der Perioden, über die der Durchschnitt gebildet wird. Muss im gültigen Bereich von 2 bis 100000 liegen. Standardwert ist 30.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, dessen Schlüssel den Indizes des Eingabe-Arrays entsprechen (beginnend bei Index $timePeriod - 1), und als Werte die berechneten SMA-Werte enthält. Bei ungültigen Eingaben oder einem Fehler wird false zurückgegeben.

Beispiele

Einfacher SMA für Schlusskurse berechnen

<?php
// Beispieldaten: tägliche Schlusskurse einer Aktie
$closes = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0];

// SMA mit Periode 3 berechnen
$sma = trader_sma($closes, 3);

if ($sma === false) {
    echo "Fehler bei der Berechnung.\n";
} else {
    foreach ($sma as $index => $value) {
        echo "Index $index: SMA = " . round($value, 2) . "\n";
    }
}
Index 2: SMA = 11 Index 3: SMA = 12 Index 4: SMA = 13 Index 5: SMA = 14 Index 6: SMA = 15 Index 7: SMA = 16 Index 8: SMA = 17 Index 9: SMA = 18

Crossover-Signal: kurzfristiger vs. langfristiger SMA

<?php
// Simulierte Kursdaten (20 Tage)
$prices = [
    100, 102, 101, 105, 107, 110, 108, 112, 115, 113,
    116, 119, 117, 121, 124, 122, 126, 129, 127, 131
];

$smaShort = trader_sma($prices, 5);  // 5-Tage SMA
$smaLong  = trader_sma($prices, 10); // 10-Tage SMA

// Prüfe auf "Golden Cross" (kurzer SMA kreuzt langen von unten nach oben)
foreach ($smaLong as $index => $longVal) {
    if (!isset($smaShort[$index])) {
        continue;
    }
    $shortVal = $smaShort[$index];
    $prevIndex = $index - 1;
    if (
        isset($smaShort[$prevIndex], $smaLong[$prevIndex]) &&
        $smaShort[$prevIndex] <= $smaLong[$prevIndex] &&
        $shortVal > $longVal
    ) {
        echo "Golden Cross bei Index $index (Kurs: {$prices[$index]})\n";
    }
}
echo "Letzter SMA5: " . round(end($smaShort), 2) . "\n";
echo "Letzter SMA10: " . round(end($smaLong), 2) . "\n";
Letzter SMA5: 128.8 Letzter SMA10: 120.2

// Wichtig · Fallstricke

Wichtig: Die TRADER-Erweiterung muss explizit installiert und aktiviert sein (pecl install trader bzw. entsprechende Einträge in der php.ini). Sie ist nicht standardmäßig in PHP enthalten.

Das Rückgabe-Array beginnt erst ab Index $timePeriod - 1 des Eingabe-Arrays. Wenn das Eingabe-Array weniger Elemente enthält als $timePeriod, wird false zurückgegeben. Achte darauf, dass die Eingabewerte ausschließlich numerisch sind – nicht-numerische Werte können zu unerwarteten Ergebnissen führen.

Der SMA gewichtet alle Perioden gleich. Für eine stärkere Gewichtung aktueller Werte bietet die TRADER-Erweiterung alternativ trader_ema (Exponential Moving Average) oder trader_wma (Weighted Moving Average) an.