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é !

Information Nouveau venu dans cette longue discussion ?
Flèche Consultez une sélection des messages les plus réputés en cliquant ici.

#26 25/02/2018 01h10

Membre (2017)
Réputation :   15  

INTP

Bonsoir,

Je reprend enfin le développement de Prolix, mis en pause quelques mois pour diverses raisons… ce qui ne m’a pas empêché de débuter un portefeuille de quelques lignes d’actions en direct grâce à ses analyses wink

J’ai collecté plusieurs sources de données que je vais ajouter petit à petit, avant d’enfin implémenter l’onglet Portfolio pour suivre plus finement ledit portefeuille.

On commence donc en douceur avec l’ajout des transactions effectuées par les initiés, qui s’appuie sur le CSV fourni par le projet de Geronimo et le parse à l’aide de la lib Pandas, voici ce que ça donne :

Prochaine étape, importer la liste des valeurs éligibles au PEA-PME… n’avoir qu’un seul tracker disponible ne me plait pas wink

Hors ligne Hors ligne

 

#27 25/03/2018 21h45

Membre (2015)
Réputation :   14  

Hello FrankChalmers, Félicitations pour votre outils ! Il a du vous demander pas mal de travail.

Je commence à réaliser quelques petits scripts de mon côté afin d’améliorer ma vision sur mon portefeuille et sur les sociétés extérieurs.
Je commence tout juste et pour le moment je n’en ai qu’un seul qui me permet de voir les variations d’une société avec ses concurrents de manière normalisée sur une fenêtre de temps voulu. J’utilise pour la première fois BS ce soir pour scrapper les fondamentales sur YF, je suis assez étonné de la facilité pour le moment !

En tant qu’étudiant sinon je suis en période de stage et je réalise une API dans une BFI pour une banque à la défense en python toujours, j’apprends beaucoup !

Ravi de pouvoir échanger !

@parentier

parentier a écrit :

Holala, je découvre ce fil… je suis quasi-débutant en programmation, et depuis quelques temps je me suis mis en tête de faire mon propre screener avec Python. Les fonctions seraient assez simples:
- récupération des données comptables
- calcul de formules personnalisées
- exporter dans un fichier excel ou google sheet
Sachant que je fais ça sur mon maigre temps de loisir, combien de temps vais-je galérer avant d’y parvenir à votre avis?

Ca ressemble un peu à  ce que je souhaite faire.
1) Récupérer les données comptables : J’utilise BeautifoulSoup qui permet de scrapper des pages internets.
2) A vous de faire vos fonctions !
3) Exporter vos résultats via pandas et la fonction to_excel

Concernant la programmation, j’ai vu une conférence de vulgarisation scientifique sur l’ordinateur quantique et visiblement la programmation de demain ne sera pas du tout celle d’aujourd’hui ! Les chercheurs se remettent à coder en assembleur mais avec en plus de ça la superposition des états qu’offrent le quantique, c’est bluffant !

Hors ligne Hors ligne

 

#28 26/03/2018 00h42

Membre (2017)
Réputation :   15  

INTP

Bonjour Az,

BS est en effet extrêment simple, j’ai été agréablement surpris aussi par sa puissance. Si vous découvrez d’autres libs aussi intéressantes dans le sujet qui nous intéresse, n’hésitez pas à les partager wink

Auriez vous par hasard gardé le lien de cette vidéo sur l’informatique quantique ? La technologie n’en est qu’à ses balbutiements, mais elle promet en effet une révolution aussi grande que l’arrivée du transistor…

Bravo pour votre stage, j’imagine que c’est la même qui mettait du texte dans ses pages web pour recruter des scrapers, ça m’avait fait sourire en tombant dessus wink

Concernant Prolix, comme souvent dans un gros projet, il y a eu deux versions : j’ai appris à la fois le python et la bourse en 2016, voulu tout faire par moi même (pour apprendre), et en juin 2017 j’ai tout repris de zéro et recodé en quelques mois seulement avec les libs indiquées précédemment, m’appuyant sur mes erreurs passées et tout ce que j’avais appris depuis. La version actuelle est satisfaisante au niveau du code, mais je n’aurais jamais pu la faire directement wink

Dernière modification par FrankChalmers (26/03/2018 00h43)

Hors ligne Hors ligne

 

#29 02/04/2018 20h52

Membre (2015)
Réputation :   14  

