Start · Sprachen · PHP · Referenz · trader_mavp

trader_mavp

Funktion

Berechnet einen gleitenden Durchschnitt mit variabler Periode (Moving Average with Variable Period) auf Basis einer Zeitreihe.

Kategorie: math

Signatur

trader_mavp(array $real, array $periods, int $minPeriod = 2, int $maxPeriod = 30, int $mAType = 0): array|false

Beschreibung

trader_mavp gehört zur TRADER-Erweiterung für PHP (basierend auf der TA-Lib) und berechnet einen gleitenden Durchschnitt, dessen Periode für jeden Datenpunkt individuell aus einem zweiten Array ($periods) entnommen wird. Dies ermöglicht adaptive technische Analysen, bei denen die Glättungsperiode dynamisch – etwa in Abhängigkeit von Volatilität oder anderen Marktkennzahlen – variiert.

Der Parameter $minPeriod und $maxPeriod begrenzen die tatsächlich verwendeten Periodenswerte nach unten bzw. oben. Der Typ des gleitenden Durchschnitts wird über $mAType gesteuert; er akzeptiert die gleichen Konstanten wie andere TRADER-Funktionen (z. B. TRADER_MA_TYPE_SMA, TRADER_MA_TYPE_EMA usw.).

Typische Anwendungsszenarien sind adaptive Handelssysteme, bei denen kürzere Perioden in volatilen Märkten und längere Perioden in ruhigen Phasen verwendet werden. Die Ausgabe ist ein Array mit denselben numerischen Schlüsseln wie die Eingabedaten, jedoch wird der Beginn des Arrays – entsprechend dem benötigten Vorlauf (lookback) – ausgelassen.

Die Funktion gibt false zurück, wenn ein Fehler auftritt, etwa bei ungültigen Eingabedaten oder falsch konfigurierten Parametern.

Parameter

Name Typ Default Beschreibung
$real Pflicht array Numerisch indiziertes Array mit den Eingabedaten (z. B. Schlusskurse einer Zeitreihe) als Fließkommazahlen.
$periods Pflicht array Array mit den zu verwendenden Periodenswerten für jeden Datenpunkt. Die Werte werden durch $minPeriod und $maxPeriod begrenzt.
$minPeriod int 2 Minimale Periodenswert-Untergrenze. Werte in $periods unterhalb dieses Werts werden auf diesen Wert angehoben.
$maxPeriod int 30 Maximale Periodenswert-Obergrenze. Werte in $periods oberhalb dieses Werts werden auf diesen Wert begrenzt.
$mAType int 0 Typ des gleitenden Durchschnitts. Erlaubte Werte sind die TRADER_MA_TYPE_*-Konstanten, z. B. TRADER_MA_TYPE_SMA (0), TRADER_MA_TYPE_EMA (1) usw.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den berechneten gleitenden Durchschnittswerten zurück. Die ersten Elemente werden abhängig vom maximal benötigten Vorlauf ausgelassen. Bei einem Fehler (z. B. ungültige Eingaben) wird false zurückgegeben.

Beispiele

Einfacher MAVP mit SMA-Typ und konstanter Perioden-Variante

<?php
// Beispiel-Schlusskurse
$closes = [10.0, 11.5, 12.0, 11.0, 13.5, 14.0, 13.0, 15.0, 16.5, 17.0];

// Perioden-Array: jeder Datenpunkt erhält eine eigene Periode
$periods = [3, 3, 3, 4, 4, 4, 5, 5, 5, 5];

// Berechnung: SMA (TRADER_MA_TYPE_SMA = 0), Min 2, Max 5
$result = trader_mavp($closes, $periods, 2, 5, 0);

if ($result === false) {
    echo "Fehler bei der Berechnung.\n";
} else {
    print_r($result);
}

Adaptiver MAVP mit Volatilitäts-basierten Perioden und EMA

<?php
// Simulierte Schlusskurse (z. B. aus einer Datenbank)
$closes = [100.0, 102.5, 101.0, 98.5, 97.0, 99.5, 103.0, 105.5, 104.0, 107.0,
           108.5, 106.0, 109.0, 111.5, 110.0, 113.0, 115.5, 114.0, 117.0, 120.0];

// Dynamische Perioden: in volatilen Phasen kürzere Perioden
$volatility = [5, 5, 7, 10, 10, 8, 5, 4, 6, 4,
               3, 7, 4, 3, 5, 3, 3, 5, 3, 3];

// TRADER_MA_TYPE_EMA = 1
$result = trader_mavp($closes, $volatility, 3, 10, 1);

if ($result !== false) {
    foreach ($result as $index => $value) {
        printf("Index %d => EMA (variable Periode): %.4f\n", $index, $value);
    }
} else {
    echo "Fehler: trader_mavp hat false zurückgegeben.\n";
}

// Wichtig · Fallstricke

Voraussetzung: Die PHP-TRADER-Erweiterung muss installiert und aktiviert sein (pecl install trader). Ohne diese Erweiterung ist trader_mavp nicht verfügbar.

Lookback: Das Ergebnis-Array enthält weniger Elemente als das Eingabe-Array, da für die Berechnung ein Vorlauf (lookback) benötigt wird, der von $maxPeriod abhängt. Die Indizes im Ergebnis-Array entsprechen den Original-Indizes der Eingabedaten.

Periodenswerte: Die Werte im $periods-Array werden intern als ganzzahlige Perioden interpretiert. Fließkommazahlen werden abgeschnitten. Werte außerhalb von [$minPeriod, $maxPeriod] werden auf die jeweilige Grenze begrenzt, anstatt einen Fehler zu erzeugen.