Récupérer les cours de bourse sur Yahoo finance


J’ai récemment été sollicité pour construire un modèle de données permettant de réaliser des analyses sur des cours de bourse.

La principale difficulté a consisté à générer les URL spécifiques permettant de récupérer les bonnes valeurs (cours de bourse d’un titre spécifique entre deux dates).

Lorsque vous sélectionnez un titre sur Yahoo finance, vous pouvez trouver un lien de téléchargement des donnée (un fichier CSV.)

C’est l’URL du lien de téléchargement qui va nous falloir étudier dans le détail :

https://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1556291578&period2=1587913978&interval=1d&events=history

On observant bien on peut identifier trois variables :

Le code du titre : AAPL;

La date de début des cotations : 1556291578;

La date de fin de cotations : 1587913978;

Ces deux dates sont au format timestamp, elles sont exprimées en secondes écoulées depuis le premier janvier 1970. Nous allons donc devoir créer une formule permettant de convertir une date en timestamp dans power Query.

Ci dessous un exemple pour la date du 01/02/2020

Number.From ( DateTime.From ( #datetime(2020, 1, 2, 0, 0, 0) ) – #duration ( 25569,0,0,0 ) ) * 86400

Création des requêtes dans power query

Tout d’abord nous allons créer une requête web :

Puis coller l’Url présentée précédemment :

Tout d’abord il faut renommer cette requête (j’ai choisi le nom GetFromYahoo).

Si on observe la requête dans l’éditeur avancé, nous allons retrouver nos trois valeurs que nous allons devoir rendre variables :

L’astuce va consister à remplacer ces valeurs fixes par des variables :

Nous avons simplement déclaré des variables en début de requête, avant de remplacer les valeurs fixes dans ces requêtes.

Pour que la requête fonctionne il va maintenant falloir créer les requêtes qui vont générer les dates de début et de fin au format timestamp :

Si on regarde le code dans l’éditeur avancé on obtient :

Ce qui génère le timestamp voulu :

Il suffit de dupliquer la requête et de la renommer DateFin en changeant évidemment la date.

Nous allons maintenant créer un paramètre pour le code du titre :

Désormais la requête fonctionne à nouveau.

Il est probable que nous souhaitions récupérer les valeurs de plusieurs titres, nous allons donc créer une liste des codes (nous pourrions bien entendu récupérer ces codes en ligne avant de les filtrer…)

Pour créer une liste, il suffit de créer une nouvelle requête vide et de renseigner le code suivant :

J’ai nommé cette liste « Liste des valeurs », avant de l’utiliser comme source pour une nouvelle requête :

Cette action crée une liste liée à la précédente, que nous allons pouvoir transformer en table.

Renommons la table en « Table des valeurs », renommons la colonne et convertissons les valeurs au format Texte.

La manipulation suivante est importante : nous allons devoir créer une nouvelle colonne pour y stocker les tables correspondant aux données de chaque titre, c’est à dire quelque chose de ce genre :

Pour y parvenir nous allons devoir revenir à notre requête GetFromYahoo, faire un clic droit –> Créer une fonction.

 

Nous pouvons choisir de la nommer « FonctionGetFromYahoo » et de choisir le paramètre « Titre » précédemment créé, comme paramètre unique.

Cette fonction prend comme paramètre « Titre » qui a comme valeur par défaut la valeur « AAPL ». L’objectif va être de faire varier ce code.

Revenons à notre table des valeurs.

Nous allons pouvoir lui ajouter une colonne en utilisant le bouton « Appeler une fonction personnalisée :

Nous pouvons alors choisir la fonction nouvellement créée en indiquant que la valeur du paramètre « Titre » se trouve dans la colonne Valeur de notre table.

En cliquant dans la première cellule (pas sur la valeur table !) on peut constater que les valeurs pour le Titre « AAPL » sont bien présentes :

Il ne nous reste plus qu’à développer la colonne détail pour obtenir une table de l’ensemble des valeurs :

Il nous reste à transformer nos types de données, pour obtenir une table exploitable.

En ajoutant une simple table Calendrier on obtient le modèle suivant :

Et un premier rapport tout simple :

Amusez-vous bien !

 

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *