[PYTHON] Calcul des indicateurs techniques par TA-Lib et pandas

TA-Lib est une bibliothèque de calcul d'indicateurs typiques dans l'analyse technique lors de la collecte et de l'analyse de données financières avec Python. Comme je l'ai écrit dans Précédent, lors de l'analyse des données boursières quotidiennes (= prix d'ouverture quotidien, prix élevé, etc.) avec des pandas, divers types Il est plus pratique et sûr d'utiliser une bibliothèque que de tout mettre en œuvre par vous-même pour calculer divers indicateurs.

TA-Lib http://ta-lib.org/

Rendre TA-Lib disponible

Pour utiliser ce TA-Lib avec Python, des liaisons pour Python sont fournies.

Comment installer http://mrjbq7.github.io/ta-lib/install.html

C'est facile à installer, téléchargez simplement l'archive tar source et effectuez l'installation. Dans le lien ci-dessus, --prefix = / usr est utilisé, mais en considérant FHS, --prefix = / usr / local est meilleur.

VERSION=0.4.0
FILENAME=ta-lib-$VERSION-src.tar.gz
curl -L http://prdownloads.sourceforge.net/ta-lib/$FILENAME -O
tar xzvf $FILENAME
cd ta-lib
./configure --prefix=/usr/local
make
sudo make install

Les liaisons Python peuvent être incluses avec easy_install au moment de la rédaction.

easy_install TA-Lib

Si eazy_install réussit, importez depuis IPython et assurez-vous que vous pouvez utiliser les fonctions commençant par ta.

Utilisez TA-Lib

Vous pouvez voir la liste des fonctions et comment les utiliser sur le site GitHub ci-dessus, mais pour expliquer brièvement

import talib as ta
ta.get_function_groups

Ensuite, vous pouvez voir chaque fonction et le groupe pour chaque fonction.

Comme je l'ai écrit dans Précédent, si vous récupérez les données sur les cours des actions de Yahoo! Finance, vous pouvez calculer librement à l'aide de TA-Lib. Cependant, cela peut être un problème si vous essayez de traiter trop de données au-delà du grattage. Il y a des frais, mais vous pouvez également télécharger des données chronologiques à partir du Yahoo! Finance VIP Club, afin de pouvoir télécharger les données selon vos besoins. Vous pouvez également l'acheter.

Après avoir préparé les données, gérons-les en utilisant IPython.

filename = 'stock_N225.csv' #Données du cours moyen de l'action Nikkei
df = pd.read_csv(filename,
                 index_col=0, parse_dates=True)
closed = df.asfreq('B')['Adj Close'].dropna() #Extraire le cours de clôture ajusté
prices = np.array(stock, dtype='f8') #Conservez-le dans un tableau NumPy avec des nombres à virgule flottante

#Trouvez la moyenne mobile simple sur 5 jours
sma5 = ta.SMA(prices, timeperiod=5)

# RSI (14e)Cherchant
rsi14 = ta.RSI(prices, timeperiod=14)

# MACD (Moyenne mobile sur 12 jours, moyenne mobile sur 26 jours en retard, ligne de signal sur 9 jours)Cherchant
macd, macdsignal, macdhist = ta.MACD(prices,
                                     fastperiod=12, slowperiod=26, signalperiod=9)

Eh bien, vous pouvez calculer tous les indicateurs techniques implémentés dans TA-Lib comme celui-ci.

Terrain

Il est difficile d'imaginer s'il ne s'agit que de valeurs numériques, alors essayons un peu de traçage. Avec la combinaison familière de pandas + matplotlib et talib, vous pouvez tracer des graphiques de la même manière que ce que l'on appelle un logiciel de stock.

