Signatur
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
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";
}
}
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.