Signatur
Beschreibung
Die Funktion trader_kama() gehört zur PECL-Erweiterung Trader und implementiert den von Perry Kaufman entwickelten Kaufman Adaptive Moving Average. Dieser gleitende Durchschnitt passt seine Geschwindigkeit dynamisch an die aktuelle Marktvolatilität an: In trendfolgenden Phasen reagiert er schnell, in seitwärts tendierenden Märkten hingegen sehr langsam. Damit werden Rauschen und Fehlsignale deutlich reduziert.
Der KAMA basiert auf dem Efficiency Ratio (ER), das die tatsächliche Kursbewegung eines Zeitraums ins Verhältnis zur Summe der einzelnen Tagesveränderungen setzt. Je höher das ER, desto schneller folgt der KAMA dem Preis; bei geringem ER bleibt er nahezu konstant. Typische Anwendungsgebiete sind die technische Analyse von Aktien, Forex- oder Kryptokursen.
Der Parameter timePeriod bestimmt die Länge des Berechnungsfensters. Die zurückgegebenen Array-Indizes stimmen mit den Indizes des Eingabe-Arrays überein, wobei die ersten timePeriod - 1 Elemente nicht berechnet werden können und daher fehlen.
Die Funktion erfordert die installierte und aktivierte PECL trader-Erweiterung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $real Pflicht | array | Eindimensionales Array mit numerischen Kurswerten (z. B. Schlusskurse), indiziert von 0 bis n-1. |
|
| $timePeriod | int | 30 | Anzahl der Perioden, die für die Berechnung des Efficiency Ratio verwendet werden. Muss im Bereich 2 bis 100000 liegen. |
Rückgabewert
timePeriod - 1. Bei einem Fehler (z. B. ungültige Parameter oder zu wenige Datenpunkte) wird false zurückgegeben.Beispiele
Einfache KAMA-Berechnung mit Standard-Periode
<?php
// Beispiel-Schlusskurse (z. B. Tagesschlusskurse einer Aktie)
$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.98, 46.92, 46.85,
46.28, 46.83, 46.72, 46.57, 46.28, 46.83, 46.72, 46.57,
47.21, 47.46, 47.55, 47.70, 47.90, 48.00, 47.68, 48.72];
$kama = trader_kama($closes, 10);
if ($kama === false) {
echo "Fehler bei der Berechnung des KAMA.\n";
} else {
foreach ($kama as $index => $value) {
printf("Index %2d: KAMA = %.4f\n", $index, $value);
}
}
KAMA mit Originaldaten vergleichen (Abweichung zum Kurs)
<?php
$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.98, 46.92, 46.85,
46.28, 46.83, 46.72, 46.57, 47.21, 47.46, 47.55, 47.70,
47.90, 48.00, 47.68, 48.72, 48.50, 48.90, 49.10, 49.30];
$timePeriod = 14;
$kama = trader_kama($closes, $timePeriod);
if ($kama !== false) {
echo "Vergleich Kurs vs. KAMA:\n";
foreach ($kama as $i => $kamaValue) {
$diff = $closes[$i] - $kamaValue;
printf(
"Tag %2d | Kurs: %.2f | KAMA: %.4f | Diff: %+.4f\n",
$i, $closes[$i], $kamaValue, $diff
);
}
}
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Erweiterung trader muss installiert sein (pecl install trader) und in der php.ini via extension=trader aktiviert werden.
Fehlende Anfangswerte: Die ersten timePeriod - 1 Elemente werden im Ergebnis-Array nicht belegt. Beim Zugriff auf alle Indizes des ursprünglichen Arrays kann dies zu undefined offset-Warnungen führen — prüfe mit isset() oder iteriere nur über das Ergebnis-Array selbst.
Fehlerbehandlung: Bei ungültigen Parametern gibt die Funktion false zurück. Zur Fehlerdiagnose kann trader_errno() aufgerufen werden, um den letzten Fehlercode der Trader-Erweiterung abzufragen.