Tout d'abord, traçons le graphique journalier, l'EWMA (moyenne mobile pondérée par l'indice) et la bande de Bollinger à partir du cours moyen de l'action Nikkei des 180 derniers jours.

ohlc_N225.png

Comme vous pouvez le voir, l'écart par rapport à la moyenne mobile sur 25 jours est un certain soutien, et l'écart type + ligne 2σ est le prix supérieur.

Ensuite, jetons un coup d'œil à DeNA, qui est devenue un sujet brûlant pendant deux jours consécutifs en raison du partenariat avec Nintendo. Cette fois, c'est un complot des 90 derniers jours.

ohlc_2432.png

En regardant l'indice de l'oscillateur, vous pouvez voir que le marché est étonnamment haussier.

osci_2432.png

De plus, quand il s'agit de graphiques comme celui-ci, divers experts boursiers sortent et c'est difficile, mais l'auteur n'est pas un expert boursier, mais des données du point de vue de l'analyse des données par l'informatique et des statistiques / apprentissage automatique. Je le regarde.

Si vous adoptez une approche d'un point de vue statistique, on peut dire qu'il est légitime d'adopter une approche telle que la quantification des changements dans les données et la prédiction de la façon dont ils changeront par rapport aux données passées.

Il y a une distorsion dans la cognition humaine. Je l'achète parce que je pense qu'il va augmenter, et je le vends parce que je pense qu'il va baisser, alors j'ai tendance à prendre des décisions biaisées.

L'analyse technique n'est pas universelle, bien sûr, mais elle peut aider à éliminer ces biais et à prendre des décisions mécaniques.

Effectuer un cycle de couleur par apprentissage automatique

Maintenant, lorsque certaines actions augmentent, vous pouvez rechercher et acheter d'autres actions avec des prix de marché similaires à partir de toutes les actions du TSE en fonction de ces indicateurs techniques. La recherche du prochain titre à la hausse tout en recherchant des objectifs d'investissement dans d'autres secteurs dans un marché aussi en hausse s'appelle couleur circulaire. .. En d'autres termes, les actions qui ont assuré des bénéfices sont déjà suffisamment élevées, nous recherchons donc la prochaine cible, pensant qu'une autre action pourrait augmenter cette fois.

Lorsque vous souhaitez vendre l'action que vous détenez actuellement et investir de l'argent neuf dans d'autres actions importantes comme celle-ci, il faudrait énormément de temps et de travail pour étudier le marché un par un. On peut seulement dire que c'est une personne de loisir de faire une telle chose à chaque fois. Par conséquent, étant donné que les ordinateurs ont été développés et que n'importe qui peut facilement utiliser pleinement l'informatique et les mathématiques, j'essaierai la couleur de circulation par apprentissage automatique.

Premièrement, en tant que données sur les enseignants, nous allons sélectionner plusieurs actions dans des industries qui ont déjà réalisé des bénéfices et générer une base de données. Cela dépend du type de point de vue que vous souhaitez créer ici, mais cette fois, je vais simplement prendre l'élan des données de la série chronologique à titre d'exemple.

import os
import pandas as pd
import numpy as np
from sklearn import svm

def read_from_csv(stock, filename):
    if os.path.exists(filename):
        return pd.read_csv(filename,
                           index_col=0, parse_dates=True)

def read_txt(filename):
    stocks = pd.read_csv(filename, header=None)
    data = pd.DataFrame([])
    for s in stocks.values:
        stock = str(s[0])
        csvfile = "".join(['ti_', stock, '.csv'])
        df = read_from_csv(stock, csvfile).asfreq('B')[-30:]
        data[stock] = df.ix[:,'mom25']
    print(data.T.tail(10))
    return data.T

data = read_txt('stocks.txt')

Cela créera une base de données avec le code boursier et l'élan quotidien. Convertissons cela en une liste multiple avec un élan de série chronologique pour chaque code de problème à l'avance. C'est boueux, je vais donc l'omettre.

En ce qui concerne l’histoire de l’apprentissage automatique, un exemple de classement des notes des élèves en groupes et de classement des élèves pour toute l’année en fonction de cela J'ai écrit. En appliquant cela, le classificateur de machine à vecteur de support qui a appris les données des enseignants ci-dessus classe les données passées de tous les stocks cotés à la première section de la Bourse de Tokyo.

from sklearn.cluster import KMeans
from sklearn import svm

kmeans_model = KMeans(n_clusters=100, random_state=100).fit(train_X)
labels = kmeans_model.labels_
clf = svm.SVC(kernel='rbf', C=1) #Support par le noyau RBF Utiliser la machine vectorielle comme classificateur
clf.fit(train_X, labels) #Apprentissage
results = clf.predict(test_X) #Classification

Il est maintenant possible d'extraire mécaniquement des stocks avec une dynamique similaire.

Résumé

Quiconque utilise pleinement l'informatique et les mathématiques sera en mesure d'analyser des données financières telles que Quants et d'investir réellement pour réaliser un profit. L'analyse des données n'a pas de sens et est futile sans but, mais je pense que le calcul serait gratifiant si, par exemple, il avait un but clair pour aider à l'investissement. Veuillez noter que cet article n'encourage pas les lecteurs à investir.

C'est la fin de l'analyse des données boursières, et j'aimerais en savoir plus sur l'apprentissage automatique qui est apparu dans la seconde moitié de cette période à partir de la prochaine fois.

Recommended Posts

Calcul des indicateurs techniques par TA-Lib et pandas
Analyse des données financières par pandas et leur visualisation (2)
Analyse des données financières par pandas et leur visualisation (1)
Calcul de similitude par MinHash
[Calcul scientifique / technique par Python] Fonctionnement de base du tableau, numpy
[Calcul scientifique et technique par Python] Dessin de figures fractales [Triangle de Shelpinsky, fougère de Bernsley, arbre fractal]
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)
Calcul scientifique / technique avec Python] Dessin et visualisation d'isoplans 3D et de leurs vues en coupe à l'aide de mayavi
[Calcul scientifique / technique par Python] Calcul de somme, calcul numérique
[Calcul scientifique / technique par Python] Dérivation de solutions analytiques pour équations quadratiques et cubiques, formules, sympy
Un petit examen minutieux de Pandas 1.0 et Dask
[Calcul scientifique / technique par Python] Ajustement par fonction non linéaire, équation d'état, scipy
Pandas du débutant, par le débutant, pour le débutant [Python]
[Calcul scientifique / technique par Python] Calcul du produit de la matrice par l'opérateur @, python3.5 ou supérieur, numpy
[Ingénierie de contrôle] Calcul des fonctions de transfert et des modèles d'espace d'états par Python
[Calcul scientifique / technique par Python] Dessin d'animation de mouvement parabolique avec locus, matplotlib
[Calcul scientifique / technique par Python] Calcul numérique pour trouver la valeur de la dérivée (différentielle)
[Calcul scientifique / technique par Python] Solution analytique sympa pour résoudre des équations
[Calcul scientifique / technique par Python] Dessin de surface courbe 3D, surface, fil de fer, visualisation, matplotlib
[Calcul scientifique / technique par Python] Calcul de matrice inverse, numpy
[Calcul scientifique / technique par Python] histogramme, visualisation, matplotlib
[Calcul scientifique / technique par Python] Interpolation de Lagrange, calcul numérique
Calcul du nombre d'années écoulées et du nombre de mois écoulés y compris hors-année
Approximation de bas rang des images par HOSVD et HOOI
L'en-tête est mal aligné avec read_csv () et read_table () de Pandas
Apprentissage parallèle du deep learning par Keras et Kubernetes
Fonctionnement de base de Python Pandas Series et Dataframe (1)
[Calcul scientifique / technique par Python] Solution numérique d'équations d'ondes unidimensionnelles et bidimensionnelles par méthode FTCS (méthode explicite), équations aux dérivées partielles bi-courbes
[Calcul scientifique / technique par Python] Dessin, visualisation, matplotlib de lignes de contour 2D (couleur), etc.
Trier par pandas
Calcul numérique du fluide compressible par la méthode des volumes finis
Calcul de l'écart type et du coefficient de corrélation en Python
Proposition de conversion vocale multi-haut-parleurs et de morphing vocal par RelGAN-VM
[Calcul scientifique / technique par Python] Graphique logistique, visualisation, matplotlib
[python] Calcul des mois et des années de différence de date / heure
Calcul de la matrice d'homographie par la méthode des moindres carrés (méthode DLT)
[Calcul scientifique / technique par Python] Graphique de coordonnées polaires, visualisation, matplotlib
Essayez de tracer des graphiques en bougies Bitcoin et des indicateurs techniques en Python
Implémentation de l'écran de l'administrateur DB par Flask-Admin et Flask-Login
Comment visualiser les données par variable explicative et variable objective
[Python] Types de valeurs statistiques (caractéristiques) et méthodes de calcul
[Calcul scientifique / technique par Python] Solution numérique d'équations différentielles ordinaires du premier ordre, problème de valeur initiale, calcul numérique
[Calcul scientifique / technique par Python] Solution numérique d'une équation différentielle ordinaire du second ordre, problème de valeur initiale, calcul numérique
[Calcul scientifique / technique par Python] Liste des matrices qui apparaissent dans Hinpan en algèbre linéaire numérique
[Calcul scientifique / technique par Python] Liste des utilisations des fonctions (spéciales) utilisées en physique en utilisant scipy
[Calcul scientifique / technique par Python] Vague "gémissement" et vitesse de groupe, superposition des vagues, visualisation, physique du lycée
[Calcul scientifique / technique par Python] Solution numérique d'un problème d'oscillateur harmonique unidimensionnel par vitesse Méthode de Berle
[Calcul scientifique / technique par Python] Solution numérique du problème des valeurs propres de la matrice par multiplication de puissance, algèbre linéaire numérique