Start · Sprachen · PHP · Referenz · trader_macdext

trader_macdext

Funktion

Berechnet den MACD-Indikator (Moving Average Convergence/Divergence) mit frei wählbaren gleitenden Durchschnittstypen für Fast-, Slow- und Signal-Linie.

Kategorie: math

Signatur

trader_macdext(array $real, int $fastPeriod = 12, int $fastMAType = TRADER_MA_TYPE_SMA, int $slowPeriod = 26, int $slowMAType = TRADER_MA_TYPE_SMA, int $signalPeriod = 9, int $signalMAType = TRADER_MA_TYPE_SMA): array|false

Beschreibung

Der MACD (Moving Average Convergence/Divergence) ist einer der bekanntesten technischen Indikatoren in der Finanzanalyse. Er zeigt die Differenz zwischen zwei gleitenden Durchschnitten (Fast MA minus Slow MA) sowie eine Signallinie (gleitender Durchschnitt des MACD) und ein Histogramm (MACD minus Signal). Diese drei Komponenten helfen dabei, Trendwechsel, Momentum und potenzielle Kauf- oder Verkaufssignale zu identifizieren.

Im Gegensatz zur Standardfunktion trader_macd(), die ausschließlich auf dem Exponential Moving Average (EMA) basiert, erlaubt trader_macdext() für jede der drei Linien einen eigenen MA-Typ (z. B. SMA, EMA, WMA, DEMA, TEMA, T3 usw.). Die verfügbaren Typen werden über die Konstanten TRADER_MA_TYPE_* angegeben.

Die Funktion ist Teil der PECL trader-Erweiterung, die auf der TA-Lib-Bibliothek basiert. Der Rückgabewert enthält drei Arrays: den MACD-Wert, die Signallinie und das Histogramm. Die Arrays beginnen erst ab dem Index, ab dem genügend Datenpunkte für die Berechnung vorhanden sind (Look-back-Periode).

  • TRADER_MA_TYPE_SMA = 0 – Simple Moving Average
  • TRADER_MA_TYPE_EMA = 1 – Exponential Moving Average
  • TRADER_MA_TYPE_WMA = 2 – Weighted Moving Average
  • TRADER_MA_TYPE_DEMA = 3 – Double Exponential Moving Average
  • TRADER_MA_TYPE_TEMA = 4 – Triple Exponential Moving Average
  • TRADER_MA_TYPE_TRIMA = 5 – Triangular Moving Average
  • TRADER_MA_TYPE_KAMA = 6 – Kaufman Adaptive Moving Average
  • TRADER_MA_TYPE_MAMA = 7 – MESA Adaptive Moving Average
  • TRADER_MA_TYPE_T3 = 8 – Triple Exponential Moving Average (T3)

Parameter

Name Typ Default Beschreibung
$real Pflicht array Eingabe-Array mit den Kursdaten (typischerweise Schlusskurse) als numerisch indiziertes Float-Array.
$fastPeriod int 12 Anzahl der Perioden für den schnellen gleitenden Durchschnitt (Fast MA). Üblicher Standardwert ist 12.
$fastMAType int TRADER_MA_TYPE_SMA Typ des gleitenden Durchschnitts für die Fast-Linie. Einer der TRADER_MA_TYPE_*-Konstanten (0–8).
$slowPeriod int 26 Anzahl der Perioden für den langsamen gleitenden Durchschnitt (Slow MA). Üblicher Standardwert ist 26.
$slowMAType int TRADER_MA_TYPE_SMA Typ des gleitenden Durchschnitts für die Slow-Linie. Einer der TRADER_MA_TYPE_*-Konstanten (0–8).
$signalPeriod int 9 Anzahl der Perioden für die Signallinie (Signal MA). Üblicher Standardwert ist 9.
$signalMAType int TRADER_MA_TYPE_SMA Typ des gleitenden Durchschnitts für die Signallinie. Einer der TRADER_MA_TYPE_*-Konstanten (0–8).

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein Array mit drei Schlüsseln: 0 (MACD-Werte), 1 (Signallinie) und 2 (Histogramm). Die Indizes der inneren Arrays beginnen an der Position, ab der genügend Daten für die Berechnung vorliegen (Look-back). Bei einem Fehler wird false zurückgegeben.

