Start · Sprachen · PHP · Referenz · trader_ht_sine

trader_ht_sine

Funktion

Berechnet die Sinuswelle und Lead-Sinuswelle eines Zeitreihenkurses mittels Hilbert-Transformation (Hilbert Transform – SineWave).

Kategorie: math

Signatur

trader_ht_sine(array $real): array|false

Beschreibung

trader_ht_sine gehört zur TRADER-Erweiterung für PHP (basierend auf der TA-Lib) und berechnet aus einem Array von Kurspreisen zwei zyklische Indikatoren: die Sine-Welle und die Lead-Sine-Welle. Beide werden mithilfe der Hilbert-Transformation ermittelt, um die dominante Zyklusperiode des Marktpreises zu identifizieren.

Die Hilbert-Transform-Sinuswelle ist ein fortgeschrittener technischer Indikator, der von John Ehlers entwickelt wurde. Er dient dazu, Marktzyklen objektiv zu messen und Kauf- bzw. Verkaufssignale zu generieren. Wenn die Sine-Linie die Lead-Sine-Linie von unten nach oben kreuzt, gilt dies als Kaufsignal; beim umgekehrten Kreuzen als Verkaufssignal.

Das Ergebnis ist ein assoziatives Array mit zwei Schlüsseln: sine (die eigentliche Sinuswelle) und leadsine (die voreilende Sinuswelle, die um 45 Grad verschoben ist). Beide Sub-Arrays enthalten floatwertige Zeitreihendaten. Die Ausgabe-Arrays sind kürzer als das Eingabe-Array, da für die Berechnung eine Mindestanzahl an Datenpunkten benötigt wird (Lookback-Periode).

Diese Funktion ist besonders in der quantitativen Finanzanalyse nützlich, wenn man zyklische Märkte analysiert und automatisierte Handelssignale erzeugen möchte.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Ein numerisch indiziertes Array mit Gleitkommazahlen, das die Zeitreihe der Kursdaten (z. B. Schlusskurse) repräsentiert. Die Werte müssen in chronologischer Reihenfolge vorliegen.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg wird ein assoziatives Array mit den Schlüsseln sine und leadsine zurückgegeben. Jeder Wert ist ein Array von float-Werten. Bei einem Fehler (z. B. ungültige Eingabe oder zu wenige Datenpunkte) wird false zurückgegeben.

Beispiele

Einfache Berechnung der Sinuswelle

<?php
// Beispielhafte Schlusskurse (mind. 63 Werte empfohlen)
$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, 45.89, 46.92, 46.80,
    46.12, 45.22, 45.68, 45.73, 46.53, 47.68, 47.64, 47.74,
    48.14, 46.66, 45.54, 47.49, 47.74, 47.90, 47.74, 47.90,
    47.90, 47.64, 47.68, 47.64, 47.74, 47.49, 47.49, 47.49,
    47.68, 47.68, 47.64, 47.15, 47.10, 47.15, 47.15, 47.10,
    47.10, 47.49, 47.49, 47.49, 47.49, 47.74, 47.74, 47.90,
    48.14, 48.20, 47.74, 48.14, 48.20, 48.20, 48.14, 48.36
];

$result = trader_ht_sine($close);

if ($result === false) {
    echo "Fehler bei der Berechnung.\n";
} else {
    echo "Sine-Werte (letzte 5):\n";
    $sine = array_slice($result['sine'], -5);
    foreach ($sine as $key => $value) {
        echo "  Index $key: " . round($value, 6) . "\n";
    }

    echo "\nLead-Sine-Werte (letzte 5):\n";
    $leadsine = array_slice($result['leadsine'], -5);
    foreach ($leadsine as $key => $value) {
        echo "  Index $key: " . round($value, 6) . "\n";
    }
}
Sine-Werte (letzte 5): Index ... : (float-Werte je nach Eingabe) Lead-Sine-Werte (letzte 5): Index ... : (float-Werte je nach Eingabe)

Handelssignal durch Kreuzung von Sine und Lead-Sine erkennen

<?php
// Angenommen, $close ist ein Array mit ausreichend Kursdaten
$close = array_map(fn($i) => 100 + 10 * sin($i * 0.3) + rand(-2, 2), range(0, 100));

$result = trader_ht_sine($close);

if ($result !== false) {
    $sine     = array_values($result['sine']);
    $leadsine = array_values($result['leadsine']);
    $count    = count($sine);

    for ($i = 1; $i < $count; $i++) {
        $prevSineBelowLead = $sine[$i - 1] < $leadsine[$i - 1];
        $currSineAboveLead = $sine[$i] >= $leadsine[$i];

        if ($prevSineBelowLead && $currSineAboveLead) {
            echo "Kaufsignal bei Index $i: Sine={$sine[$i]}, LeadSine={$leadsine[$i]}\n";
        } elseif (!$prevSineBelowLead && !$currSineAboveLead) {
            echo "Verkaufssignal bei Index $i: Sine={$sine[$i]}, LeadSine={$leadsine[$i]}\n";
        }
    }
} else {
    echo "Berechnung fehlgeschlagen.\n";
}

// Wichtig · Fallstricke

Lookback-Periode: Die Hilbert-Transformation benötigt eine Mindestanzahl an Eingabewerten (typischerweise ca. 63 Datenpunkte). Bei zu wenigen Werten gibt die Funktion false zurück oder liefert ein leeres Ergebnis. Prüfen Sie stets, ob das Rückgabe-Array false ist.

TRADER-Erweiterung erforderlich: trader_ht_sine ist nur verfügbar, wenn die PHP-Erweiterung trader installiert und aktiviert ist (pecl install trader). Ohne diese Erweiterung ist die Funktion nicht definiert.

Ausgabe-Array-Indizes: Die zurückgegebenen Arrays beginnen nicht zwingend bei Index 0 des Eingabe-Arrays. Die Indizes entsprechen der Position im Originalarray, d. h. die ersten lookback-Werte fehlen im Ergebnis.