[PYTHON] Les filtres Kalman peuvent-ils être utilisés pour prédire les tendances boursières?

Les filtres Kalman peuvent-ils être utilisés pour prédire les tendances boursières?

À propos du plan de cet article

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.

Qu'est-ce qu'un filtre Kalman

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.

supposition

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.

Formule de calcul (mise en œuvre)

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.

Je l'ai en fait appliqué au cours de l'action

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). 5020.Tkalman-3.png5020.Tkalman-2.png5020.Tkalman.png

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

Conclusion

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.

ajouter à

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

Les filtres Kalman peuvent-ils être utilisés pour prédire les tendances boursières?
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
Introduisez PyQt5 sur MacOS (Linux peut également être utilisé)
Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
J'ai essayé de l'étendre pour que la base de données puisse être utilisée avec le logiciel d'analyse de Wiire
J'ai essayé de prédire les hauts et les bas du cours de clôture du cours de l'action de Guru Navi en utilisant TensorFlow (progression)
Le littéral octal peut être utilisé dépend du langage de programmation
[Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)
J'ai utilisé le prophète de Facebook pour prédire la moyenne de l'industrie Dow.
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Utilisez PyCaret pour prédire le prix des appartements d'occasion à Tokyo!
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
Filtre de Kalman que vous pouvez comprendre
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
Il semble que l'annulation de toutes les commandes enfants puisse être utilisée pour annuler toutes les commandes parentes (commandes spéciales) avec l'API bitflyer
Contrôle QPS utilisable sur le terrain (Rate Limit) Limite l'exécution à n fois par seconde
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois