Implémentation du filtre Kalman pour prévoir les tendances des cours des actions et leurs impressions. La conclusion est qu'il peut être disponible à court terme. Il fonctionne sur google colab.
Initialement utilisé pour contrôler les robots et les fusées, il est utilisé pour estimer l'état du système à l'aide d'observations inexactes. Cette fois, j'utilise le plus simple.
Considérez que la fluctuation du cours de l'action fluctue en fonction d'une certaine distribution de probabilité, et faites une prédiction en fonction de cela, veuillez donc l'utiliser comme l'un des indicateurs.
De plus, cette fois, nous émettons une hypothèse irréaliste parce que nous supposons que la manière potentielle des fluctuations du cours des actions et la façon dont elles changent réellement suivent une distribution normale.
Ainsi, bien que cela fonctionne bien pour les choses dont les cours boursiers évoluent dans une certaine mesure, il semble qu'il ne puisse pas suivre les changements soudains.
C'est ennuyeux pourquoi la formule est ainsi, donc si vous voulez la voir, veuillez vous référer à [wiki](https://ja.wikipedia.org/wiki/Kalman filter). En termes de mise en œuvre, il n'y a pas de problème si vous définissez les fonctions suivantes. Prend une séquence de nombres comme argument et renvoie une séquence de nombres de même longueur.
kalman.py
import numpy as np
def kalman(s,x,P):
res_x=[]#Position estimée à ce moment
res_v=[]#Vitesse estimée à ce moment
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.]])#Le premier est la position et le second est la vitesse
P=np.array([[1000., 0.], [0., 1000.]])#Matrice de covariance
u=np.array([[0.], [0.]])#Force externe mais pas cette fois
F=np.array([[1., 1.], [0, 1.]])#Définition de la relation entre la position et la vitesse
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]#Séquence numérique à mettre
print(kalman(t,x,P))
Le résultat est le suivant.
res.txt
[0.999000999000999,2.9980029930179533,5.332389258923225,4.500249550392171,7.299929903069252,6.400310235003376, 7.000316132748338, 6.886095984845674]
Puisqu'il n'y a pas de régularité particulière dans la séquence de nombres donnée cette fois, il ne peut pas être prédit correctement, mais si un nombre aléatoire est généré selon la distribution de probabilité, il sera estimé avec une précision considérable.
J'ai écrit cet article le 14 août et je me demande si le cours de l'action va se refroidir à Corona et s'il atteindra un double fond et augmentera bientôt. C'est un moment comme ça. En supposant que la valeur obtenue par le filtre de Kalman est le prix de l'action d'origine, le cours de l'action y retournera probablement.
Voici quelques-unes des marques que j'ai appliquées qui sont caractéristiques. L'un d'eux est ENEOS Holdings (5020.T).
À première vue, je ne sais pas ce que c'est, mais le moment pour commencer à l'appliquer au filtre est différent. Vers décembre 2018, l'ensemble du marché boursier a plongé sous l'influence de l'administration Trump, et autour de février à mars 2020, le cours de l'action a chuté en raison de l'influence de Corona. Étant donné que ces événements ont de bonnes valeurs aberrantes, vous pouvez voir que l'estimation du filtre de Kalman dévie soudainement de manière significative. Ainsi, en appliquant à nouveau le filtre de Kalman après chaque événement de plongée, vous pouvez voir qu'une estimation relativement bonne peut être faite.
S'il n'y a pas de gros événements, je pense qu'il peut être utilisé comme indice (surtout lors de l'achat). Personnellement, je pense qu'il atteindra le milieu de la valeur du filtre de Kalman à un certain moment et du cours de l'action, donc j'achèterai également d'autres indicateurs. Cependant, lorsque le cours de l'action change de manière significative, ce sera mauvais si vous ne changez pas la valeur initiale à appliquer.
Je pense qu'il peut être utilisé dans l'entraînement de jour. Au contraire, le mouvement des prix de Daytre semble être plus proche de la distribution normale ... Je vous serais reconnaissant si vous pouviez me faire savoir si vous avez des opinions.
En outre, ce filtre de Kalman peut être utilisé par les robots tel quel.
Recommended Posts