← Alle Insights

Linear Regression Channels: Statistik im Chart sichtbar.

Linear Regression Channels sind einer der wenigen „Indikatoren", die ihren Namen verdienen — sie zeigen eine echte statistische Größe direkt im Chart. Eine Trend-Linie nach Ordinary Least Squares, flankiert von Standardabweichungs-Bändern. Mehr Statistik als Mystik, und genau das macht sie interessant.

Ich mag Linear Regression Channels, weil sie keine Lehrbuch-Magie sind. Sie messen das, was sie messen: die beste lineare Approximation eines Kurses über ein gewähltes Fenster, und die Streuung um diese Approximation. Wer das versteht, nutzt sie sinnvoll. Wer sie als Trigger-Indikator ansieht, verfehlt den Zweck.

Was Linear Regression Channels wirklich sind.

Über ein Fenster von n Bars (häufig 50 oder 100) wird eine lineare Regression der Schlusskurse gegen die Zeit gefittet. Das Ergebnis ist eine Gerade y = a + b·t, die im Sinne der kleinsten Quadrate die Daten am besten beschreibt. Um diese Gerade legt man Bänder bei einem oder zwei Standardabweichungen der Residuen.

Was man im Chart sieht, ist also: Wo läge der Kurs heute, wenn er sich die letzten n Bars in einem perfekten linearen Trend bewegt hätte? Und wie weit ist er davon im Schnitt abgewichen?

Berechnung mit OLS — kurz und konkret.

# Linear Regression Channel mit Standardabweichungs-Bändern
import numpy as np
import pandas as pd
import yfinance as yf

def lin_reg_channel(series, n=100, k=2):
    out_mid, out_up, out_lo, out_r2 = [], [], [], []
    x = np.arange(n)
    for i in range(len(series)):
        if i < n - 1:
            out_mid.append(np.nan); out_up.append(np.nan)
            out_lo.append(np.nan);  out_r2.append(np.nan)
            continue
        y = series.iloc[i - n + 1 : i + 1].values
        b, a = np.polyfit(x, y, 1)
        fit  = a + b * x
        sd   = np.std(y - fit, ddof=1)
        ss_r = np.sum((y - fit) ** 2)
        ss_t = np.sum((y - y.mean()) ** 2)
        r2   = 1 - ss_r / ss_t if ss_t > 0 else 0
        out_mid.append(fit[-1])
        out_up.append(fit[-1] + k * sd)
        out_lo.append(fit[-1] - k * sd)
        out_r2.append(r2)
    return (pd.Series(out_mid, index=series.index),
            pd.Series(out_up,  index=series.index),
            pd.Series(out_lo,  index=series.index),
            pd.Series(out_r2,  index=series.index))

px = yf.download("SPY", start="2010-01-01", auto_adjust=True)["Close"]
mid, up, lo, r2 = lin_reg_channel(px, n=100, k=2)

Drei Outputs sind wichtig: die Mittellinie (Trend), die Bänder (Volatilität um den Trend), und R-Quadrat als Maß für die Güte des linearen Fits. Letzteres wird meistens ignoriert — zu Unrecht.

R-Quadrat als Trend-Stärke.

Ein R² nahe 1 bedeutet: der Kurs verläuft fast perfekt linear, der Trend ist sauber. Ein R² nahe 0 bedeutet: die Daten sehen aus wie Rauschen um einen flachen Mittelwert, kein verwertbarer Trend. Das ist ehrlich quantifizierte Trend-Stärke, und es ist deutlich solider als „der ADX zeigt irgendwas über 25".

In eigenen Tests an US-Aktien-Indizes funktioniert ein einfacher Trend-Filter „R²(100) > 0,7" besser als die meisten klassischen Trend-Stärke-Indikatoren. Er ist parameter-arm, intuitiv und statistisch sauber.

Anwendungen: Trend-Erkennung und Mean-Reversion.

Linear Regression Channels vs. Bollinger Bänder.

Beide nutzen Standardabweichungen, aber die Referenzlinie ist fundamental verschieden. Bollinger Bänder zentrieren um einen gleitenden Durchschnitt — eine träge, retrospektiv geglättete Linie. Linear Regression Channels zentrieren um die aktuelle Best-Fit-Trendlinie. Das hat Konsequenzen:

In Mean-Reversion-Tests an SPY zeigt der Long-Setup „Kurs unter unterem Band in steigendem Channel mit R² > 0,7" eine leicht höhere Hit-Rate als der vergleichbare Bollinger-Setup — aber mit weniger Trades. Statistisch signifikant ist der Unterschied nicht.

Statistische Tests — was wirklich trägt.

An US-Aktien-Indizes und Forex-Major-Paaren über 20 Jahre habe ich vier Setups getestet: Channel-Bounce (Touch des Bands gegen Trend), Channel-Breakout (Bruch über/unter Band), Slope-Filter (Steigung als Trendrichtung) und R²-Filter (Mindest-R² für Trade-Aktivierung). Konsistente Beobachtung:

Anders gesagt: als Trigger eher schwach, als Filter und Analyse-Tool stark.

Praktische Fallen.

Drei Punkte, die regelmäßig schiefgehen:

Ehrliche Bewertung.

Linear Regression Channels sind eines der wenigen Werkzeuge, das ich vorbehaltlos als Analyse-Tool empfehle — gerade weil es so wenig Magie enthält. Es zeigt eine messbare Eigenschaft: aktueller linearer Trend und Streuung darum. Wer das versteht, hat ein klares Bild davon, was der Markt gerade macht.

Aber: als Auslöser für Trades funktionieren sie selten alleine. Sie gehören in die Schicht „Filter und Kontext", nicht in die Schicht „Trigger". Wer das ernst nimmt, wird sie zu schätzen wissen. Wer sie als Heiligen Gral verkauft, hat etwas missverstanden.

Sie wollen Trend-Filter statistisch sauber in Ihre Strategie einbauen statt mit Faustregeln zu arbeiten? Erstgespräch buchen — wir prüfen, welche Größen bei Ihren Daten wirklich tragen.