PlanèteMembres  |  Mission   xlsAsset xlsAsset
Cherchez dans nos forums :

Communauté des investisseurs heureux (depuis 2010)

Echanges courtois, réfléchis, sans jugement moral, sur l’investissement patrimonial pour devenir rentier, s'enrichir et l’optimisation de patrimoine

Invitation Vous n'êtes pas identifié : inscrivez-vous pour échanger et participer aux discussions de notre communauté !

Attention Cette page affiche seulement les messages les plus réputés de la discussion.
Flèche Pour voir tous les messages et participer à la discussion, cliquez ici.

Flèche Prosper Conseil (partenariat) : optimisation patrimoniale et fiscale sans rétro-commission en cliquant ici.

[+4]    #1 21/08/2017 02h05

Membre (2017)
Réputation :   15  

INTP

Bonsoir,

En lançant mes scripts comme chaque soir, je me suis demandé si d’autres personnes se forgeaient leurs propres outils en Python, un peu comme les feuilles Excel de notre hôte ou les scripts R trouvés sur cette file ?

J’inaugure donc cette file avec un petit projet perso, à la base créé dans le seul but de me faire monter en compétences en Python et qui me sert désormais à faire mes analyses boursières tranquillement avec une interface plus pratique, à mon goût, que celles de mon courtier : Prolix. Le nom est évidemment une référence au faux devin d’Astérix, visant à bien se rappeler de ne jamais donner foi aux seules données boursières wink

Écran d’accueil



Quelques statistiques sur la base de données, avec les cours de nos amis PX1 et VCAC pour avoir une idée de la tendance générale du marché.

La base de données est maintenue en local par d’autres scripts : Pneumatix, Ordralfabetix et Ielosubmarine s’occupent de livrer, préparer et ajuster les cours (pas frais bien entendu, on ne fait pas (encore ?) de HFT ici).

Puisque on est dans les noms, j’ai également un script de backtesting de stratégies (classiques implémentés : turtles, moving averages crossover, momentum… et des trucs plus exotiques à base d’algos génétiques ou de réseaux de neurones sont en cours), gérant les frais de courtage (tarifs Binck) ainsi que la TTF (le cas échéant) : Pronostix. Un vrai village gaulois wink

Indices / Trackers / Shares



Sur la gauche, la liste des valeurs (indices, ETF ou actions donc), compartimentées le cas échéant (oui je me suis limité au marché français, pour le moment) et avec la progression sur quelques périodes sélectionnées.

Sur la droite, les graphes de la valeur choisie et quelques indicateurs d’analyse technique. Je confesse avoir tenté de spéculer sur ces seules bases, je n’ai évidemment rien gagné mais au moins je n’ai pas perdu beaucoup dans l’affaire : de nature sceptique je n’ai pas voué une confiance aveugle aux graphes, j’ai respecté une allocation intelligente du capital et prévu des seuils de sécurité (dont un, mal paramétré car j’avais mal compris le descriptif de l’ordre, s’est déclenché à perte…), bref j’ai fait mes premières armes et passages d’ordres grâce à ça, touchant par inadvertance mes premiers dividendes (ce sont eux qui m’ont permis de limiter la casse). Depuis, je ne fais plus de spéculation aveugle. Acheter bas et percevoir des dividendes m’a paru être une bien meilleure stratégie, j’ai vu la lumière en somme wink

Le vautour



Le vautour, charmant animal attendant patiemment son heure pour se repaître… cet onglet reprend un peu le même principe, en listant les valeurs selon leur performance sur une période donnée (ici, 6 mois) : on a donc les valeurs sur leurs plus bas / plus hauts, ce qui peut constituer un point d’entrée / renforcement / allégement (en cas de forte plus value, par exemple) intéressant. Évidemment, il faut coupler tout ceci à des analyses plus fondamentales et contextuelles avant d’agir, et en particulier vérifier s’il y a une bonne raison pour laquelle un titre baisse afin d’éviter des déconvenues.

Les dividendes



