Skip to content

Instantly share code, notes, and snippets.

@Demandrel
Last active March 27, 2018 08:54
Show Gist options
  • Save Demandrel/431b9c5b4dbf2419f5a757e0816b272c to your computer and use it in GitHub Desktop.
Save Demandrel/431b9c5b4dbf2419f5a757e0816b272c to your computer and use it in GitHub Desktop.
Calculs de rendements journaliers ajustés de stocks en R a partir des tickers
#On install la librairie tidyquant qui nous aide à récupérer les données financiéres
install.packages("tidyquant")
#On charge la librairie pour pouvoir l'utiliser
library("tidyquant")
#On crée un vecteur qui contient nos tickers (REMARQUE : il s'agit des nom de tickers exacts de YAHOO finance)
tickers = c("CABK.MC","BBVA.MC")
#Date de départ à partir de laquelle récupérer les prix
date_start = as.Date("2015-01-01")
#Date de fin
date_end = as.Date("2018-03-20")
#on crée un nouvel environnement dans lequel seront créer les variables contenant les prix de chaque stock
data = new.env()
#On récupere tous les prix (ouvertures, cloture etc) de chaque stock et on les importent dans l'environnement data
getSymbols(Symbols = tickers, env = data, from = date_start, to = date_end)
#Comme on ne veut pas travailler avec l'environnment data et qu'on veut uniquement le prix
#de cloture ajusté, on va utiliser une fonction personnalisée qui nous renvois les prix
#ajustés dont nous avons besoins
#On déclare la fonction utilitaire qui fait ce travail
get_adjusted_prices_xts = function(tickers, env = parent.frame()) {
prices_time_series = xts()
for (index in 1:length(tickers)) {
#on extrait la série de prix du tickers de l'environnement spécifié, puis la série ajusté et on merge a l'objet xts de retour
ticket_prices_buffer = get(tickers[index], pos = env)
prices_time_series = merge.xts(prices_time_series,ticket_prices_buffer[,6])
}
#On passe l'index en date de format européen
indexClass(prices_time_series) = "Date"
indexFormat(prices_time_series) = "%d-%m-%Y"
#On retourne le résultat
return(prices_time_series)
}
#On utilise alors cette fonction en donant la liste des tickers, l'environnement ou récupérer les données
price_series_daily = get_adjusted_prices_xts(tickers, env = data)
#Remarque : cette fonction retourn un objet de type xts et non un dataframe
#On affiche la série :
View(price_series_daily)
#GESTION DES DONNES MANQUANTES
# On fait une interpolation linéaire si il a y des trous dans la série
price_series_daily = na.approx(price_series_daily, na.rm = FALSE)
#Si des données sont manquantes en début de série (car l'action n'est pas coté par exemple) on met un prix à 0
price_series_daily = na.fill(price_series_daily, 0)
#CALCUL DES RENDEMENTS
daily_returns = apply(price_series_daily, 2 , Return.calculate)
#On repasse les données au format xts et non matriciel car plus pratique pour travailler avec en R
daily_returns = as.xts(daily_returns, order.by = index(price_series_daily), indexClass = "Date", indexFormat = "%m-%y")
#On retire la première ligne car les rendements n'existent pas pour le premier mois
daily_returns = daily_returns[-1,]
#Les actifs non disponibles dont les valeurs NA ont été remplacés par 0 donnent des rendement NaN (division par 0) ou Inf (passage du prix de 0 à positif)
#On doit considérer ces rendements comme 0. On remplace donc les NA et NaN par 0 :
daily_returns = na.fill(daily_returns, 0)
#Les valeurs infinies doivent aussi être remplacées par 0
daily_returns[is.infinite(daily_returns)] = 0
#On transformer les données en dataframe :
daily_returns = data.frame(date = index(daily_returns), coredata(daily_returns))
#EXPORTATION DES DONNEES
#on sauvegarde un dataset en format csv
write.csv(daily_returns, "monFicher.csv")
#Astuce : le fichier sera enregistré dans le répertoire de travail. Pour retrouver votre répertoire de travail, éxécuter la ligne suivante :
getwd()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment