Start · Sprachen · PHP · Referenz · trader_wma

trader_wma

Funktion

Berechnet den gewichteten gleitenden Durchschnitt (Weighted Moving Average, WMA) für eine Zeitreihe von Kursdaten.

Kategorie: math

Signatur

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

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den berechneten WMA-Werten zurück. Die Schlüssel entsprechen den Indizes des Eingabearrays, beginnend ab Index 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;
    }
}
Index 4: 102.9333 Index 5: 103.9 Index 6: 105.1 Index 7: 106.2333 Index 8: 107.1 Index 9: 108.5

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;
}
Letzter WMA-Wert (Index 34): 18.3871 Anzahl berechneter Werte: 5

// 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 - 1 Elemente werden nicht ausgegeben.
  • Der Parameter timePeriod muss mindestens 2 betragen und darf 100000 nicht ü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- oder INF-Werten im Eingabe-Array ist undefiniert und kann zu false oder verfälschten Ergebnissen führen.