Malheureusement la vidéo est confidentielle puisque était liée à une entreprise (dont je ne fais pas partie non plus) et je ne l’ai pas hmm

FrankChalmers a écrit :

Bravo pour votre stage, j’imagine que c’est la même qui mettait du texte dans ses pages web pour recruter des scrapers

C’est possible, je suis curieux d’en savoir plus de ce côté !

En parlant de scrapers je viens de finir le mien pour m’en servir en tant que screener. Mon screener  peut théoriquement couvrir plus de 100 000 tickers (liste de tickers yahoo qui date de septembre 2017). Avec ça je vérifie les rapports annuels des sociétés sur Yahoo Finance et mon programme me ressort les sociétés qui vérifie les conditions souhaités (EV/EBITDA, CAF/Dette etc.)
Pour éviter que mon IP soit repérer j’utilise le module "torrequest" qui me permet de changer mon IP quand je le souhaite. Mon programme est un peu lent mais fait l’affaire.

FrankChalmers a écrit :

Si vous découvrez d’autres libs aussi intéressantes dans le sujet qui nous intéresse, n’hésitez pas à les partager wink

Du coup "torrequest" pour anonymiser le scrapping, je ne sais pas qu’elle est la limite pour Yahoo Finance mais j’ai préféré sécuriser dés le départ. Maintenant je vais certainement m’intéresser à Postgres que j’utilise dans le cadre du travail pour enregistrer des informations.

Hors ligne Hors ligne

 

#30 16/05/2018 18h42

Membre (2018)
Réputation :   5  

Je suis trop content de tomber sur ce topic! Je me forme actuellement à Python (depuis 6 mois environ) et je travaille actuellement sur un mindmap pour mes investissements sur la base de QGraphicView.

Pas facile mais c’est challengeant.
QGraphicsView Class | Qt 4.8
et pour ceux que ça intérese je vous conseille ce repo
GitHub - LeGoffLoic/Nodz: Nodz : Visualize your data - Free nodes based graph generator.

Hors ligne Hors ligne

 

#31 28/11/2018 20h35

Membre (2015)
Top 10 Dvpt perso.
Top 20 Vivre rentier
Top 10 Obligs/Fonds EUR
Top 20 Finance/Économie
Top 10 Banque/Fiscalité
Réputation :   501  

Bonsoir !

Je suis tombé, par hasard, sur ce SITE Internet
Il est proposé des cours pour apprendre à Trader avec les langages Python ou R.

TOUTEFOIS, je n’ai pas voulu laisser mes coordonnées. À vous de voir…


M07

Hors ligne Hors ligne

 

#32 28/11/2018 21h15

Membre (2017)
Réputation :   15  

INTP

Bizarrement ça ne m’inspire aucune confiance non plus, ce n’est pas comme si les ressources gratuitement et publiquement accessibles étaient à portée de souris via n’importe quel moteur de recherche… pourquoi l’avoir posté dans ces conditions, toutefois ?

Je profite de l’occasion (qui fait le larron, après tout) pour indiquer que Prolix continue sa petite vie, j’y ai ajouté un screener mis à jour automatiquement depuis ma base de données après avoir laborieusement tenté de le faire via des feuilles de calcul c’est finalement allé bien plus vite en Python.

J’ai également un prototype d’IA essayant, assez piteusement, d’apprendre à spéculer via de l’apprentissage par renforcement mais ce n’est pas encore tout à fait au point wink

Les analyses statistiques plus "classiques" ont bien relevé les rebonds plus récents de BIC et Iliad, elles.

Hors ligne Hors ligne

 

#33 17/02/2019 12h06

Membre (2019)
Réputation :   0  

@FranckChalmers
Bonjour
Je trouve votre projet très intéressant et abouti. C’est motivant pour moi qui m’occupe d’un projet similaire.
Par contre, j’utilise des variantes:
- utilisation de scrapy au lieu de beautifoul soup
Rencontrez vous parfois des erreurs 429 parce que vous faites trop de requetes sur le site ?
- la représentation graphique n’est pas ma priorité, je pense qu’au lieu d’utiliser TKinter je me pencherai sur seaborn le moment venu qui me parait proposer plus de possibilités.
Dans un premier temps je souhaite juste faire ressortir des cas de figures de manière automatique avec les statistiques qui vont bien pour être informé et passer les bons ordres au bon moment.
Je suis actuellement en train de regarder la programmation de l’intégration régulière des données en journée.
Comment avez-vous procédé ? vous enregistrer sur un fichier et à chaque cycle vous l’ouvrez, ajoutez les nouveaux éléments, analysez la situation puis vous le réenregistrez ? C’est ça ?
Bonne journée à vous
Laurent

