[PYTHON] Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?

Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?

Über den Umriss dieses Artikels

Implementierung eines Kalman-Filters zur Vorhersage von Aktienkurstrends und deren Eindrücken. Die Schlussfolgerung ist, dass es kurzfristig verfügbar sein kann. Es läuft auf Google Colab.

Was ist ein Kalman-Filter?

Ursprünglich zur Steuerung von Robotern und Raketen verwendet, wird es verwendet, um den Zustand des Systems anhand ungenauer Beobachtungen abzuschätzen. Dieses Mal verwende ich die einfachste.

Annahme

Bedenken Sie, dass die Schwankung des Aktienkurses gemäß einer bestimmten Wahrscheinlichkeitsverteilung schwankt, und machen Sie eine darauf basierende Vorhersage. Verwenden Sie sie daher bitte als einen der Indikatoren.

Auch diesmal gehen wir von einer unrealistischen Annahme aus, da wir davon ausgehen, dass die potenzielle Art der Aktienkursschwankungen und die Art und Weise, wie sie sich tatsächlich ändern, einer Normalverteilung folgen.

Während es für Dinge gut funktioniert, deren Aktienkurse sich bis zu einem gewissen Grad stetig bewegen, scheint es, dass es mit plötzlichen Änderungen nicht Schritt halten kann.

Berechnungsformel (Implementierung)

Es ist ärgerlich, warum die Formel so ist. Wenn Sie sie sehen möchten, lesen Sie bitte [Wiki](https://ja.wikipedia.org/wiki/Kalman Filter). In Bezug auf die Implementierung gibt es kein Problem, wenn Sie die folgenden Funktionen definieren. Nimmt eine Folge von Zahlen als Argument und gibt eine Folge von Zahlen gleicher Länge zurück.

kalman.py


import numpy as np

def kalman(s,x,P):
    res_x=[]#Geschätzte Position zu diesem Zeitpunkt
    res_v=[]#Geschätzte Geschwindigkeit zu diesem Zeitpunkt
    for i in range(len(s)):
        Z=np.array([s[i]])
        y=Z-H@x
        S=H@[email protected]+R
        [email protected]@np.linalg.inv(S)
        x=x+K@y
        P=(I-K@H)@P
        #predicion
        x=(F@x)+u
        P=F@[email protected]
        res_x.append(x[0,0])
    return res_x

x=np.array([[0.], [0.]])#Der erste ist die Position und der zweite ist die Geschwindigkeit
P=np.array([[1000., 0.], [0., 1000.]])#Kovarianzmatrix
u=np.array([[0.], [0.]])#Externe Kraft, aber diesmal nicht
F=np.array([[1., 1.], [0, 1.]])#Definition der Beziehung zwischen Position und Geschwindigkeit
H=np.array([[1., 0.]])
R=np.array([[1.]])
I=np.array([[1., 0.], [0., 1.]])

t=[1,2,4,3,7,4,6,5.2]#Zahlenfolge zu setzen
print(kalman(t,x,P))

Das Ergebnis ist wie folgt.

res.txt


[0.999000999000999,2.9980029930179533,5.332389258923225,4.500249550392171,7.299929903069252,6.400310235003376, 7.000316132748338, 6.886095984845674]

Da es diesmal keine besondere Regelmäßigkeit in der gegebenen Zahlenfolge gibt, kann sie nicht korrekt vorhergesagt werden. Wenn jedoch eine Zufallszahl gemäß der Wahrscheinlichkeitsverteilung erzeugt wird, wird sie mit beträchtlicher Genauigkeit geschätzt.

Ich habe es tatsächlich auf den Aktienkurs angewendet

Ich habe diesen Artikel am 14. August geschrieben und frage mich, ob der Aktienkurs in Corona abkühlen und einen doppelten Tiefpunkt erreichen und bald steigen wird. Es ist eine Zeit wie diese. Unter der Annahme, dass der vom Kalman-Filter erhaltene Wert der ursprüngliche Aktienkurs ist, wird der Aktienkurs wahrscheinlich dorthin zurückkehren.

Hier sind einige der Marken, die ich angewendet habe und die charakteristisch sind. Eine davon ist ENEOS Holdings (5020.T). 5020.Tkalman-3.png5020.Tkalman-2.png5020.Tkalman.png

Auf den ersten Blick weiß ich nicht, was es ist, aber die Zeit, um es auf den Filter anzuwenden, ist anders. Um den Dezember 2018 fiel der gesamte Aktienmarkt aufgrund des Einflusses der Trump-Administration, und um Februar bis März 2020 fiel der Aktienkurs aufgrund des Einflusses von Corona. Da diese Ereignisse gute Ausreißer haben, können Sie sehen, dass die Kalman-Filterschätzung plötzlich erheblich abweicht. Wenn Sie also den Kalman-Filter nach jedem Eintauchereignis erneut anwenden, können Sie sehen, dass eine relativ gute Schätzung vorgenommen werden kann.

Fazit

Wenn es keine großen Ereignisse gibt, kann es meiner Meinung nach als Index verwendet werden (insbesondere beim Kauf). Persönlich denke ich, dass es an einem bestimmten Punkt und dem Aktienkurs bis zur Mitte des Kalman-Filterwerts ansteigen wird, also werde ich auch andere Indikatoren kaufen. Wenn sich der Aktienkurs jedoch erheblich ändert, ist es schlecht, wenn Sie den anzuwendenden Anfangswert nicht verschieben.

hinzufügen

Ich denke, es kann im Tagtraining verwendet werden. Vielmehr scheint die Preisbewegung von Daytre näher an der Normalverteilung zu liegen ... Ich würde mich freuen, wenn Sie mich wissen lassen könnten, wenn Sie irgendwelche Meinungen haben.

Dieser Kalman-Filter kann auch von Robotern verwendet werden.

Recommended Posts

Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?
So filtern Sie die externen Schlüssel, die auf dem Django-Verwaltungsbildschirm ausgewählt werden können
Führen Sie PyQt5 in MacOS ein (Linux kann auch verwendet werden)
So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Ich habe versucht, die Höhen und Tiefen des Schlusskurses des Aktienkurses von Guru Navi mit TensorFlow vorherzusagen (Fortschritt)
Welches Oktalliteral verwendet werden kann, hängt von der Programmiersprache ab
[Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)
Ich habe den Propheten von Facebook verwendet, um den Durchschnitt der Dow-Branche vorherzusagen.
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Verwenden Sie PyCaret, um den Preis von Gebrauchtwohnungen in Tokio vorherzusagen!
Stellen Sie sicher, dass Python eine Zeichenfolge in int konvertieren / konvertieren kann
Kalman Filter, den Sie verstehen können
Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
Es scheint, dass alle untergeordneten Bestellungen storniert werden können, um alle übergeordneten Bestellungen (Sonderbestellungen) mit der Bitflyer-API zu stornieren
QPS-Steuerung, die im Feld verwendet werden kann (Ratenlimit) Begrenzt die Ausführung auf n-mal pro Sekunde
[Python3] Code, der verwendet werden kann, wenn Sie die Erweiterung eines Bildes sofort ändern möchten