Eine glatte Linie, die die Zukunft gesehen hat
Ein Filter macht aus einer Eingangsfolge xₜ eine Ausgabe yₜ als gewichtete Summe jüngerer Ein- und Ausgaben. Der exponentielle gleitende Durchschnitt ist der einfachste: yₜ=αxₜ+(1-α)yₜ₋₁. In scipy.signal ist ein Filter ein Paar von Koeffizientenlisten, b für die Eingaben und a für die Ausgaben, und hier gilt yₜ=b₀xₜ-a₁yₜ₋₁ mit b = [alpha] und a = [1, -(1 - alpha)]. signal.lfilter(b, a, x) lässt ihn zeitlich vorwärts laufen, genau wie ein Live-System, sodass yₜ nur von xₛ mit s≤t abhängt. Standardmäßig startet er aus der Ruhe (Zustand null), was die ersten Werte bei einem Kurs nahe 100 verfälscht; übergeben Sie zi = signal.lfilter_zi(b, a) * x[0], um beim ersten Wert zu starten. Das Ergebnis stimmt mit pd.Series(x).ewm(alpha=alpha, adjust=False).mean() bis auf Maschinengenauigkeit überein.
signal.filtfilt(b, a, x) lässt denselben Filter vorwärts und dann rückwärts laufen. Die Verzögerung hebt sich auf, die glatte Linie liegt genau auf den Daten, was im Diagramm perfekt aussieht, aber jede Ausgabe hängt nun von späteren Eingaben ab. Für ein Handelssignal ist das ein Leck. Nehmen Sie ein Trendsignal, den Log-Kurs minus seinen Durchschnitt, und korrelieren Sie es mit der Rendite des nächsten Tages: Für SPY über 2.501 Tage und α=0,1 hat das kausale Signal eine Korrelation von -0,055 (eine schwache Mittelwertrückkehr), das nullphasige -0,33; für α=0,3 sind es -0,076 und -0,54. Kein Händler könnte diese nullphasigen Zahlen verdienen, denn der gefilterte Wert enthält den Kurs von morgen bereits. Der Test für ein Signal ist einfach: Daten an einem Datum abschneiden und prüfen, dass sich die Werte davor nicht ändern.
lfilterist live,filtfiltist Rückschau: Nur das erste kann am Handelstisch laufen.- Anfangszustand setzen:
lfilter_zi(b, a) * x[0]beseitigt den Einschwingvorgang. - Abschneidetest: Daten an einem Datum kappen; ein gültiges Signal ändert sich davor nicht.
Lab: Was bewertet wird
- Filterkoeffizienten10 Pkt.
- Der kausale Durchschnitt20 Pkt.
- Die pandas-Version10 Pkt.
- Der nullphasige Durchschnitt15 Pkt.
- Signale und die Rendite von morgen25 Pkt.
- Die SPY-Studie20 Pkt.