Hors ligne Hors ligne

 

[+1]    #34 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]    #35 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

 

#36 06/06/2019 16h13

Membre (2016)
Réputation :   28  

J’ai fait du Python en 2006/2008, pas a haut niveau, des scripts principalement. Je me suis eloigné du dev depuis.
Cela fait plusieurs semaines que j’aimerais me coder un outil perso pour scrapper internet et creer une base de donnee perso avec des valeurs fondamentales.

Mas ce n’est pas aussi simple que je pensais.
Exemple, je me suis cassé les doigts hier soir pour télécharger les CSV de morningstar. Urlib ne fonctionne pas ou alors j’ai trouvé des scripts sur internet assez complexes (good_morning)
Ensuite, il faudrait bosser le parsing de CSV. Le graal étant d’encapsuler cela dans un appli web.

Un retour sur la formation Udemy?

Hors ligne Hors ligne

 

[+1]    #37 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

 

#38 07/06/2019 21h33

Membre (2016)
Réputation :   28  

Ce thread m’a remis du coeur a l’ouvrage.
J’ai pu faire un script qui ouvre mes fichiers de suivi financier et des urls (banques). Ca c’est pour supprimer quelques clics rebarbatifs dans la gestion comptable/portefeuilles
Maintenant, je vais m’occupper de l’analyse des actions, au moins faciliter l’environnement (genre chercher les rapport financiers semi automatiquement etc…)

Je vais regarder ces librairies de plus près.
En fait, ce n’est pas urlib le probleme car cela fonctionne sur
Growth, Profitability, and Financial Ratios for Accor SA (AC)  from Morningstar.com
Mais cela ne donne rien sur celle la
http://financials.morningstar.com/finan … order=desc

Et j’ai bs4 qui est buggé je ne sais pourquoi. Mais j’ai découvert la notion de distribution, avec ana/miniconda, ca devrait mieux aller pour installer des librairies. pandas a l’air plus efficace, a voir.

En fait le graal sera le parsing de PDF pour récupérer les données des rapports financier, mais là ca s’annonce trop ambitieux.

Pour la base de données, un simple CSV/Excel fera l’affaire pour faire des filtres. J’ai déjà les champs que je souhaite récupérer. Il me faut juste un moyen de les recopier et les remettre en forme.

PS/ J’utilise bien Python 3.7

Hors ligne Hors ligne

 

#39 07/06/2019 22h43

Membre (2016)
Top 20 Entreprendre
Top 20 Immobilier locatif
Réputation :   264  

ISTJ

Pour ce qui est des banques et courtiers, jetez un oeil à Weboob et précisément boobank. Ils couvrent déjà quelques courtiers bourse et AV.
Le parsing de PDF des rapports annuels, dont le format est spécifique à chaque société, est probablement peu faisable (sauf si vous avez très peu de sociétés). Cela dit avec pdf2text et grep on peut faire un prétraitement utile.
CSV/Excel, pandas sait les lire et les écrire, très pratique.

En ligne En ligne

 

#40 08/06/2019 20h15

Membre (2016)
Réputation :   28  

Je vais regarder cela en détails, même si la partie compta n’est pas le plus contraignant.
Pour le fun, j’ai mis le script sur Github.
GitHub - ffoucaud0212/dashboards_launch: Python tool to launch bank URLs and finance files

Comme vous le verrez je pars de très loin, beaucoup de choses en dur. Si je voulais améliorer, je pourrais apprendre à modifier un ods, ou alors lancer la macro d’xlsPortfolio après ouverture du fichier.

Je suis parti sur un script pour m’aider dans l’analyse financière.
Au début, ca sera lancer des URLs a partir d’un ticker, et j’améliorerai les automatisations une par une si je peux;

Hors ligne Hors ligne

 

#41 13/06/2019 21h29

Membre (2016)
Réputation :   28  

Suite au premier script, j’en ai fait un deuxieme pour m’aider sur l’analyse financière.
Il y a plusieurs étapes / options
1. Ouvrir des URL, principalement une recherche google du rapport financier et les onglets MorningStar. Pour l’instant, je ne me suis pas encore mis au téléchargement automatique des CSV MS, mais l’état actuel m’aide pas mal
2. Archivage des PDFs/CSVs dans Drive et concatenation des CSVs en un seul fichier (+ Ouverture de ce fichier pour controle)
3. Ecriture d’une table, à partir du CSV MS, selon mon format pour pouvoir la réutiliser sour Excel. + Ouverture de ce fichier pour controle et modifications.

