S&P500 Market Analysis Jean‐Philippe Rochette et Geneviève Dostie G Plan de match • • • • • Outils et logiciels choisi Présentation du projet Structure du projet Problèmes survenus Ce qui pourrait être amélioré 2 G Outils et logiciels • MySql 5.7 • Pycharm • • • Qt Creator • • PyQt4 Python 3.4 IDE multiplate‐forme pour construire interface graphique GitHub 3 G Le projet • Développer une application pour tester une stratégie d’investissement à la bourse 4 G Objectifs • Concevoir un interface pour faire des simulations boursières • • reproduire l’achat et la vente d’actions durant une période donnée en fournissant des critères d’achat et de vente Concevoir un interface Stock Screener de la journée courante • Trier et filtrer l’information selon des critères sélectionnés 5 G Hypothèse avancée • Investir dans des grosses compagnies: • • • • dont la capitalisation boursière n’est pas surévaluée dont les actions ont grandement baissées dans les derniers mois qui font des profits et donnent des dividendes Respecter la règle du « buy low/sell high », il est avancé que cette stratégie a de bonne chance de battre la bourse 6 Exigences à la réussite du projet • Hypothèse: il est possible d’aller chercher les informations financières pour les compagnies du S&P500 • • • • MorningStar • Données historiques Google Finance • Journée courante en temps réel Yahoo Finance • • Journée courante avec délai Données historiques Objectif: Aller chercher les données les plus à jour lors de l’ouverture de l’application 7 G Structure du projet • Acquisition des données • Interface Qt • Simulation 8 JP Acquisition des données JP Problèmes : Acquisition des données historiques • Avec MorningStar • Les requêtes ne retournaient pas toujours un CSV • • Comportement aléatoire Entre Septembre et Octobre • • une trentaine de compagnies ne retournaient pas le CSV que l’on voulait Maintenant, il semble de nouveau fonctionnelle 10 JP Solution: Acquisitions des csv • Solution #1 • Utiliser API Yahoo Finance avec Python • • Temps d’acquisition des données trop lent Solution final: • Colliger les données dispo dans la BD pour le fournir directement au client 11 JP Problème: CSV non standard • Avec MorningStar seulement • Conversion des types de données pour l’insertion dans la base de données • Exemple de problèmes • • • NaN format des milliers (ex: « 1,234 ») Typage (ex: float, int) 12 JP Problème: Biais du survivant • Difficulté à obtenir une liste du S&P500 dans le temps • Package finsymbols de python • • Liste de Wikipédia à jour Ensemble de données trop optimiste 13 JP Problème: Prix de ajusté • Définition: Adjusted Close • • • Solution: • • Division des actions (Stock Splits) Distribution de dividendes Faire comme les données historiques et de pré‐charger à une date fixe Solution optimal: • Détecter la mise à jour de « Adjusted Close » pour une compagnie 14 G Interface Qt L’interface graphique • Qt • • • • API orienté objet Langage de programmation: C++ Bibliothèque pour création d’interface Qt Qt Designer • • Utilitaire graphique de création d'interfaces Qt Plateforme de programmation 16 Problème avec Qt • Apprendre le langage • Connexion des widgets • • Signal et Slots Communication de l’interface avec les fonctions Python • Communication C++ avec fonction Python 17 G Solution: PyQt4 et pyuic4 • PyQt4 • Bibliothèque graphique Python • Lien entre bibliothèque Qt (en C++) et Python • Utiliser Qt Creator • Pyuic4 • Transformer interface graphique de Qt Creator en fichier Python 18 Stock Screnner 19 Portfolio Manager 20 Simulator 21 JP Simulation JP Market • Fournir des informations pour le jour courant • Quotidienne et historique • Permet d’itérer une journée ouvrable à la fois • Problème d’optimisation rencontré • Objectif: Obtenir une réponse rapide à notre requête 23 JP Portfolio • Conserve nos avoirs au moment présent de la simulation • • Monnaie et les actions détenues Fait la vente et l’achat d’action sur le marché 24 JP Broker • • • Conserve des données dans le temps Fait le pont entre Market et Portfolio Conserve une commission sur chaque transaction 25 G Filters • Objet permettant de réduire une liste de compagnie • Pour la vente • • Retire les compagnies du Portfolio que l’on ne veut pas vendre Pour l’achat • Retient les compagnies qui s’échange sur le Market que l’on désire acheter 26 G Difficulté du projet • Connaissance en finance • Apprentissage de nouveaux outils • Ex: Qt, pandas 27 G Améliorations futures • • Mise à jour automatique des données Serveur pour BD • le client ait les données les plus à jour • • Avoir une liste des S&P500 dans le temps • • Simulation qui utilise le Portfolio Manager Avoir un graphique de simulation qui se met à jour durant la simulation Afficher un rapport de la simulation 28