Suivre les cours de bourse grâce à Domoticz

Attention : Suite à l’arrêt de l’API YAHOO, cet article est obsolète. Rien ne fonctionne.

Si vous connaissez une API qui permette d’interroger le marché boursier Français et qui est gratuite, faites en part dans les commentaires. Merci

 

J’ai eu l’idée de suivre les cours de mes actions boursières dans Domoticz.

Hein, quoi, c’est n’importe quoi ! Aller mettre des cours de la bourse dans Domoticz !!

Ben je dirais que c’est pratique à plusieurs titres (!) :  on peut  placer des alertes/notifications sur un cours à atteindre (au plus haut, au plus bas) , il y a les courbes qui s’affichent et l’affichage sur une custom page dédiée c’est bien pratique, et puis c’est amusant.

L’idée est de récupérer les valeurs de cours via l’API de Yahoo finance et de l’afficher dans un widget.

Yahoo Finance

Depuis le site https://fr.finance.yahoo.com/ on retrouve les codes de nos actions à suivre ORA.PA pour Orange, ENGI.PA pour ENGIE ….

L’API Yahoo nous renverra les cours de bourse, en temps réel, au travers d’un fichier csv contenant le nom, la valeur et le % d’évolution (+ ou – X %). Infos https://code.google.com/p/yahoo-finance-managed/wiki/csvQuotesDownload

J’ai choisi d’utiliser et de suivre la valeur instantanée du cours.

Coté Domoticz

Le meilleur widget que j’ai réussi à trouver est le Voltage (Tension) car il supporte 3 chiffres après la virgule et les notifications dont j’ai besoin pour la suite.

Il faut donc créer autant de widgets virtuel de type « Tension »‘ que d’actions boursières à suivre. Ils apparaissent dans l’onglet « Mesures »

bourse1

Notez soigneusement les noms que vous avez attribués à vos capteurs virtuels pour la suite et relevez les idx Domoticz depuis la page « Matériel »

bourse2

J’ai également crée un Widget interrupteur nommé « Bourse » qui passe à On à l’ouverture de la bourse (7h30) et à Off à la fermeture (17h30) via son propre planning. Cela permet de démarrer et arrêter les scripts Lua en dehors de ces horaires.

Un peu de code

Bien sur il nous faut interroger yahoo finance pour chaque action et valoriser le widget correspondant.

Le petit bout de Lua ci dessous fait le job pour une action et un widget, on l’enregistrera soit en tant que script_device_XXX.lua ou script_variable_xxxxx.lua (voir plus bas).

Le tableau taction contient l’emplacement du fichier csv, l’IDX du widget à valoriser et le code de cette action chez yahoo (ORA.PA, ACA.PA…).

Quelques print peuvent aider au débogage.

La valeur (val) est retirée du fichier csv par un

 nom, val = v:match("([^,]+),([^,]+)")

car le fichier contient « CREDIT AGRICOLE »,10.62, »-2.39% », ces informations sont obtenues grâce au

&f=nl1p2

de l’interrogation de l’API Yahoo (c.f ci-dessous), n renvoyant le nom, l1 le cours instantané et p2 le % instantané.

local taction={
{"/home/pi/domoticz/scripts/lua/ca.csv",205,"ACA.PA"}
}

function lines_from(file)
  --if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do
    lines[#lines + 1] = line
  end
  return lines
end


commandArray = {}

if (otherdevices['Bourse'] == 'On') then

for i, v in pairs(taction) do
   file=v[1]
   codeidx=v[2]
   codebourse=v[3]
   --print('ligne '..i..' : '..file..','..codeidx..','..codebourse)

   os.execute ('wget "http://finance.yahoo.com/d/quotes.csv?s=' .. codebourse .. '&f=nl1p2" -q -O ' .. file )
   local lines = lines_from(file)

          for k,v in pairs(lines) do
           --print('line[' .. k .. ']', v)
           nom, val = v:match("([^,]+),([^,]+)")

          end

end
          commandArray['UpdateDevice'] = codeidx .. "|0|" .. val

end
return commandArray

Pour éviter le lancement de X scripts  toutes les minutes, on peut aussi transformer ces scripts en script_variable_XXX.lua , scripts qui ne seront déclenchés qu’au changement d’une variable Domoticz que l’on pourra modifier via un script shell qui la met à jour à intervalles définis dans crontab.

commandArray = {}

if(uservariablechanged['go_yahoo']) then...

Les notifications

Maintenant nous pouvons indiquer des valeurs de cours au dessus/en dessous desquelles nous devons être alertés par une simple notification Domoticz.

bourse25

 

L’affichage

Bon d’accord ça surcharge un peu l’affichage de la page des « Mesures » dans Domoticz, mais franchement qui l’utilise ?

Faites donc une jolie custom page comme décrite ici https://easydomoticz.com/forum/viewtopic.php?f=17&t=331

et avec cette mise en page

	//page 2    
            
     ['204','Euro','cell2_1','Cours EDF','','','color:green;font-size:50%;font-weight:bold','x < 9 || x > 11'],    
     ['205','Euro','cell2_2','Cours CA','','','color:green;font-size:50%;font-weight:bold','x < 9 || x > 12'],    
     ['208','Euro','cell2_3','Cours ENGIE','','','color:green;font-size:30%;font-weight:bold',''],    
     ['206','Euro','cell2_5','Cours ORANGE','','','color:green;font-size:50%;font-weight:bold',''],    
     ['210','Euro','cell2_6','Cours VIVENDI','','','color:green;font-size:50%;font-weight:bold',''],    
     ['207','Euro','cell2_7','Cours VEOLIA','','','color:green;font-size:50%;font-weight:bold',''],    
                ['0','Hide',                  'cell2_8',                           '','','','',''],    
                ['0','Hide',                'cell2_9',                           '','','','',''],    
                ['0','Hide',                'cell2_10',                           '','','','',''],    
                ['0','Hide',                   'cell2_11',                            '','','','',''],    
                ['0','Hide',                  'cell2_12',                           '','','','',''], 
                ['0','Hide',                 'cell2_13',                         '','','','',''], 
                ['0','Hide',                 'cell2_14',                         '','','','',''], 
                ['0','Hide',                 'cell2_15',                         '','','','',''], 
                ['0','Hide',                   'cell2_16',                          '','','','',''],    
                ['0','Hide',                 'cell2_17',                         '','','','',''],
                ['0','Hide',                 'cell2_18',                         '','','','',''],
                ['0','Hide',                 'cell2_19',                         '','','','',''],
                ['0','Hide',                 'cell2_20',                         '','','','',''],
                ['0','Hide',                 'cell2_21',                         '','','','',''],
                ['0','Hide',                 'cell2_22',                         '','','','',''],
                ['0','Hide',                 'cell2_23',                         '','','','',''],
                ['0','Hide',                 'cell2_24',                         '','','','',''],
                ['0','Hide',                 'cell2_25',                         '','','','',''],

on obtient quelque chose comme cela

bourse5Remarquez que certains cours sont colorés en fonction des paramètres  ‘x < 9 || x > 11’

L’affichage des courbes au sein des interrupteurs montre un plateau durant les heures de fermeture de la bourse, pas très joli, mais je n’ai pas trouvé mieux.bourse4

Voila, c’est pas plus ridicule de gérer ça que de récupérer les horaires de marées, la qualité de l’air ou si le roomba vient de décoller de sa station.

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz.

One Comment

  1. Salut,

    malheureusement l’API Yahoo est arrêtée. « It has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com. »

    Une idée de quelle autre API pourrait être utilisée

Comments are closed.