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.
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.
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.
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 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).
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.
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.
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