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