Cela me plait bien pour l’instant. Je peux me lancer dans ma liste de sociétés à analyser (~360 pour l’instant)
Je peux partager le script sur Gthub si intérêt.
En tous cas, je suis agréablement surpris de la puissance de Python pour faire cela, avec la librairie Pandas. Ca évite les bons vieux open/close et autres boucles for pour lire les lignes et les stocker dans des structures intermédiaires. J’avais peur de devoir faire cela, mais avec Pandas, pas besoin.

Hors ligne Hors ligne

 

#42 14/06/2019 10h58

Membre (2017)
Réputation :   15  

INTP

Bonjour !

C’est toute la puissance de Python en effet, ce n’est pas pour rien qu’il domine désormais un peu tout en data science. Je voulais apprendre le R à un moment pour faire mes analyses, mais finalement je n’y ai jamais vraiment touché, Python ayant tout ce qu’il faut…

Je pense que votre script peut intéresser du monde ici oui, à vous de voir. La seule chose à éviter de distribuer, ce sont les scrapers (et vos accès/tokens, bien entendu).

Quoiqu’il en soit tenez nous au courant ! smile

Hors ligne Hors ligne

 

#43 14/06/2019 19h26

Membre (2016)
Réputation :   28  

Bonjour Franck,

Ok, du coup mis le script sur Github, il n’y a rien de critique pour l’instant
GitHub - ffoucaud0212/istoan: I Analyze Stocks easily with istoan

C’est assez artisanal
Je fait d’abord -t <ticker> -u pour télécharger les fichiers
Puis les autres options pour archiver, concatener et générer un Excel.
Ensuite, je m’appui sur un fichier excel "template" pour copier manuellement le formatage et les formules.

Les axes d’amélioration à travailler
1. Le téléchargement automatique de MorningStar (Optionnel, je n’ai pas envie d’être pisté)
2. La gestion des formules: dans Python ou rester dans Excel (via une macro)? Dans Python, il faudra alors que je travaille sur un moyen de mettre à jour les calculs (en bleu) à partir d’une feuille déjà remplie. Dans Excel, il faut que je trouve un moyen de mettre à jour les données (en vert) sans casser les cellules de calculs.
3. La mise à jour des données et formules quand il faudra ajouter "2019" l’année prochaine
4. Un moyen de recopier les 10 premières lignes dans un Google Sheet
5. Scrapper internet pour récupérer la valorisation, et calculer P/S P/B (Optionnel, je n’ai pas envie d’être pisté, et xlsPortfolio peut aider)

Une fois que la base de données initiales sera constituée, j’utiliserai plutot les PDFs pour mettre à jour les données ou les vérifier et alors il me faudra prioritiser les points 2 et 3.

Hors ligne Hors ligne

 

#44 17/06/2019 17h44

Membre (2016)
Réputation :   28  

Bonjour,
Pour info, je continue mes explorations d’automatisation avec Python. Et j’ai ajouté un script au projet précédent. screen_ms.py.

Objectif: Extraire les données d’une liste de sociétés sur un critère (Revenus, Dividendes etc…) pour pouvoir faire des calculs de variations sur 1 an et 10 ans.

Prérequis: Avoir les différents fichiers CSV MorningStar en local, téléchargés en mode "descending".

Maintenant j’ai un script qui extrait plusieurs critères sur une société, et un autre qui extrait un critère sur plusieurs sociétés.
Il me reste à faire une combinaison des deux pour une analyse plus poussée, multi-critères.

Hors ligne Hors ligne

 

#45 10/08/2019 14h25

Membre (2019)
Réputation :   0  

Bonjour

Mes travaux avancent peu à peu, je continue mon projet en python.
J’ai mis en standby la représentation graphique et me concentre actuellement sur le backtest - je regarde le passé pour prévoir l’avenir.
Ce sujet n’est pas simple et je suis curieux de savoir si vous avez trouvé des méthodes auxquelles je n’aurais pas penser pour faire face aux contraintes que je rencontre.
En effet plus j’avance et plus les calculs à effectuer sont longs.
Je ne suis pas programmeur de métier et suis conscient mon code contient forcément des lacunes mais je me dis qu’ un bon conseil pourrait me permettre d’orienter es travaux dans la bone direction.