Sans doute l’écran le plus intéressant : les valeurs sont triées par rendements sur l’année précédente, toujours compartimentées. En bas on a le détail des dividendes avec le prix de l’action la veille du versement utilisé pour calculer le rendement, et sur la droite divers graphes.

Graphes du haut

Le premier affiche simplement le prix moyen mensuel sur quelques années, afin de voir l’évolution historique (ici on voit que 2017 est largement au dessus des années précédentes, suite à une forte hausse depuis juillet 2016).

Le second reprend les mêmes données mais affiche les moyennes mensuelles, ainsi que la volatilité sous forme de boites à moustaches classiques.

Graphes du bas

Le premier affiche le prix moyen annuel en € et les dividendes annualisés en % (rendement calculé par rapport au prix moyen annuel). Cela permet de voir rapidement l’évolution des prix/rendements.

Le second est une décomposition de l’évolution des prix sur les N dernières années : ici on constate que statistiquement, la période de fin juin à mi-juillet semble être le meilleur point d’entrée - ce qu’on peut corroborer en regardant le tout premier graphe avec les prix annuels.

Augure et Portefeuille

Ces deux onglets sont grisés car pas encore développés, et je connais quelques personnes qui aimeraient que j’ajoute un onglet Cryptomonnaies…

L’onglet Portefeuille me servira à entrer mon portefeuille (original, n’est il pas ?) et visualiser divers graphes comme son allocation sectorielle, sa performance par rapport au marché, ce genre de choses - on peut également envisager des propositions d’équilibrage (alléger ou renforcer), afin de pallier aux évolutions naturelles des valeurs.

L’onglet Augure sera de loin le plus complexe, et intégrera un réseau de neurones artificiels visant à m’apporter des conseils plus complets/fiables que les simples calculs statistiques, un conseiller virtuel privé en somme. J’ai implémenté quelques prototypes encourageants, mais je dois encore vérifier leurs prédictions et performances sur des périodes plus longues avant de les intégrer.

Il serait également envisageable d’ajouter un onglet "Value" pour investir dans la valeur, mais cela nécessiterait de collecter pas mal de données supplémentaires avant que le logiciel ne puisse proposer des entreprises intéressantes à bas prix… en fait, tout est possible wink

D’autres pratiquants parmi les investisseurs heureux ? Qu’avez vous réalisé de beau ? smile

Mots-clés : analyse, bourse, logiciel, python

Hors ligne Hors ligne

 

[+1]    #2 22/08/2017 00h40

Membre (2017)
Réputation :   15  

INTP

Tout d’abord, merci à tous pour vos retours smile

@doubletrouble

Je fais moi aussi du C (et du shell, évidemment - tellement évident qu’on l’oublie toujours), mais surtout pour du développement système - peu adapté ici donc, surtout que les librairies que j’utilise sont déjà optimisées avec du code C/C++ pour la plupart.

Avez-vous utilisé un framework particulier (django, joomla… autre ?) pour votre projet ? N’hésitez pas à nous indiquer quand vous en ferez la publication en tout cas, je gage que ça peut intéresser du monde smile

@blackfalcon

Quels autres langages, par curiosité ? J’en ai essayé plusieurs avant de me fixer sur le python, tellement déroutant de simplicité qu’il rend le complexe trivial, c’est vraiment un langage qui vaut le coup d’y investir un peu de temps wink

Je n’ai pas vraiment réfléchi à la question de la publication, d’autant que sans base de données il n’a pas vraiment d’intérêt autre que didactique… disons que ça reste un sujet ouvert.

En effet pour les cryptos, c’est ce qu’on m’a expliqué. Il faudrait que je m’y plonge pour me forger un vrai avis sur le sujet, pour le moment je suis assez ambivalent sur ces monnaies et me contente de les suivre de loin, considérant que c’est une variante à la mode du forex, la liquidité en moins…

@M07

