[PYTHON] Obtenez des données sur le cours des actions des composants du S & P 500 de Yahoo Finance et trouvez des paires hautement corrélées.

Résumé de l'article

Des phénomènes tels que «lorsque le stock A augmente, le stock B augmente» et «lorsque le stock A baisse, le stock B diminue» sont appelés «reprise» et «retrait». BNF, un trader de génie, l'a utilisé pour acheter et vendre des actions et a fait beaucoup d'argent. Gagnez beaucoup d'argent en vous imitant! J'ai pensé, mais je n'ai pas trouvé de moyen de trouver une paire avec qui travailler. Donc, je l'ai implémenté en Python, donc je publierai le code et sa description.

code

Je l'ai sur Github. Comme tu veux https://github.com/toshiikuoo/puclic/blob/master/%E6%A0%AA%E4%BE%A1%E7%9B%B8%E9%96%A2.ipynb

mouvement

Le déroulement des opérations est le suivant

Obtenez des informations sur la liste des stocks sur la page wikipedia S & P500 ↓ Acquérir le cours de l'action de la liste des actions acquises auprès de Yahoo Finance ↓ Calculer la corrélation des cours des actions pour toutes les combinaisons d'actions * Corrélation: une quantification de la similitude des deux données ↓ Trier les paires par ordre décroissant de corrélation

Description du code

Je vais vous expliquer en extrayant le code ci-dessus.


#Importation de bibliothèque requise
!pip install lxml html5lib beautifulsoup4

import pandas as pd
from pandas import Series,DataFrame
from pandas_datareader import DataReader

import numpy as np

from datetime import datetime

from scipy.stats.stats import pearsonr
import itertools

# Install yfinance package.

!pip install yfinance
 
# Import yfinance
import yfinance as yf  

# S&P Créez une liste de tous les stocks
url="https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
sp500_list=pd.read_html(url)[0].Symbol.values.tolist()
len(sp500_list)
#Stockez le cours de clôture de l'action SP500 dans un DataFrame
close_sp500_list=yf.download(sp500_list_yahoo,'2019-10-04','2019-11-01')["Adj Close"]
#Calculer la corrélation avec des paires pour chaque colonne

#Création d'un type de dictionnaire pour saisir la corrélation calculée
correlations={}

#Calculer la corrélation
for cola,colb in itertools.combinations(sp500_list_yahoo,2):
  nas=np.logical_or(np.isnan(close_sp500_list.loc[:,cola]),np.isnan(close_sp500_list.loc[:,colb]))
  try:
    correlations[cola + '__'+ colb]=pearsonr(close_sp500_list.loc[:,cola][~nas],close_sp500_list.loc[:,colb][~nas])
  except ValueError:
    pass    

#Résultat de sortie"correlations"Est un format de liste, alors convertissez-le en DataFrame
result=DataFrame.from_dict(correlations,orient='index')
result.columns=['PCC','p-value']
print(result.sort_values('PCC'))

résultat

La sortie finale est ci-dessous. La corrélation de chaque paire d'actions est triée et sortie.

           PCC       p-value
BKR__SPGI   -0.968878  1.437804e-03
BIIB__HAS   -0.962712  8.038530e-13
BKR__PGR    -0.959178  2.465597e-03
PGR__WCG    -0.941347  6.818268e-11
CI__PGR     -0.935051  1.840799e-10
...               ...           ...
CNC__WCG     0.996087  1.493074e-22
BKR__PRGO    0.997290  1.101006e-05
CBS__VIAB    0.998546  7.579099e-27
BBT__STI     0.998835  8.266321e-28
GOOGL__GOOG  0.999502  1.701271e-31

[127260 rows x 2 columns]

Action future

Je souhaite regrouper les actions hautement corrélées à l'aide des résultats de sortie. (N'hésitez pas à me contacter pour toute question ou amélioration. Ceci est mon premier message, donc je pense que c'est étrange. Github est difficile ...)

Recommended Posts

Obtenez des données sur le cours des actions des composants du S & P 500 de Yahoo Finance et trouvez des paires hautement corrélées.
Obtenez des informations sur les actions japonaises de Yahoo Finance avec Pandas