Start · Sprachen · PHP · Referenz · trader_ema

trader_ema

Funktion

Berechnet den exponentiellen gleitenden Durchschnitt (EMA) einer Zeitreihe von Kursdaten.

Kategorie: math

Signatur

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

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den berechneten EMA-Werten zurück. Die Array-Schlüssel entsprechen den Indizes des Eingabe-Arrays (verschoben um 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);
    }
}
Index 4: EMA = 11.6000 Index 5: EMA = 12.4000 Index 6: EMA = 12.6000 Index 7: EMA = 13.4000 Index 8: EMA = 14.6000 Index 9: EMA = 14.9000

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);
}
Index 25: EMA12: 134.44 | EMA26: 123.77 → Bullish (Kaufsignal) Index 26: EMA12: 136.44 | EMA26: 125.57 → Bullish (Kaufsignal) Index 27: EMA12: 138.96 | EMA26: 127.60 → Bullish (Kaufsignal) Index 28: EMA12: 140.64 | EMA26: 129.37 → Bullish (Kaufsignal) Index 29: EMA12: 143.12 | EMA26: 131.42 → Bullish (Kaufsignal)

// 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.