Start · Sprachen · PHP · Referenz · trader_ht_phasor

trader_ht_phasor

Funktion

Berechnet die Phasor-Komponenten (In-Phase und Quadrature) einer Zeitreihe mittels Hilbert-Transformation.

Kategorie: math

Signatur

trader_ht_phasor(array $real): array|false

Beschreibung

trader_ht_phasor ist Teil der PECL-Erweiterung Trader und implementiert die technische Analyse-Funktion Hilbert Transform – Phasor Components (HT_PHASOR). Die Funktion analysiert eine Preis- oder Datenzeitreihe und gibt zwei Komponenten zurück: den In-Phase-Anteil (I) und den Quadrature-Anteil (Q). Diese beiden Werte beschreiben gemeinsam den Phasor des dominanten Zyklus im Datenstrom.

Die Hilbert-Transformation ist ein mathematisches Verfahren aus der Signalverarbeitung, das im Bereich der technischen Finanzanalyse eingesetzt wird, um zyklische Muster in Marktdaten zu identifizieren. In-Phase und Quadrature ermöglichen es, Phase und Amplitude des dominanten Marktzyklus zu berechnen, was z. B. als Grundlage für den Hilbert-Transform-Phasen-Indikator oder andere adaptive Indikatoren dient.

Das Ergebnis ist ein assoziatives Array mit zwei Schlüsseln: inphase und quadrature, jeweils als numerisch indizierte Arrays. Da die Berechnung einen Vorlauf benötigt, sind die ersten Einträge im Ergebnis-Array nicht belegt (Lookback-Periode).

Die Funktion ist nützlich für Trader und Quants, die adaptive Marktzyklusanalyse betreiben und zuverlässig den dominanten Zyklus in Finanzzeitreihen bestimmen möchten.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisch indiziertes Array mit reellen Eingabewerten (z. B. Schlusskurse). Die Werte müssen vom Typ float sein oder implizit konvertierbar.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array mit den Schlüsseln inphase (In-Phase-Komponente) und quadrature (Quadrature-Komponente) zurück. Beide Werte sind numerisch indizierte Arrays mit float-Werten. Bei einem Fehler (z. B. ungültige Eingabe oder Trader-Fehler) wird false zurückgegeben.

Beispiele

Phasor-Komponenten für eine Kursreihe berechnen

<?php
// Beispiel-Schlusskurse (mind. ~32 Werte für sinnvolle Ergebnisse)
$close = [
    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, 44.83, 45.10,
    45.15, 43.61, 44.33, 44.83, 45.10, 45.15, 43.61, 44.33
];

$result = trader_ht_phasor($close);

if ($result === false) {
    echo 'Fehler bei der Berechnung.';
} else {
    echo 'In-Phase-Komponenten:' . PHP_EOL;
    foreach ($result['inphase'] as $idx => $val) {
        echo "  [{$idx}] = {$val}" . PHP_EOL;
    }
    echo 'Quadrature-Komponenten:' . PHP_EOL;
    foreach ($result['quadrature'] as $idx => $val) {
        echo "  [{$idx}] = {$val}" . PHP_EOL;
    }
}

Phase und Amplitude aus Phasor-Komponenten ableiten

<?php
$close = array_map(
    fn($i) => 44.0 + 1.5 * sin($i * M_PI / 8),
    range(0, 63)
);

$result = trader_ht_phasor($close);

if ($result !== false) {
    $inphase    = $result['inphase'];
    $quadrature = $result['quadrature'];

    // Gemeinsame Indizes bestimmen
    $keys = array_intersect_key($inphase, $quadrature);

    foreach (array_keys($keys) as $i) {
        $phase     = atan2((float)$quadrature[$i], (float)$inphase[$i]);
        $amplitude = sqrt($inphase[$i] ** 2 + $quadrature[$i] ** 2);
        printf("[%d] Phase: %.4f rad | Amplitude: %.4f\n", $i, $phase, $amplitude);
    }
}

// Wichtig · Fallstricke

PECL-Abhängigkeit: trader_ht_phasor erfordert die PECL-Erweiterung trader, die auf der TA-Lib-Bibliothek basiert. Diese muss separat installiert und in der php.ini aktiviert sein (extension=trader).

Lookback-Periode: Die Hilbert-Transformation benötigt einen Vorlauf von etwa 32 Datenpunkten. Ergebnisarrays enthalten daher am Anfang keine Werte; die Schlüssel der Ausgabe beginnen erst ab dem Index, ab dem genug Daten vorhanden sind.

Fehlerbehandlung: Bei einem internen Trader-Fehler wird false zurückgegeben. Mit trader_errno() kann der Fehlercode abgefragt werden.