J’utilise également Python à peu près quotidiemment pour du développement système, là mon choix de faire une interface graphique "lourde" a été dicté par la curiosité (découvrir tkinter, en l’occurence) et la nécessité (j’utilise matplotlib pour générer mes graphes, et vus les temps de traitement sur des périodes un peu plus longues que quelques années le navigateur finirait par perdre patience… à moins de rendre les graphes côté client en JS, vu que c’est matplotlib qui accapare la majorité du temps de génération).

Côté db j’utilise PostgreSQL pour stocker et interroger mes données (directement en SQL, via psycopg2 et pandas donc). La base est nourrie par divers "scrapers" qui s’occupent de consulter les pages de cours sur divers sites boursiers, d’extraire les données de la bouillie généralement informe qu’est leur HTML (via Beautiful Soup) puis de générer des fichiers CSV avec les données désirées, qui sont ensuite versionnées (git) et importées.

Je suis moi aussi passé par les pages finances de Yahoo et Google, j’ai d’ailleurs aspiré la plupart de mon historique depuis Yahoo pour les cours, et depuis divers sites de courtiers pour les listes de dividendes. Je n’utilise plus les pages finances depuis : c’est pratique pour récupérer d’un seul coup les données historiques, mais pour la maintenance quotidienne il vaut mieux interroger des pages listant les valeurs et cours de la journée (moins de requêtes, ça arrange tout le monde et on peut aussi collecter les cours intraday si on en a envie).

Python 2 est agonisant, je suis donc parti directement sur Python 3. J’ai la même approche que vous concernant les modules, étant moi aussi plus d’une fois tombé sur de magnifiques projets complétement obsolètes, et parfois sur des livres dont les exemples étaient antédiluviens, ce qui est extrêmement pénible et frustrant… J’ai donc essayé dans la mesure du possible de me cantonner à des modules "éprouvés" - je pense que vous conviendrez que la liste suivante est raisonnable :
- ceux fournis avec python même : tkinter et un paquet de modules de la librairie standard (datetime, notamment)
- les modules tiers majeurs : matplotlib pandas numpy beautifulsoup4 tensorflow
- les modules tiers "mineurs" : psycopg2 pygments dateutil keras
Je considère ici comme mineur un module dont la disparition soudaine ne me chagrinerait pas outre mesure : certes je devrais adapter mon code, au pire forker ledit module, mais ils ne sont pas "vitaux" contrairement à un module majeur où je serais bien plus embêté (matplotlib et pandas doivent représenter à eux seuls la grande majorité du code, en l’occurence). Quant à ceux faisant partie de la librairie standard, je ne m’inquiète pas outre mesure pour leur pérennité.

Toutefois il n’y a pas que le code qui risque de disparaître, il y a aussi les sources de données… risque que j’ai "dilué" en multipliant les scrapers, et donc les sources de données potentielles - ainsi la "panne" de yahoo finance suite à une modification d’API ayant cassé pandas_datareader ne m’a que fort peu impacté, les autres scrapers étant là pour compenser (et ayant déjà récupéré les valeurs historiques).

@Nappy

Vous savez, ce projet a commencé un peu de la même manière smile

Je me demande quelle taille github autorise pour les repos non payants… avec tous les CSV on flirte avec le GB, sans compter les metadonnées de git lui même, et sans db l’intérêt est assez limité. Peut être avec un simple CSV d’exemple, une sorte de démo technologique… mais ça a peu d’intérêt, je pense.

Une chose que je pourrais faire, par contre, serait d’enfin réunir mes propres modules et d’en faire un paquet pip autonome… ça me simplifierait aussi la vie, cela fait un moment que je me le dis wink

Ha, la limite semble "poliment" fixée à 1GB

@roudoudou

Merci, mais le meilleur est encore à venir wink

@Geronimo

Votre site est diablement intéressant, comment en avez vous eu l’idée ? Suite à votre certification AMF j’imagine ?

En tout cas il va clairement falloir que j’intègre vos données oui, la tâche la plus difficile sera de trouver un nom à l’onglet wink Je pense que ça sera mon prochain développement, entre deux entraînements de réseaux de neurones. Je vous tiens au courant, et pourquoi ne pas collaborer sur des développements en effet ! smile

