Signatur
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
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";
}
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";
// 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).