Signatur
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 AverageTRADER_MA_TYPE_EMA= 1 – Exponential Moving AverageTRADER_MA_TYPE_WMA= 2 – Weighted Moving AverageTRADER_MA_TYPE_DEMA= 3 – Double Exponential Moving AverageTRADER_MA_TYPE_TEMA= 4 – Triple Exponential Moving AverageTRADER_MA_TYPE_TRIMA= 5 – Triangular Moving AverageTRADER_MA_TYPE_KAMA= 6 – Kaufman Adaptive Moving AverageTRADER_MA_TYPE_MAMA= 7 – MESA Adaptive Moving AverageTRADER_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
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]
);
}
}
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;
}
// 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.