Signatur
Beschreibung
trader_ht_dcperiod ist Teil der TRADER-Extension (PHP-Bindings für die TA-Lib) und implementiert den Hilbert-Transform – Dominant Cycle Period-Indikator. Er analysiert eine Preis- oder Datenzeitreihe und ermittelt, wie lang aktuell der dominante Marktzyklus in Kerzen (Bars) ist.
Die Hilbert-Transformation ist ein signalverarbeitungsbasiertes Verfahren, das aus dem Bereich der technischen Analyse stammt. John Ehlers popularisierte diesen Ansatz, um adaptive Indikatoren zu entwickeln, die sich automatisch an die aktuelle Marktfrequenz anpassen. Der Rückgabewert gibt pro Bar (soweit berechenbar) die Länge des dominanten Zyklus in Bars an.
Typische Einsatzbereiche sind der algorithmische Handel und die technische Analyse von Finanzzeitreihen: Der Indikator hilft dabei, den aktuellen Marktzyklus zu identifizieren und andere adaptive Indikatoren (z. B. adaptive gleitende Durchschnitte) dynamisch an den Zyklus anzupassen. Er eignet sich besonders gut, wenn Märkte zwischen Trend- und Seitwärtsphasen wechseln.
Zu beachten ist, dass der Indikator eine Vorlaufzeit (Lookback) benötigt, bevor erste Werte berechnet werden können. Die ersten Elemente des Ergebnis-Arrays enthalten daher keine gültigen Werte; die TRADER-Extension liefert nur die Elemente zurück, für die ein gültiger Wert existiert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $real Pflicht | array | Numerisches Array mit den Eingabedaten der Zeitreihe (z. B. Schlusskurse). Die Werte müssen als float vorliegen und chronologisch sortiert sein (älteste Werte zuerst). |
Rückgabewert
'begIndex' (erster gültiger Index im Eingabe-Array), 'nbElement' (Anzahl der berechneten Werte) und 'real' (Array der berechneten Zyklusperioden als float) zurück. Im Fehlerfall (z. B. ungültige Eingabe oder zu wenige Datenpunkte) wird false zurückgegeben.Beispiele
Dominante Zyklusperiode aus Schlusskursen berechnen
<?php
// Beispielhafte Schlusskurse (mind. ~32 Werte für sinnvolle Ergebnisse)
$closes = [
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.44, 45.43, 45.44,
45.55, 45.43, 46.01, 46.45, 46.92, 46.74, 46.70, 46.45,
46.00, 45.85, 45.92, 45.88, 45.61, 45.32, 45.10, 44.89,
44.55, 44.01, 43.61, 43.33, 43.55, 44.33, 44.83, 45.10
];
$result = trader_ht_dcperiod($closes);
if ($result === false) {
echo "Berechnung fehlgeschlagen.\n";
} else {
echo "Erster gültiger Index: " . $result['begIndex'] . "\n";
echo "Anzahl berechneter Werte: " . $result['nbElement'] . "\n";
echo "Letzte dominante Zyklusperiode: " . round(end($result['real']), 4) . " Bars\n";
}
Adaptive Anpassung eines gleitenden Durchschnitts anhand der Zyklusperiode
<?php
// Schlusskurse aus einer Datenquelle laden (hier vereinfacht)
$closes = array_map('floatval', file('closes.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
$dcResult = trader_ht_dcperiod($closes);
if ($dcResult !== false && $dcResult['nbElement'] > 0) {
// Aktuelle dominante Zyklusperiode (letzter berechneter Wert)
$currentPeriod = (int) round(end($dcResult['real']));
echo "Aktuelle dominante Zyklusperiode: {$currentPeriod} Bars\n";
// Adaptiven SMA mit der halben Zyklusperiode berechnen
$smaPeriod = max(2, intdiv($currentPeriod, 2));
$smaResult = trader_sma($closes, $smaPeriod);
if ($smaResult !== false) {
$lastSma = round(end($smaResult['real']), 4);
echo "Adaptiver SMA (Periode {$smaPeriod}): {$lastSma}\n";
}
} else {
echo "Nicht genügend Daten für die Berechnung.\n";
}
// Wichtig · Fallstricke
Lookback-Zeitraum: Der Indikator benötigt mindestens 32 Eingabewerte, bevor der erste gültige Ausgabewert berechnet werden kann. Bei weniger Datenpunkten gibt die Funktion false zurück oder liefert ein leeres 'real'-Array.
TRADER-Extension erforderlich: Die Funktion ist nur verfügbar, wenn die PHP-Extension trader installiert und aktiviert ist (extension=trader in der php.ini). Die Extension basiert auf der C-Bibliothek TA-Lib.
Numerische Stabilität: Die Hilbert-Transformation reagiert empfindlich auf sehr flache oder konstante Zeitreihen. In solchen Fällen können die Ergebnisse numerisch instabil oder schwer interpretierbar sein.
Indexversatz beachten: Das zurückgegebene 'real'-Array beginnt nicht zwingend bei Index 0. Der Schlüssel 'begIndex' gibt an, welchem Index im Eingabe-Array das erste Element in 'real' entspricht.