@bombadil

Ha, vous avez poussé plus loin que moi, bravo smile Ayant utilisé Django vous devriez pouvoir le mettre en ligne aisément je pense, attention toutefois à bien tenir Django à jour, les scanners automatiques veillent… le web est un environnement hostile wink Toutefois comme vous le dites il manque également cruellement d’applications d’analyse fondamentale, il y aurait donc ici un public tout trouvé pour votre projet… si cela vous intéresse d’essayer de sauter le pas et d’ouvrir votre application sur le web, n’hésitez pas à me contacter smile

Votre processus semble très intéressant en tout cas, j’espère pouvoir faire de même mais il va déjà falloir que j’enrichisse ma base de données avec les informations fondamentales (vous les collectez où, directement sur les sites des sociétés je suppose ? quid du parsing des documents ?), jusqu’à présent je ne l’ai fait qu’à la main et pour une poignée de sociétés dans lesquelles je songeais justement investir… et surtout, que je m’instruise convenablement sur les méthodes - j’ai déjà parcouru le site des daubasses et bien que je pense avoir saisi les principes généraux, il vaut mieux que je lise les classiques sur le sujet avant de me jeter dans le code wink

Hors ligne Hors ligne

 

[+1]    #3 22/08/2017 16h09

Membre (2015)
Réputation :   61  

@ FrankChalmers

Je suis trés différents de la majeure partie des membres du forum , trade depuis 30 ans et en vit depuis 15 ans (passant du daytrading sur future au swingtrading) , la partie accumulation du capital est terminée, il me faut juste qu’il ait un certain rendement pour assurer une paye régulière.

Mon approche est uniquement technique… approche par secteurs.. money management…seulement les gros titres (une dizaine) ou ETF nord américains … des in/out…, donc le fondamental ne me sert pas a grand chose. Je ne cherche plus les petits titres sous evalués qui vont exploser.

Si le technique vous interesse tant soit peu , je ne peux que vous recommander la lecture de: Trading Systems and Methods (Wiley Trading): Perry J. Kaufman , sur le paquet de livres d’AT que j’ai (40-50 ?), c’est le meilleur et de trés loin.

J’ai consacré bien trop de temps à peaufiner la méthode (graphiques) , mais maintenant c’est ok , je regarde l’ouverture et un peu avant la fermeture , l’heure du midi si je veux entrer sur un titre , de plus la plupart du temps quand j’achète je place l’ordre de vente..je suis beaucoup support/resistances pour mes in/out.


La fidélité est souhaitable en amour , mais elle est une tare sur les marchés.

Hors ligne Hors ligne

 

[+1]    #4 17/02/2019 14h17

Membre (2017)
Réputation :   15  

INTP

Bonjour Laurent, heureux de savoir que j’ai une influence positive sur votre motivation smile

Scrapy est très bien aussi, j’en avais considéré l’utilisation également mais je n’avais pas besoin de toutes les fonctionnalités de plus haut niveau qu’il offrait. Néanmoins pour du scraping "at scale" je pense que Scrapy serait plus simple à mettre en oeuvre.

Pour vos soucis d’erreurs 429, j’ai dû gérer des délais entre les requêtes en effet. Certains sites affichent les seuils tolérés, généralement bien cachés dans un coin de la documentation pour développeurs, alors que pour d’autres il faut y aller en tâtonnant… Pour Scrapy il y a l’option download_delay, par exemple.

Une astuce que j’ai utilisée consiste à gérer mon pipeline de la manière suivante :
- télécharger le HTML et le mettre immédiatement en cache (fichier local, en mémoire dans Redis ou Memcache, plein de choses sont possibles - l’important est d’avoir le HTML brut immédiatement accessible, pour qu’un échec de parsing ne déclenche pas une nouvelle requête HTTP et ne crame notre quota de requêtes inutilement)
- travailler ensuite à partir de ce cache local : parser le HTML, détecter les modifications éventuelles et les pousser dans l’étape suivante
- enfin on vérifie la cohérence des données obtenues, et on les enregistre de manière pérenne (Postgresql, dans mon cas)
On peut très bien imaginer un système évènementiel pour chaque étape, via un système pub/sub (Redis, RabbitMQ, ZMQ…) chaque module agit alors de manière autonome et le suivant ne se déclenche que lorsqu’il a du travail à faire. Ainsi il n’est pas très grave de prendre une 429 : on retente simplement la requête après une durée aléatoire et notre pipeline reste fonctionnel, de plus ce design est très simple à paralléliser sur plusieurs machines ensuite.