Beispiele

MACD mit EMA für Fast/Slow und SMA für Signal

<?php
// Schlusskurse (z. B. tägliche Aktienpreise)
$closePrices = [
    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.98, 45.77, 45.41,
    46.02, 45.49, 45.50, 46.51, 46.27, 46.43, 45.96, 46.02,
    46.41, 46.22, 45.64, 46.21, 46.25, 45.71, 46.45, 45.78
];

// MACD mit EMA-Fast, EMA-Slow, EMA-Signal (klassisch)
$result = trader_macdext(
    $closePrices,
    12, TRADER_MA_TYPE_EMA,
    26, TRADER_MA_TYPE_EMA,
     9, TRADER_MA_TYPE_EMA
);

if ($result === false) {
    echo 'Fehler bei der MACD-Berechnung.' . PHP_EOL;
} else {
    [$macd, $signal, $histogram] = $result;
    foreach ($macd as $i => $value) {
        printf(
            "Index %d | MACD: %.4f | Signal: %.4f | Histogramm: %.4f\n",
            $i,
            $value,
            $signal[$i],
            $histogram[$i]
        );
    }
}
Index 33 | MACD: 0.1234 | Signal: 0.0987 | Histogramm: 0.0247 ...

MACD mit WMA für Fast- und Slow-Linie

<?php
// Mehr Datenpunkte für aussagekräftige Ergebnisse
$closePrices = array_map(
    fn($i) => 100 + sin($i * 0.3) * 10 + $i * 0.1,
    range(0, 60)
);

// Fast-Linie: WMA (Weighted MA), Slow-Linie: WMA, Signal: EMA
$result = trader_macdext(
    $closePrices,
    12, TRADER_MA_TYPE_WMA,
    26, TRADER_MA_TYPE_WMA,
     9, TRADER_MA_TYPE_EMA
);

if ($result !== false) {
    [$macd, $signal, $histogram] = $result;
    $lastIndex = array_key_last($macd);
    echo 'Letzter MACD-Wert:      ' . round($macd[$lastIndex], 4) . PHP_EOL;
    echo 'Letzter Signal-Wert:   ' . round($signal[$lastIndex], 4) . PHP_EOL;
    echo 'Letztes Histogramm:    ' . round($histogram[$lastIndex], 4) . PHP_EOL;

    // Einfache Kaufsignal-Erkennung: MACD kreuzt Signal von unten
    $indices = array_keys($macd);
    $secondLast = $indices[count($indices) - 2];
    if ($macd[$secondLast] < $signal[$secondLast] && $macd[$lastIndex] > $signal[$lastIndex]) {
        echo 'Kaufsignal erkannt!' . PHP_EOL;
    }
} else {
    echo 'Nicht genug Daten oder Fehler.' . PHP_EOL;
}
Letzter MACD-Wert: 0.4521 Letzter Signal-Wert: 0.3879 Letztes Histogramm: 0.0642

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung trader muss installiert und in der php.ini aktiviert sein (extension=trader). Installation via pecl install trader.

Mindestanzahl an Datenpunkten: Die Anzahl der benötigten Eingabewerte (Look-back) ergibt sich aus den gewählten Perioden und MA-Typen. Bei zu wenigen Datenpunkten gibt die Funktion false zurück. Im Allgemeinen werden mindestens slowPeriod + signalPeriod - 1 Werte benötigt, bei bestimmten MA-Typen (z. B. DEMA, TEMA) noch deutlich mehr.

Array-Indizes: Die zurückgegebenen Arrays beginnen nicht zwingend bei Index 0. Der erste gültige Index entspricht der Look-back-Periode. Beim Zugriff auf korrespondierende Werte (MACD, Signal, Histogramm) immer denselben Index verwenden.

Unterschied zu trader_macd(): trader_macd() verwendet intern fest EMA für alle drei Linien. trader_macdext() bietet volle Flexibilität bei der Wahl des MA-Typs und ist daher für fortgeschrittene Strategien vorzuziehen.