Start · Sprachen · PHP · Referenz · trader_set_compat

trader_set_compat

Funktion

Setzt den Kompatibilitätsmodus der TRADER-Erweiterung, um das Verhalten bei der Ausgabe von Ergebnisarrays zu steuern.

Kategorie: math

Signatur

trader_set_compat(int $compatId): void

Beschreibung

Die Funktion trader_set_compat() gehört zur PHP-TRADER-Erweiterung (Technical Analysis), die auf der TA-Lib basiert. Mit ihr lässt sich der globale Kompatibilitätsmodus festlegen, der bestimmt, wie Ergebnis-Arrays bei Berechnungen wie trader_rsi(), trader_macd() usw. indiziert werden.

Standardmäßig (TRADER_COMPAT_BROKEN) beginnen die Ergebnisarrays mit dem Index 0, was dazu führt, dass die Indizes nicht mit den Eingabedaten übereinstimmen – d. h. der erste Rückgabewert entspricht nicht unbedingt dem ersten Eingabeelement. Im Kompatibilitätsmodus TRADER_COMPAT_FIXED werden die Arrays so aufgefüllt, dass die Indizes mit den Eingabedaten übereinstimmen, indem fehlende Anfangswerte als NAN eingefügt werden.

Die Einstellung gilt global für alle nachfolgenden TRADER-Funktionsaufrufe in der aktuellen Skriptausführung. Sie sollte daher idealerweise zu Beginn des Skripts gesetzt werden. Die beiden verfügbaren Konstanten sind TRADER_COMPAT_BROKEN (Wert 0) und TRADER_COMPAT_FIXED (Wert 1).

Die Wahl des richtigen Modus ist wichtig, wenn Ergebnisse einer Berechnung mit den originalen Zeitreihendaten (z. B. OHLCV-Kursdaten) verknüpft werden sollen – in diesem Fall empfiehlt sich TRADER_COMPAT_FIXED.

Parameter

Name Typ Default Beschreibung
$compatId Pflicht int Der gewünschte Kompatibilitätsmodus. Erlaubte Werte sind TRADER_COMPAT_BROKEN (0, Standard, Indizes beginnen bei 0) und TRADER_COMPAT_FIXED (1, Indizes werden mit NAN-Werten aufgefüllt, um mit den Eingabedaten übereinzustimmen).

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

RSI-Berechnung mit TRADER_COMPAT_FIXED

<?php
// Kompatibilitätsmodus aktivieren: Ergebnisarray hat gleiche Indizes wie Eingabe
trader_set_compat(TRADER_COMPAT_FIXED);

$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, 43.61, 44.33, 44.83, 45.10, 45.15, 44.34, 44.09];

$rsi = trader_rsi($close, 14);

foreach ($close as $index => $price) {
    $rsiValue = isset($rsi[$index]) ? (is_nan($rsi[$index]) ? 'NAN' : round($rsi[$index], 2)) : 'NAN';
    echo "Index $index: Kurs = $price, RSI = $rsiValue\n";
}
Index 0: Kurs = 44.34, RSI = NAN Index 1: Kurs = 44.09, RSI = NAN ... Index 14: Kurs = 44.33, RSI = 49.95 ...

Vergleich BROKEN vs. FIXED Modus

<?php
$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, 43.61, 44.33, 44.83, 45.10, 45.15, 44.34, 44.09];

// Modus BROKEN (Standard): Index beginnt bei 0
trader_set_compat(TRADER_COMPAT_BROKEN);
$rsiBroken = trader_rsi($close, 14);
echo "BROKEN - Erster Index: " . array_key_first($rsiBroken) . "\n";
echo "BROKEN - Anzahl Elemente: " . count($rsiBroken) . "\n";

// Modus FIXED: Index stimmt mit Eingabe überein
trader_set_compat(TRADER_COMPAT_FIXED);
$rsiFixed = trader_rsi($close, 14);
echo "FIXED  - Erster Index: " . array_key_first($rsiFixed) . "\n";
echo "FIXED  - Anzahl Elemente: " . count($rsiFixed) . "\n";
BROKEN - Erster Index: 0 BROKEN - Anzahl Elemente: 6 FIXED - Erster Index: 0 FIXED - Anzahl Elemente: 20

// Wichtig · Fallstricke

Achtung: Die Einstellung wirkt sich global auf alle nachfolgenden TRADER-Funktionsaufrufe aus. Falls der Modus mitten im Skript gewechselt wird, können inkonsistente Ergebnisse entstehen. Es empfiehlt sich, trader_set_compat() einmalig zu Beginn des Skripts aufzurufen.

Im Modus TRADER_COMPAT_FIXED enthalten die zurückgegebenen Arrays NAN-Werte für Positionen, für die noch nicht genügend Datenpunkte vorhanden sind (z. B. die ersten Periode - 1 Elemente). Diese sollten vor der Weiterverarbeitung geprüft werden, z. B. mit is_nan().

Die TRADER-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (PECL: pecl install trader).