Projets POO - 2024-2025
Cours
Fondamentaux
Projet : Framework de Backtesting de Stratégies d’Investissement
Description du projet
Conception d’un framework de backtesting permettant d’évaluer et de comparer différentes stratégies d’investissement sur des données historiques. Ce framework vous aidera à implémenter, tester et analyser diverses stratégies de trading, en fournissant des métriques de performance et des visualisations pour faciliter la prise de décision. L’objectif est de créer un outil flexible et extensible qui permet aux utilisateurs de développer et d’évaluer leurs propres stratégies d’investissement.
Consignes
- Données :
- Le framework doit accepter des données d’entrée au format CSV ou Parquet.
- Les étudiants sont responsables de fournir leurs propres données. Ils peuvent utiliser des données réelles (par exemple, crypto-monnaies, actions, ou autres actifs financiers) ou générer des données synthétiques.
- Le framework doit pouvoir accepter les données soit sous forme de DataFrame pandas, soit comme un chemin vers un fichier CSV ou Parquet.
- Le framework n’a pas besoin de récupérer les données lui-même ; elles doivent être fournies par l’utilisateur.
- Implémentation du backtester :
- Créez une classe abstraite
Strategy
avec les contraintes suivantes :- Méthode obligatoire :
get_position(historical_data, current_position)
- Méthode optionnelle :
fit(data)
(par défaut, cette méthode ne fait rien si elle n’est pas implémentée)
- Méthode obligatoire :
- Permettez la création de stratégies soit par héritage de la classe abstraite, soit par un décorateur pour les stratégies simples ne nécessitant que
get_position
. - Implémentez une classe
Backtester
qui :- Est instanciée avec une série de données d’entrée
- Possède une méthode pour exécuter le backtest en prenant une instance de
Strategy
- Renvoie une instance de la classe
Result
après l’exécution du backtest
- Implémentez une classe
Result
pour afficher et visualiser les résultats du backtest, avec différentes méthodes pour le plotting et l’affichage des statistiques de performance, incluant (mais non limité à) :- Performance totale et annualisée
- Volatilité
- Ratio de Sharpe
- Drawdown maximum
- Ratio de Sortino
- Nombre de trades
- Pourcentage de trades gagnants
- Ajoutez une fonction
compare_results(result_1, result_2, ...)
pour comparer les résultats de différentes stratégies. - Implémentez la possibilité de choisir le backend pour les visualisations (matplotlib par défaut, avec options pour seaborn et plotly).
- Permettez de spécifier une fréquence de rééquilibrage pour chaque stratégie.
- Créez une classe abstraite
- Fonctionnalités du framework :
- Permettez à l’utilisateur de définir et de tester facilement de nouvelles stratégies.
- Offrez la possibilité de comparer plusieurs stratégies entre elles.
- Implémentez des fonctionnalités pour gérer les frais de transaction et le slippage.
- Le framework doit permettre de créer et de tester des stratégies sur un ou plusieurs actifs simultanément.
- Structuration du code :
- Adoptez une approche orientée objet pour la structure de votre projet.
- Divisez votre code en modules et classes distincts pour chaque fonctionnalité.
- Commentez et documentez votre code pour faciliter sa compréhension.
- Créez un fichier
pyproject.toml
pour permettre l’installation via pip. - Incluez des tests unitaires et d’intégration pour votre code.
- Exemple d’utilisation :
- Fournissez un notebook Jupyter (ou équivalent) qui démontre l’utilisation du package.
- Ce notebook doit inclure un exemple complet d’utilisation du framework, de la création d’une stratégie à l’analyse des résultats.
- Assurez-vous que l’exemple montre les principales fonctionnalités du framework et inclut des visualisations des résultats.
Critères d’évaluation
- Structure du code :
- Organisation et modularité du code.
- Utilisation appropriée des concepts de programmation orientée objet vus en cours.
- Clarté et propreté du code (pas de redondance, noms de variables explicites, etc.).
- Documentation :
- Présence de commentaires explicatifs.
- Qualité et clarté de la documentation fournie (par exemple, docstrings pour les classes et méthodes).
- Fonctionnalités :
- Implémentation correcte du backtester et des différentes composantes du framework.
- Flexibilité et extensibilité du framework pour accommoder diverses stratégies.
- Capacité à gérer des stratégies sur un ou plusieurs actifs.
- Qualité des visualisations et des résultats produits.
- Tests :
- Couverture et pertinence des tests unitaires et d’intégration.
- Installation et déploiement :
- Configuration correcte du fichier
pyproject.toml
. - Facilité d’installation et d’utilisation du package.
- Configuration correcte du fichier
- Exemple d’utilisation :
- Qualité et exhaustivité du notebook d’exemple fourni.
- Clarté des explications et pertinence des exemples choisis.
Conseils
- Commencez par implémenter des stratégies simples (par exemple, une moyenne mobile croisée) pour tester votre framework avant de passer à des stratégies plus complexes.
- Pensez à l’efficacité de votre code, surtout pour les backtests sur de grandes quantités de données historiques.
- L’utilisation de bibliothèques comme pandas, numpy, et scipy peut grandement faciliter le traitement des données et les calculs.
- L’utilisation de ChatGPT ou d’autres outils d’IA est autorisée, mais assurez-vous de comprendre et de personnaliser le code généré.
Groupes et remise du projet
- Vous travaillerez en groupes de 4 personnes. Tous les groupes auront le même sujet.
- Le projet doit être hébergé sur GitHub.
- Envoyez un e-mail contenant :
- Les noms des membres du groupe
- Le lien vers le dépôt GitHub du projet