Signatur
Beschreibung
Die Funktion trader_natr gehört zur PECL-Erweiterung Trader, die technische Analysefunktionen der TA-Lib bereitstellt. Sie berechnet die normalisierte Average True Range (NATR), einen Volatilitätsindikator, der die klassische Average True Range (ATR) durch den Schlusskurs dividiert und das Ergebnis mit 100 multipliziert. Dadurch ist der Wert als prozentualer Anteil am Preis ausgedrückt und ermöglicht einen direkten Vergleich zwischen Instrumenten mit unterschiedlichen Preisniveaus.
Die True Range eines Tages ergibt sich aus dem Maximum dreier Werte: aktuelle Handelsspanne (High minus Low), Differenz zwischen gestrigem Schluss und heutigem High sowie Differenz zwischen gestrigem Schluss und heutigem Low. Die NATR ist der exponentielle gleitende Durchschnitt dieser True Ranges, normalisiert auf den Schlusskurs.
Typische Anwendungen sind Trendstärkemessungen, die Auswahl von Stop-Loss-Abständen oder die Filterung von Handelssignalen: Bei hoher NATR (hohe Volatilität) können weite Stops sinnvoll sein, bei niedriger NATR enge. Im Gegensatz zur ATR erlaubt die NATR den Vergleich verschiedener Basiswerte ohne manuelle Skalierung.
Die Rückgabe ist ein numerisch indiziertes Array, dessen Anfangsindex dem Offset in den Eingabedaten entspricht, ab dem genügend Perioden für die Berechnung vorliegen (timePeriod - 1 Werte am Anfang werden übersprungen).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $high Pflicht | array | Array der Tageshöchstkurse (Hochkurse) in chronologischer Reihenfolge. | |
| $low Pflicht | array | Array der Tagestiefstkurse (Tiefstkurse) in chronologischer Reihenfolge. | |
| $close Pflicht | array | Array der Tagesschlusskurse in chronologischer Reihenfolge. Wird zur Normalisierung der ATR verwendet. | |
| $timePeriod | int | 14 | Anzahl der Perioden für den gleitenden Durchschnitt der True Range. Gültige Werte: 2–100000. Standard ist 14. |
Rückgabewert
timePeriod - 1 Datenpunkte kein Ergebnis berechnet werden kann. Im Fehlerfall (z. B. ungültige Eingaben oder nicht installierte Trader-Extension) wird false zurückgegeben.Beispiele
Einfache NATR-Berechnung für eine Handelswoche
<?php
// Beispiel-Kursdaten für 20 Handelstage
$high = [102, 104, 103, 107, 106, 109, 108, 110, 112, 111,
113, 115, 114, 116, 118, 117, 119, 121, 120, 122];
$low = [98, 100, 99, 103, 102, 105, 104, 106, 108, 107,
109, 111, 110, 112, 114, 113, 115, 117, 116, 118];
$close = [100, 102, 101, 105, 104, 107, 106, 108, 110, 109,
111, 113, 112, 114, 116, 115, 117, 119, 118, 120];
$natr = trader_natr($high, $low, $close, 14);
if ($natr === false) {
echo 'Fehler bei der NATR-Berechnung.' . PHP_EOL;
} else {
foreach ($natr as $index => $value) {
printf("Tag %2d: NATR = %.4f %%\n", $index + 1, $value);
}
}
Vergleich der Volatilität zweier Instrumente
<?php
// Instrument A: niedrigpreisige Aktie (~10 EUR)
$highA = [10.5, 10.8, 10.6, 10.9, 11.0, 11.2, 11.1, 11.3, 11.5, 11.4,
11.6, 11.8, 11.7, 11.9, 12.0, 12.1, 12.3, 12.2, 12.4, 12.5];
$lowA = [9.8, 10.1, 9.9, 10.2, 10.3, 10.5, 10.4, 10.6, 10.8, 10.7,
10.9, 11.1, 11.0, 11.2, 11.3, 11.4, 11.6, 11.5, 11.7, 11.8];
$closeA = [10.0, 10.3, 10.1, 10.5, 10.6, 10.8, 10.7, 10.9, 11.1, 11.0,
11.2, 11.4, 11.3, 11.5, 11.6, 11.7, 11.9, 11.8, 12.0, 12.1];
// Instrument B: hochpreisige Aktie (~1000 EUR)
$highB = array_map(fn($v) => $v * 100, $highA);
$lowB = array_map(fn($v) => $v * 100, $lowA);
$closeB = array_map(fn($v) => $v * 100, $closeA);
$natrA = trader_natr($highA, $lowA, $closeA, 14);
$natrB = trader_natr($highB, $lowB, $closeB, 14);
// Die NATR-Werte sind identisch — Instrument unabhängig vom Preisniveau
$lastA = end($natrA);
$lastB = end($natrB);
printf("Instrument A NATR (letzter Wert): %.4f %%\n", $lastA);
printf("Instrument B NATR (letzter Wert): %.4f %%\n", $lastB);
echo ($lastA === $lastB ? 'Identische Volatilität (normalisiert).' : 'Unterschiedlich.') . PHP_EOL;
// Wichtig · Fallstricke
Voraussetzung: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung trader installiert und in der php.ini aktiviert ist (extension=trader). Ohne diese Erweiterung existiert die Funktion nicht und führt zu einem fatalen Fehler.
Arraylängen: Die Arrays $high, $low und $close müssen gleich lang sein und mindestens timePeriod Elemente enthalten, andernfalls gibt die Funktion false zurück oder liefert ein leeres Array.
Indexversatz: Der erste gültige Index im Ergebnisarray entspricht dem Index timePeriod - 1 der Eingabedaten. Der Offset kann über trader_get_unstable_period(TRADER_FUNC_UNST_EMA) abgefragt werden, da intern ein EMA für die ATR-Glättung verwendet wird.
Gleitkomma-Genauigkeit: Wie alle TA-Lib-Funktionen arbeitet trader_natr intern mit Double-Werten. Vergleiche auf exakte Gleichheit sollten mit einem Epsilon-Schwellenwert durchgeführt werden.