Voici les différents sujets:

- le découpage temporel des fichiers de cotations. J’ai plus de 10 ans d’archive, j’ai choisi de créer des fichiers annuels. Est-ce la solution que vous avez retenu ? Avez-vous en tête d’autres découpages ?

- L’utilisation d’itertuples dans panda:
J’utilise actuellement itertuples car ça fonctionne bien et j’arrive aux résultats escomptés.
Est-ce que itertuples utilise beaucoup de ressources ? Y a-t-il d’autres solutions simples demandant moins de ressources ?

- du fait de mon statut de non professionnel de la programmation je me suis orienté vers de la programmation fonctionnelle. J’ai quelques notions en programmation objet mais ne les utilise pas pour le backtest.
Pensez-vous que la programmation orientée objet est plus adaptée à la réalisation de backtest ?

- je n’ai pour le moment qu’un seul ordinateur dédié au backtest et à la partie dynamique. Conseillez-vous de séparer les deux ?

Dernier point pour @Franck Chalmers, j’ai bien aimé le concept de l’univers d’Astérix.
J’ai donc choisi aussi d’en créer un, mes fonctions s’appellent:
- suricate
- hive/ruche
- squirrel/écureuil
- bumble bee/bourdon, …

Bon codage à tous et/ou bonnes vacances

Hors ligne Hors ligne

 

#46 10/08/2019 14h42

Membre (2016)
Top 20 Entreprendre
Top 20 Immobilier locatif
Réputation :   264  

ISTJ

Je pense que vous posez des questions qui ne sont pas forcément les bonnes (la réponse est "non" ou "sans intérêt", au fait).

Pourquoi récrire votre propre code de backtest ? Il existe des bibliothèques qui font ça bien, par exemple bt/ffn. Je suis certain qu’il y en a plein d’autres. Écrire correctement ce genre de chose est difficile.

Sur la performance, ma principale question pour vous est pourquoi pensez-vous avoir besoin de plus de performance. L’intérêt quand c’est lent c’est que vous pouvez faire moins de backtests donc vous avez moins de risque d’overfit. smile

Dernière modification par sven337 (10/08/2019 14h44)

En ligne En ligne

 

#47 10/08/2019 15h53

Membre (2017)
Réputation :   15  

INTP

Bonjour !

Content de voir que vous avancez, pour ma part je ne fais que de la maintenance faute de temps, aussi bien pour le code (les mises à jour de pandas/matplotlib cassent parfois des choses) que pour les données (les scrapers ont parfois besoin d’être modifiés pour coller aux évolutions des sites, ainsi va la vie) donc rien de bien intéressant à poster de mon côté.

Je me suis heurté aux mêmes écueils pour Pronostix, mon programme de backtest, je vais donc répondre à vos questions même si je rejoins l’avis de sven337 : il vaudrait sans doute mieux utiliser une lib existante et maintenue, pour bénéficier du travail d’optimisation et de debug collectif.

Mes données (29 ans de cours, sur les seules actions) sont dans une base Postgresql, donc le découpage des fichiers de cotations importe peu. Si vous faites un read_csv() pour chaque fichier ça peut ralentir tout votre processus, en tout cas ça sera beaucoup plus lent et compliqué que de lire depuis une base de données quelconque.

La méthode la plus rapide que je connaisse pour itérer sur une dataframe est for row in df.itertuples(name=None):, mais on perd les noms des colonnes au passage. Rien d’insurmontable, mais ça rend le code dépendant à l’ordre et au nombre des colonnes.

Pour gagner en vitesse d’exécution il y a bien PyPy - Welcome to PyPy mais il vaut mieux bien maîtriser Python avant de s’y lancer, il y a souvent des soucis de compatibilité ou des différences comportementales. Le jeu en vaut toutefois la chandelle, sur des programmes qui doivent faire beaucoup d’opérations sur une durée un peu longue le JIT est efficace.

Pas de raison qu’un type de programmation soit plus adaptée qu’un autre, dans un cas on allouera des classes dans l’autre on empilera des appels de fonctions. Pronostix est orienté objet (une classe Broker, une classe Portfolio, une classe Strategy de laquelle sont dérivées une classe par stratégie testée…), et n’irait pas plus vite en fonctionnel.

