Start · Sprachen · PHP · Referenz · trader_macd

trader_macd

Funktion

Berechnet die Moving Average Convergence/Divergence (MACD) für eine Zeitreihe von Kursdaten.

Kategorie: math

Signatur

trader_macd(array $real, int $fastPeriod = 12, int $slowPeriod = 26, int $signalPeriod = 9): array|false

Beschreibung

trader_macd ist Teil der TRADER-Erweiterung (TA-Lib Bindings) und berechnet den technischen Indikator MACD (Moving Average Convergence/Divergence). Dieser Indikator gilt als eines der meistgenutzten Werkzeuge in der technischen Wertpapieranalyse und hilft dabei, Trends, Trendwenden sowie Kauf- und Verkaufssignale in Kurszeitreihen zu identifizieren.

Der MACD besteht aus drei Komponenten: der MACD-Linie (Differenz zwischen schnellem und langsamem exponentiellen gleitenden Durchschnitt), der Signallinie (EMA der MACD-Linie) und dem MACD-Histogramm (Differenz zwischen MACD-Linie und Signallinie). Das Kreuzen der MACD-Linie über oder unter die Signallinie gilt klassischerweise als Kauf- bzw. Verkaufssignal.

Die Funktion gibt ein assoziatives Array mit drei Schlüsseln zurück: real (MACD-Linie), signal (Signallinie) und hist (Histogramm). Die ersten Elemente des Ausgabe-Arrays sind aufgrund der Look-back-Periode nicht belegt; das Array beginnt erst ab dem Index, ab dem ausreichend Daten vorliegen.

Für eine sinnvolle Nutzung sollten die Eingabedaten typischerweise Schlusskurse einer Zeitreihe (z. B. Tages- oder Stundenkurse) sein. Standardparameter sind Fast Period 12, Slow Period 26 und Signal Period 9 – diese entsprechen den klassischen MACD-Einstellungen nach Gerald Appel.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisches Array mit Kursdaten (z. B. Schlusskurse) als Fließkommazahlen, chronologisch sortiert (älteste Werte zuerst).
$fastPeriod int 12 Periode für den schnellen exponentiellen gleitenden Durchschnitt (Fast EMA). Typischer Standardwert: 12. Muss kleiner als slowPeriod sein.
$slowPeriod int 26 Periode für den langsamen exponentiellen gleitenden Durchschnitt (Slow EMA). Typischer Standardwert: 26. Muss größer als fastPeriod sein.
$signalPeriod int 9 Periode für die Signallinie (EMA der MACD-Linie). Typischer Standardwert: 9.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein assoziatives Array mit den Schlüsseln real (MACD-Linie), signal (Signallinie) und hist (Histogramm). Jeder Wert ist selbst ein numerisches Array mit den berechneten Werten. Bei einem Fehler (z. B. ungültige Parameter oder zu wenige Datenpunkte) wird false zurückgegeben.

Beispiele

MACD für eine Schlusskurs-Zeitreihe berechnen

<?php
// Beispielhafte Schlusskurse einer Aktie (chronologisch, 30 Datenpunkte)
$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, 43.61, 44.33, 44.83,
    45.10, 45.15, 43.61, 44.33, 44.83, 45.10, 45.15, 43.61,
    44.33, 44.83, 45.10, 45.15, 43.61, 44.33
];

// MACD mit Standardeinstellungen (12, 26, 9) berechnen
$result = trader_macd($closePrices, 12, 26, 9);

if ($result === false) {
    echo "Fehler bei der MACD-Berechnung (zu wenige Datenpunkte oder ungültige Parameter).\n";
} else {
    echo "MACD-Linie:\n";
    print_r($result['real']);

    echo "Signallinie:\n";
    print_r($result['signal']);

    echo "Histogramm:\n";
    print_r($result['hist']);
}
?>

Kauf- und Verkaufssignale aus MACD ableiten

<?php
// Schlusskurse (mindestens slowPeriod + signalPeriod - 1 Datenpunkte nötig)
$closePrices = array_map(
    fn($i) => 100 + sin($i / 5) * 10 + $i * 0.1,
    range(0, 59)
);

$fastPeriod   = 12;
$slowPeriod   = 26;
$signalPeriod = 9;

$macd = trader_macd($closePrices, $fastPeriod, $slowPeriod, $signalPeriod);

if ($macd === false) {
    echo "Berechnung fehlgeschlagen.\n";
    exit;
}

$macdLine  = $macd['real'];
$signalLine = $macd['signal'];

// Nur gültige (nicht-null) Indizes auswerten
$indices = array_keys($macdLine);

for ($i = 1; $i < count($indices); $i++) {
    $prev = $indices[$i - 1];
    $curr = $indices[$i];

    // MACD-Linie kreuzt Signallinie von unten nach oben => Kaufsignal
    if ($macdLine[$prev] < $signalLine[$prev] && $macdLine[$curr] >= $signalLine[$curr]) {
        echo "Kaufsignal bei Index $curr (Kurs: " . round($closePrices[$curr], 2) . ")\n";
    }
    // MACD-Linie kreuzt Signallinie von oben nach unten => Verkaufssignal
    if ($macdLine[$prev] > $signalLine[$prev] && $macdLine[$curr] <= $signalLine[$curr]) {
        echo "Verkaufssignal bei Index $curr (Kurs: " . round($closePrices[$curr], 2) . ")\n";
    }
}
?>

// Wichtig · Fallstricke

Erweiterung: trader_macd erfordert die installierte und aktivierte PECL-Erweiterung trader (TA-Lib PHP-Bindings). Sie ist nicht im PHP-Kern enthalten und muss separat installiert werden (pecl install trader).

Mindestanzahl Datenpunkte: Für die Berechnung mit Standardparametern (12, 26, 9) werden mindestens slowPeriod + signalPeriod - 1 = 34 Datenpunkte benötigt. Bei zu wenigen Daten gibt die Funktion false zurück. Die Ausgabe-Arrays beginnen nicht bei Index 0, sondern erst ab dem Index, ab dem ausreichend historische Daten vorliegen (Look-back-Offset).

Kein Ersatz für Finanzberatung: Technische Indikatoren wie der MACD sind mathematische Hilfsmittel und keine garantierten Handelssignale. Sie sollten stets im Kontext weiterer Analysen verwendet werden.