Start · Sprachen · PHP · Referenz · trader_tema

trader_tema

Funktion

Berechnet den dreifachen exponentiellen gleitenden Durchschnitt (Triple Exponential Moving Average, TEMA) einer Zeitreihe.

Kategorie: math

Signatur

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

Beschreibung

trader_tema ist Teil der TRADER-Erweiterung (PHP-Bindung an die TA-Lib) und berechnet den Triple Exponential Moving Average (TEMA). TEMA wurde von Patrick Mulloy entwickelt, um den klassischen EMA weiter zu glätten und gleichzeitig die typische Verzögerung (Lag) zu reduzieren. Die Formel lautet: TEMA = 3 * EMA1 - 3 * EMA2 + EMA3, wobei EMA1 der EMA der Eingabedaten, EMA2 der EMA von EMA1 und EMA3 der EMA von EMA2 ist.

Im Vergleich zu einem einfachen oder doppelten EMA reagiert TEMA schneller auf Kursänderungen und ist daher besonders für kurzfristige Handelssignale geeignet. Da jedoch drei verschachtelte EMAs berechnet werden, benötigt der Indikator mehr Datenpunkte, bevor der erste Ausgabewert vorliegt – die Vorlaufzeit beträgt (timePeriod - 1) * 3 Perioden.

Typische Anwendungsfälle sind technische Analyse von Finanzmarktdaten: Trendidentifikation, Crossover-Strategien und das Filtern von Marktrauschen. Das Ergebnis-Array ist entsprechend der berechneten Werte kürzer als das Eingabe-Array; die ersten Positionen enthalten keine Werte (Lookup-Offset).

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisches Array mit den Eingabewerten der Zeitreihe (z. B. Schlusskurse). Die Werte müssen chronologisch geordnet sein.
$timePeriod int 30 Anzahl der Perioden, über die der dreifache EMA berechnet wird. Muss zwischen 2 und 100000 liegen. Ein kleinerer Wert reagiert sensibler auf Preisänderungen, ein größerer Wert glättet stärker.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array mit den berechneten TEMA-Werten zurück. Die ersten (timePeriod - 1) * 3 Einträge fehlen (Lookup-Offset). Bei einem Fehler (ungültige Parameter, fehlende Erweiterung) wird false zurückgegeben.

Beispiele

Einfache TEMA-Berechnung auf Schlusskursen

<?php
// Beispiel-Schlusskurse (z. B. Tagesschlusskurse einer Aktie)
$closes = [
    44.34, 44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.15,
    43.61, 44.33, 44.83, 45.10, 45.15, 45.30, 44.90, 45.20,
    45.50, 45.80, 46.10, 46.30, 46.00, 45.70, 45.90, 46.20,
    46.50, 46.80, 46.40, 46.60, 47.00, 47.20, 47.40, 47.10,
    47.30, 47.60, 47.80, 48.00, 47.70, 47.50, 47.90, 48.10,
];

// TEMA mit Periode 10 berechnen
$tema = trader_tema($closes, 10);

if ($tema === false) {
    echo 'Fehler bei der TEMA-Berechnung.' . PHP_EOL;
} else {
    echo 'Anzahl TEMA-Werte: ' . count($tema) . PHP_EOL;
    foreach ($tema as $index => $value) {
        printf("Index %d => %.4f\n", $index, $value);
    }
}
Anzahl TEMA-Werte: 13 Index 27 => 46.5821 ...

TEMA-Crossover-Strategie (schneller vs. langsamer TEMA)

<?php
// Simulation eines Crossover-Signals:
// Kaufsignal, wenn schneller TEMA (5) den langsamen TEMA (20) von unten kreuzt
$closes = [
    10, 10.5, 11, 10.8, 11.2, 11.5, 12, 12.5, 12.2, 12.8,
    13, 13.5, 13.2, 13.8, 14, 14.5, 14.2, 14.8, 15, 15.5,
    15.2, 15.8, 16, 16.5, 16.2, 16.8, 17, 17.5, 17.2, 17.8,
    18, 18.5, 18.2, 18.8, 19, 19.5, 19.2, 19.8, 20, 20.5,
    20.2, 20.8, 21, 21.5, 21.2, 21.8, 22, 22.5, 22.2, 22.8,
];

$temaFast = trader_tema($closes, 5);
$temaSlow = trader_tema($closes, 20);

if ($temaFast === false || $temaSlow === false) {
    die('Fehler bei der Berechnung.');
}

// Gemeinsame Indizes bestimmen
$commonIndices = array_intersect_key($temaFast, $temaSlow);

$prevFast = null;
$prevSlow = null;

foreach ($commonIndices as $i => $unused) {
    $fast = $temaFast[$i];
    $slow = $temaSlow[$i];

    if ($prevFast !== null && $prevSlow !== null) {
        if ($prevFast < $prevSlow && $fast > $slow) {
            printf("Kaufsignal bei Index %d: TEMA-Fast=%.4f, TEMA-Slow=%.4f\n", $i, $fast, $slow);
        } elseif ($prevFast > $prevSlow && $fast < $slow) {
            printf("Verkaufssignal bei Index %d: TEMA-Fast=%.4f, TEMA-Slow=%.4f\n", $i, $fast, $slow);
        }
    }

    $prevFast = $fast;
    $prevSlow = $slow;
}

// Wichtig · Fallstricke

Voraussetzung: Die TRADER-Erweiterung (pecl install trader) muss installiert und in der php.ini aktiviert sein (extension=trader). Ohne diese Erweiterung ist trader_tema nicht verfügbar.

Lookup-Offset: Die ersten (timePeriod - 1) * 3 Positionen werden im Ergebnis übersprungen. Das Rückgabe-Array ist daher nicht bei Index 0 gestartet, sondern enthält einen Versatz entsprechend dem benötigten Vorlauf. Beim Zugriff auf das Ergebnis immer die tatsächlichen Schlüssel verwenden, nicht eine feste Indexposition annehmen.

Verwechslungsgefahr: TEMA ist nicht dasselbe wie DEMA (trader_dema) oder ein dreifach angewandter EMA. Die spezifische Mulloy-Formel sorgt für eine stärkere Lag-Reduktion als DEMA.