Tkinter n’est que le framework graphique pour gérer l’interface "lourde" (fenêtres, widgets), on pourrait utiliser autre chose comme GTK+ ou Qt. Les graphiques sont pour leur part rendus par Matplotlib, sur laquelle s’appuie Seaborn. Seaborn est de plus haut niveau que Matplotlib et permet de faire des graphiques intéressants beaucoup plus rapidement, en particulier pour de l’analyse/exploration rapide de données, c’est un excellent choix.

D’ailleurs si votre but est simplement de tester rapidement une idée ou d’explorer/manipuler vos données sans concevoir une interface graphique "lourde" dédiée (ce qui serait en effet une perte de temps), je vous conseille de tester Jupyter Notebook : ça ouvre un environnement Python accessible en local via votre navigateur, et vous permet de manipuler le code et les données de manière simple et conviviale, avec les graphiques qui apparaissent directement dans le navigateur, potentiellement de manière interactive si vous le configurez pour.

Voici un exemple simple, datant des premiers pas de Prolix :

Chaque cellule peut être éditée puis réexécutée indépendamment des autres, c’est très pratique pour le prototypage et l’exploration de données. Il est ensuite aisé de réintégrer le code dans des scripts autonomes pour industrialiser le déploiement.

N’hésitez pas à nous faire un retour de votre avancement, ça intéressera sûrement du monde ici, moi le premier ! wink

Hors ligne Hors ligne

 

[+1]    #5 18/02/2019 15h09

Membre (2017)
Réputation :   6  

Merci pour ce fil.

Suite à sa lecture, j’ai commencé le cours Udemy suivant qui peut peut être intéresser d’autres membres:
https://www.udemy.com/python-for-financ … analytics/

Afin de me remettre à jour, (il y à tres longtemps que je n’ai pas développé).

Jusqu’ici (20%) c’est plutôt bien fait, beaucoup d’exercices et explications claires. Je verrai dans la durée !

Bonne journée

Hors ligne Hors ligne

 

[+1]    #6 06/06/2019 17h08

Membre (2017)
Réputation :   15  

INTP

Bonjour !

Swingueur a écrit :

Urlib ne fonctionne pas ou alors j’ai trouvé des scripts sur internet assez complexes

Regardez plutôt la librairie requests, qui fournit une interface bien plus simple/logique que celle d’urllib.

Swingueur a écrit :

Ensuite, il faudrait bosser le parsing de CSV

Idem, jetez un oeil à la librairie pandas. Tout ceci a déjà été évoqué dans la file, y compris les scrapers wink

Et surtout, utilisez une version récente de Python. Le minimum vital étant 3.6 de nos jours.

Pour la base vous avez l’embarras du choix, à voir selon vos besoins (relationnelle classique, nosql/full text, simple cache… sans doute les trois, d’ailleurs).

Bon courage pour votre projet, cela me fait penser que je dois reprendre les miens…

Hors ligne Hors ligne

 

[+1]    #7 25/09/2019 17h12

Membre (2019)
Réputation :   1  

Caceray a écrit :

Il y a effectivement des forums/messages assez récents expliquant/témoignant de la possibilité d’utiliser les données provenant de Yahoo Finance et Google Finance. Malheureusement il y a des témoignages encore plus récents indiquant que ces entreprises ont cessé la diffusion gratuite de ces données. J’avais déjà essayé de mon côté avant de poster ici.

import yfinance as yf