Un truc qui peut faire la différence, par contre : toujours utiliser les opérations vectorisées de pandas/numpy au lieu de faire les calculs soi même, typiquement pour le calcul des indicateurs techniques comme les moyennes mobiles.

Tant que le CPU ou le disque de votre machine n’est pas à 100%, vous ne gagnerez rien à scinder vos calculs sur deux machines à part de nouveaux problèmes (le réseau va ajouter de la latence, par exemple).

sven337 a écrit :

Pourquoi récrire votre propre code de backtest ? Il existe des bibliothèques qui font ça bien, par exemple bt/ffn. Je suis certain qu’il y en a plein d’autres.

Je vais compléter en citant zipline, qui est assez réputée. Quantopian fournit également tout un environnement de backtest accessible et performant, je vous conseille d’y jeter un oeil.

sven337 a écrit :

Écrire correctement ce genre de chose est difficile.

Très difficile ! D’ailleurs en parlant d’overfit, attention à ne pas inclure par mégarde de l’information du futur dans votre jeu d’essai ou vos calculs, ça arrive plus vite qu’on ne le croit et c’est aussi difficile à détecter qu’à corriger… ça m’est arrivé sur un réseau de neurones qui avait des résultats trop beaux pour être vrais, comme c’est souvent le cas wink

Have fun !

Hors ligne Hors ligne

 

#48 07/09/2019 22h38

Membre (2016)
Réputation :   28  

De mon côté, je continue à explorer Python pour avoir tout sous la main pour faire de l’analyse fondamentale.
J’ai pu développer les principaux "screeners" comme je voulais.
Maintenant, il faut entre autres que je vérifie mes calculs de ROIC, et prendre en compte les nouveaux formats Excel de MorningStar, ou trouver des alternatives.

Je viens juste de finaliser une IHM en wxPython qui inclu des threads pour ne pas bloquer lorsque la génération Excel est lancée pour un grand nombre de sociétés.
Assez content de la tournure que cela prend.

[img=200*200]https://www.investisseurs-heureux.fr/uploads/9897_wxstockscreen.png[/img]

Dernière modification par Swingueur (07/09/2019 22h45)

Hors ligne Hors ligne

 

#49 10/09/2019 20h47

Membre (2015)
Réputation :   3  

Comme beaucoup ici, je me débrouille en Python/Pandas même si je ne l’utilise pas (encore) pour mes investissements, préférant google sheets qui est assez fluide, visuel et très pratique pour du multiplateforme.

Pour ceux qui ont connu feu-etf360, j’aimerais développer un algorithme pour déterminer un pool de tracker pour suivre une allocation cible, et les transactions à effectuer pour la respecter (on verra plus tard pour du momentum…). C’est un projet pour lequel je compte publier les sources une fois que j’aurais quelque chose d’opérationnel.

Pour cela, j’ai besoin de données d’entrée :
* les cours des trackers : pas trop dur à trouver
* la composition des trackers par entreprises/pays/secteur : il y a quelques infos sur les sites de certains émetteurs de tracker mais une API ou un site regroupant les infos serait préférable.

J’ai vu que certains d’autres vous utilisaient morningstar. Sur le site j’arrive bien à accéder aux csv à la main mais je n’arrive pas à en extraire le lien… Idem pour l’allocation : je peux y accéder à la main mais je n’ai pas identifié comment télécharger le CSV (j’aimerais autant que possible limiter le scrapping).

Hors ligne Hors ligne

 

#50 11/09/2019 07h01

Membre (2016)
Réputation :   28  

Au départ, j’avais initié un fichier sur Google, et meme en local, mais c’était beaucoup de tâches manuelles, et de copier-coller. Créer une base de données ainsi aurait été trop contraignant, d’où l’idée d’utiliser Pandas pour repackager des tables de données rapidement.

De quel CSV parlez-vous exactement ? pour ma part, je fait en manuel pour le moment, python m’aidant à ouvrir les pages web directment à partir des tickers, c’est mieux que rien, ce qui permet d’enchainer avec un archivage des fichiers via Python.
En regardant le code source des pages MS, j’étais tombé sur une URL, mais il y a aussi du Javascript. J’ai fouillé les forums et suis tombé sur des scripts ou des librairies trop obscures pour moi, donc je n’ai pas poursuivi depuis. Si vous trouvez, je suis preneur.

Hors ligne Hors ligne

 

Information Nouveau venu dans cette longue discussion ?
Flèche Consultez une sélection des messages les plus réputés en cliquant ici.


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

Pied de page des forums