Signatur
Beschreibung
Die Funktion trader_ema() ist Teil der TRADER-Erweiterung (PHP Trader), die technische Analyse-Indikatoren aus der TA-Lib-Bibliothek bereitstellt. Sie berechnet den exponentiellen gleitenden Durchschnitt (Exponential Moving Average, EMA) über eine übergebene Array-Zeitreihe, typischerweise Schlusskurse eines Finanzinstruments.
Im Gegensatz zum einfachen gleitenden Durchschnitt (SMA) gewichtet der EMA neuere Datenpunkte stärker als ältere. Dies macht ihn reaktionsschneller auf aktuelle Kursbewegungen und besonders nützlich in der technischen Analyse von Aktien, Devisen oder Kryptowährungen. Der Glättungsfaktor (Multiplier) ergibt sich aus 2 / (timePeriod + 1).
Der Rückgabe-Array enthält weniger Elemente als der Eingabe-Array, da die ersten timePeriod - 1 Elemente nicht berechnet werden können (Anlaufphase). Die Indizes des Ergebnis-Arrays beginnen entsprechend verschoben, sodass der Index im Ergebnis dem Original-Index im Eingabe-Array entspricht.
Typische Anwendungsfälle sind Trendfolge-Strategien, das Erkennen von Kauf- und Verkaufssignalen (z. B. Crossover zweier EMAs) sowie die Basis für komplexere Indikatoren wie MACD oder Bollinger Bänder.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $real Pflicht | array | Numerisches Array mit den Eingabewerten der Zeitreihe, z. B. Schlusskurse. Die Werte müssen als float interpretierbar sein. |
|
| $timePeriod | int | 30 | Anzahl der Perioden für die EMA-Berechnung. Muss mindestens 2 betragen. Übliche Werte sind 9, 12, 20, 26 oder 50. |
Rückgabewert
timePeriod - 1). Bei einem Fehler (z. B. ungültige Eingabe oder zu kurzer Array) wird false zurückgegeben.Beispiele
Einfacher EMA über Schlusskurse mit Periode 5
<?php
// Beispielhafte Schlusskurse einer Aktie
$closes = [10.0, 11.5, 12.0, 11.0, 13.5, 14.0, 13.0, 15.0, 16.5, 15.5];
// EMA mit Periode 5 berechnen
$ema = trader_ema($closes, 5);
if ($ema === false) {
echo "Fehler bei der EMA-Berechnung.\n";
} else {
foreach ($ema as $index => $value) {
printf("Index %d: EMA = %.4f\n", $index, $value);
}
}
EMA-Crossover-Signal: 12-Perioden vs. 26-Perioden EMA
<?php
// Simulierte Schlusskurse (mind. 26 Werte erforderlich)
$closes = [
100, 102, 101, 105, 107, 110, 108, 112, 115, 113,
116, 118, 120, 119, 122, 125, 123, 127, 130, 128,
132, 135, 133, 137, 140, 138, 142, 145, 143, 147
];
$ema12 = trader_ema($closes, 12);
$ema26 = trader_ema($closes, 26);
if ($ema12 === false || $ema26 === false) {
echo "Fehler bei der EMA-Berechnung.\n";
exit;
}
// Nur gemeinsame Indizes vergleichen
$commonKeys = array_intersect(array_keys($ema12), array_keys($ema26));
foreach ($commonKeys as $i) {
$signal = $ema12[$i] > $ema26[$i] ? 'Bullish (Kaufsignal)' : 'Bearish (Verkaufssignal)';
printf("Index %d — EMA12: %.2f | EMA26: %.2f → %s\n", $i, $ema12[$i], $ema26[$i], $signal);
}
// Wichtig · Fallstricke
Erweiterung erforderlich: trader_ema() setzt die PECL-Erweiterung trader voraus, die separat installiert werden muss (pecl install trader). Sie ist nicht Teil des PHP-Standardumfangs.
Anlaufphase: Der Ausgabe-Array enthält immer timePeriod - 1 Elemente weniger als der Eingabe-Array. Greifen Sie daher nie ohne Prüfung auf feste Indizes zu.
Gleitkommagenauigkeit: Die Ergebnisse basieren auf C-Double-Präzision (64-Bit). Bei finanzkritischen Berechnungen sollte auf Rundungsfehler geachtet werden. Die Funktion ist nicht für buchhalterische Präzisionsberechnungen geeignet.
Fehlerbehandlung: Bei zu kurzem Eingabe-Array (weniger Elemente als timePeriod) oder ungültiger Periode gibt die Funktion false zurück. Der genaue Fehler kann über trader_errno() abgefragt werden.