Start · Sprachen · PHP · Referenz · trader_cmo

trader_cmo

Funktion

Berechnet den <code>Chande Momentum Oscillator (CMO)</code> für eine Zeitreihe von Kursdaten.

Kategorie: math

Signatur

trader_cmo(array $real, int $timePeriod = 14): array|false

Beschreibung

Die Funktion trader_cmo() ist Teil der PECL-Erweiterung Trader und implementiert den Chande Momentum Oscillator, der 1994 von Tushar Chande entwickelt wurde. Der CMO misst die Dynamik (Momentum) eines Instruments, indem er die Differenz zwischen der Summe aller Aufwärtsbewegungen und der Summe aller Abwärtsbewegungen in einem bestimmten Zeitraum bildet und durch deren Gesamtsumme teilt. Das Ergebnis wird mit 100 multipliziert, sodass der Indikator zwischen -100 und +100 schwankt.

Ein CMO-Wert nahe +100 deutet auf eine starke Aufwärtsdynamik hin, während ein Wert nahe -100 eine starke Abwärtsdynamik signalisiert. Werte um die Null-Linie zeigen eine seitwärts gerichtete, unentschlossene Kursbewegung. Typische Handelssignale entstehen bei Schwellenwerten wie ±50 oder durch Divergenzen zwischen Preis und Indikator.

Im Gegensatz zum klassischen RSI verwendet der CMO unverstärkte Rohdaten und nicht die geglätteten Werte, was ihn sensibler auf Kursschwankungen reagieren lässt. Der Indikator eignet sich besonders zur Trendstärkenanalyse und zur Erkennung von Überkauf- bzw. Überverkauft-Zuständen in technischen Handelsstrategien.

Die Rückgabe ist ein Array, das nur für Positionen ab Index timePeriod berechnete Werte enthält — führende Elemente werden ausgelassen, da für sie noch nicht genug Datenpunkte vorliegen.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Eindimensionales Array mit numerischen Kursdaten (z. B. Schlusskurse) in chronologischer Reihenfolge.
$timePeriod int 14 Anzahl der Perioden, über die der CMO berechnet wird. Typische Werte liegen zwischen 9 und 20. Muss mindestens 2 betragen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den berechneten CMO-Werten zurück. Die ersten Einträge fehlen, da für sie nicht genug Datenpunkte vorhanden sind (Look-back-Periode). Bei ungültigen Eingaben oder einem Fehler wird false zurückgegeben.

Beispiele

Einfache CMO-Berechnung mit Schlusskursen

<?php
// Beispielhafte Schlusskurse einer Aktie
$closePrices = [
    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.15, 46.00,
    46.50, 46.00, 45.00, 46.50, 47.00
];

$timePeriod = 9;
$cmo = trader_cmo($closePrices, $timePeriod);

if ($cmo === false) {
    echo "Fehler bei der CMO-Berechnung." . PHP_EOL;
} else {
    echo "CMO-Werte (Periode: {$timePeriod}):" . PHP_EOL;
    foreach ($cmo as $index => $value) {
        printf("Index %2d: %.4f\n", $index, $value);
    }
}
?>
CMO-Werte (Periode: 9): Index 9: 22.2222 Index 10: 33.3333 Index 11: 50.0000 ...

CMO zur Erkennung von Überkauf/Überverkauft-Zuständen

<?php
$closePrices = [
    10, 11, 10.5, 12, 13, 12.5, 14, 15,
    14.5, 13, 12, 11.5, 10, 9.5, 9, 8.5,
    8, 7.5, 7, 6.5
];

$cmo = trader_cmo($closePrices, 14);

if ($cmo === false) {
    echo "Berechnung fehlgeschlagen." . PHP_EOL;
} else {
    foreach ($cmo as $i => $value) {
        $signal = '';
        if ($value >= 50) {
            $signal = ' => ÜBERKAUFT';
        } elseif ($value <= -50) {
            $signal = ' => ÜBERVERKAUFT';
        }
        printf("Periode %d: CMO = %.2f%s\n", $i, $value, $signal);
    }
}
?>
Periode 14: CMO = 28.57 Periode 15: CMO = 0.00 Periode 16: CMO = -42.86 Periode 17: CMO = -75.00 => ÜBERVERKAUFT Periode 18: CMO = -100.00 => ÜBERVERKAUFT Periode 19: CMO = -100.00 => ÜBERVERKAUFT

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung trader muss installiert und aktiviert sein (pecl install trader + extension=trader.so in der php.ini). Die Erweiterung basiert auf der TA-Lib-Bibliothek.

Look-back-Periode: Die ersten timePeriod Einträge des Eingabe-Arrays haben keine entsprechenden Ausgabewerte. Das Ergebnis-Array beginnt daher erst ab Index timePeriod - 1 (nullbasiert) des Eingabe-Arrays. Beim Mapping der Ausgabe-Indizes auf Original-Daten ist dies zu berücksichtigen.

Vergleich mit RSI: Der CMO unterscheidet sich vom RSI darin, dass er keine Glättung anwendet und direkt mit den rohen Kursveränderungen rechnet. Er reagiert dadurch empfindlicher auf Marktbewegungen, kann aber auch rauschempfindlicher sein.