Signatur
Beschreibung
Die Funktion trader_wma() ist Teil der PECL-Erweiterung Trader (Technical Analysis for Traders) und berechnet den gewichteten gleitenden Durchschnitt (englisch: Weighted Moving Average, kurz WMA) über eine gegebene Zeitreihe. Im Gegensatz zum einfachen gleitenden Durchschnitt (SMA) werden beim WMA aktuellere Werte stärker gewichtet – der jüngste Wert erhält das höchste Gewicht, ältere Werte entsprechend weniger.
Die Berechnung erfolgt nach einem linearen Gewichtungsschema: Bei einem Zeitraum von n erhält der aktuellste Wert das Gewicht n, der nächstältere das Gewicht n-1 usw. Die Summe aller Gewichte beträgt n*(n+1)/2. Dadurch reagiert der WMA schneller auf Kursänderungen als ein einfacher gleitender Durchschnitt, ist aber weniger glatt als der exponentiell gewichtete Durchschnitt (EMA).
Typische Anwendungsfälle sind die technische Analyse von Wertpapierkursen, das Glätten von Zeitreihendaten sowie die Erkennung von Trends in Handelssystemen. Die Funktion gibt ein Array zurück, dessen Schlüssel den Indizes des Eingabearrays entsprechen – die ersten timePeriod - 1 Elemente fehlen, da für sie kein vollständiges Berechnungsfenster existiert.
Voraussetzung für die Nutzung dieser Funktion ist die installierte und aktivierte PECL trader-Erweiterung (pecl install trader).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $real Pflicht | array | Eindimensionales Array mit numerischen Eingabewerten (z. B. Schlusskurse einer Zeitreihe). Die Schlüssel sollten fortlaufend sein. | |
| $timePeriod | int | 30 | Anzahl der Perioden (Lookback-Fenster), über die der gewichtete Durchschnitt berechnet wird. Muss zwischen 2 und 100000 liegen. |
Rückgabewert
timePeriod - 1. Bei einem Fehler (z. B. ungültige Parameter oder zu wenige Datenpunkte) wird false zurückgegeben.Beispiele
Einfacher WMA über Schlusskurse
<?php
// Schlusskurse einer Aktie (z. B. 10 Tage)
$closes = [100.0, 102.5, 101.0, 103.0, 105.5, 104.0, 106.0, 107.5, 108.0, 110.0];
// Gewichteten gleitenden Durchschnitt mit Periode 5 berechnen
$wma = trader_wma($closes, 5);
if ($wma === false) {
echo 'Fehler bei der Berechnung.' . PHP_EOL;
} else {
foreach ($wma as $index => $value) {
echo "Index {$index}: " . round($value, 4) . PHP_EOL;
}
}
WMA zur Trendverfolgung mit Standardperiode
<?php
// Simulierte Zeitreihe mit 35 Datenpunkten
$data = array_map(fn($i) => 50 + $i * 0.5 + sin($i) * 2, range(0, 34));
// WMA mit Standard-Periode 30
$wma = trader_wma($data);
if ($wma !== false) {
$lastIndex = array_key_last($wma);
echo 'Letzter WMA-Wert (Index ' . $lastIndex . '): ' . round($wma[$lastIndex], 4) . PHP_EOL;
echo 'Anzahl berechneter Werte: ' . count($wma) . PHP_EOL;
} else {
echo 'Berechnung fehlgeschlagen – zu wenige Datenpunkte oder ungültige Parameter.' . PHP_EOL;
}
// Wichtig · Fallstricke
Wichtig: Die Funktion steht nur zur Verfügung, wenn die PECL trader-Erweiterung installiert und in der php.ini geladen ist (extension=trader). Ohne diese Erweiterung führt der Aufruf zu einem schwerwiegenden Fehler.
- Das Ergebnis-Array ist kleiner als das Eingabe-Array: Die ersten
timePeriod - 1Elemente werden nicht ausgegeben. - Der Parameter
timePeriodmuss mindestens2betragen und darf100000nicht überschreiten. - Für Finanzdaten empfiehlt sich ein Vergleich mit
trader_ema()(exponentieller gleitender Durchschnitt), da dieser bei verrauschten Zeitreihen oft bevorzugt wird. - Das Verhalten bei
NAN- oderINF-Werten im Eingabe-Array ist undefiniert und kann zufalseoder verfälschten Ergebnissen führen.