adp = yf.Ticker("ADP.PA")
hist = adp.history(period="1d", interval="1m")

print(hist)

Trouvé et testé en quelques minutes et manifestement ça a l’air de fonctionner, car j’ai les mêmes données que sur le graphique de la journée… wink
Donc Yahoo fonctionne ! Pour Google, je ne sais pas, il faudrait faire un test avec pandas-datareader, mais je n’ai pas le temps pour ça, là maintenant. Mais ça fera partie de mes prochains tests avec l’affichage des données via matplotlib, dès que j’aurai progressé un peu… smile

Hors ligne Hors ligne

 

[+1]    #8 29/09/2019 22h43

Membre (2017)
Réputation :   15  

INTP

MasterNag a écrit :

- Cela signifie que vous générez toujours un fichier du même nom pour chaque action/indice ?
- Les commits dans git sont-ils fait automatiquement par script Python une fois les fichiers importés ?

Tout dépend de votre but : le mien était de pouvoir tester, debugger et valider simplement mes parsers, donc le plus simple était de générer un CSV par jour (avec la date dans le nom du fichier) et de programmer les parsers pour écrire dans les bons fichiers (CSV, JSON et même XML selon les sources). Dans la même veine, les commits sont manuels : je balaye rapidement les diffs lors du commit pour repérer les erreurs éventuelles, et corriger le cas échéant (ce que je fais aussi lorsque je commit du code, ça permet souvent de repérer les dernières coquilles).

Ainsi en cas de mise à jour du parser, que ce soit à case d’une modification dans le format d’entrée (un XML qui devient du JSON, du HTML ou un PDF qui change, etc) ou d’une lib utilisée qui aurait été mise à jour, je peux effacer mes csv et les regénérer à partir des fichiers gardés en cache : si git diff me montre des différences, c’est que j’ai introduit une régression quelque part. Vue la complexité de certains parsers, il est toujours utile d’avoir ce filet de sécurité.

Un exemple qui me vient en tête est la différente entre "10 000.00" (europe) et "10,000.00" (usa), j’ai aussi croisé du "10.000,00" et du "10 000,00" donc pour parser ça dans tous les cas sans erreur, il faut un peu d’heuristiques… et des tests unitaires. J’ai également des contraintes au niveau de la base de données pour qu’un nombre invalide soit détecté en dernier ressort, et elles se sont déjà déclenchées par le passé sur du code que je pensais correct… on n’est jamais trop prudent !

MasterNag a écrit :

- Une fois le fichier importé quel est l’intérêt de le conserver via git ?
- Est-ce uniquement en tant que backup (et dans ce cas là un dump périodique de la base ne serait-il pas suffisant ?) ou avez-vous besoin de les réutiliser parfois ?

Il m’arrive de réimporter toute la base de données de zéro ou partiellement à partir des fichiers parsés, car je ne suis pas toujours sur le même ordinateur. J’ai bien un dump pour les sauvegardes, mais cela ne concerne qu’une seule table (celles des dividendes, dont l’import est assez complexe en raison des changements d’isin/raisons sociales).

Voilà pour ma méthode, à vous de trouver celle qui vous convient wink Cela peut paraître trop précautionneux, mais il vaut mieux s’assurer que les données qu’on manipule et sur lesquelles on base nos prédictions soient correctes.

Hors ligne Hors ligne

 

[+2]    #9 11/07/2021 20h24

Membre (2019)
Top 50 Année 2022
Top 50 Portefeuille
Réputation :   211  

Bonjour Swingueur,

Effectivement il y a eu une indisponibilité de service de yfinance hier suite à une MAJ de Yahoo sur ce module.
Il vous suffit d’updater le package : pip3 install yfinance --upgrade (si vous utilisez python 3) et tout marche à nouveau smile

Bien à vous

Hors ligne Hors ligne

 

Attention Cette page affiche seulement les messages les plus réputés de la discussion.
Flèche Pour voir tous les messages et participer à la discussion, cliquez ici.


Discussions peut-être similaires à “la programmation python et les ih”

Pied de page des forums