Dashboard Streamlit orienté quant/finance pour :
- analyser un actif unique (actions/indices/crypto) ;
- construire et backtester un portfolio multi-actifs ;
- comparer plusieurs stratégies simples (SMA, RSI, MACD, Bollinger, Golden Cross, Buy & Hold) ;
- générer des prédictions (modèles simples + intervalles d’incertitude) ;
- produire un rapport journalier via un script
cron/.
Le projet utilise principalement yfinance pour les prix historiques et Streamlit pour l’interface.
- Présentation du projet, des pages, et des modules.
- Choix ticker (actions US, indices, crypto)
- Prix « live » (dernier prix connu via yfinance)
- Téléchargement et affichage de données historiques (OHLC)
- Application d’une stratégie au choix :
- Buy & Hold
- SMA (moyennes mobiles)
- RSI
- MACD
- Bollinger Bands
- Golden Cross
- Comparaison Stratégie vs Buy & Hold
- Tableau de métriques (Sharpe, Sortino, Volatilité annualisée, Max Drawdown)
- Comparaison multi-stratégies + tableau de synthèse
- Module “AI reco” : recherche de meilleurs paramètres (optimisation simple, ex. maximiser Sortino)
- Création d’un portefeuille (montant par ticker, fusion des doublons, égal-pondération possible)
- Construction d’un « pseudo-actif » portfolio (série Close = valeur du portefeuille)
- Fenêtre globale + segments non chevauchants (périodes d’entrée/sortie)
- Backtest Buy & Hold portfolio vs stratégies sélectionnées
- Graphiques d’équity “gated/segmentée” + métriques (Sharpe/Sortino/Vol/MaxDD/Perf)
- Génère un rapport texte par ticker (dans
cron/data/) - Exemple de planification dans
cron/crontab.txt
Python-Git-Linux-for-Finance/
├── app.py # Page d'accueil Streamlit
├── pages/
│ ├── 2_Single_Asset.py # Analyse actif unique
│ └── 3_Portfolio.py # Analyse portefeuille
├── modules/
│ ├── data_loader.py # Chargement prix (yfinance) + cache streamlit
│ ├── preprocessing.py # Nettoyage/slicing dates, equity “gated”
│ ├── strategy_single.py # Stratégies + métriques (Sharpe/Sortino/…)
│ ├── plots.py # Graphiques plotly pour équity/segments
│ ├── prediction.py # Prédictions pour actif unique (RF/linéaire + CI)
│ ├── portfolio.py # Construction portfolio + segments
│ ├── predictions_portfolio.py # Prédictions adaptées au portfolio
│ └── ai_reco.py # Reco paramètres (grid simple, ex. Sortino)
├── .streamlit/
│ ├── config.toml # Theme + server.runOnSave
│ └── secrets.toml # ⚠️ secrets (à ne pas committer)
├── cron/
│ ├── daily_report.py # Script de rapport pour cron
│ ├── crontab.txt # Exemple de crontab
│ └── data/ # Rapports générés (exemples)
├── requirements.txt # Dépendances runtime (nettoyées)
└── requirements-dev.txt # Outils dev (optionnels)
- Python 3.10+ recommandé
- pip récent
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows PowerShell
python -m pip install -U pippip install -r requirements.txtOptionnel (dev) :
pip install -r requirements-dev.txtÀ la racine du projet :
streamlit run app.pyStreamlit détectera automatiquement les pages dans pages/.
Le fichier .streamlit/secrets.toml contient une clé FINNHUB_API_KEY.
- Recommandation : ne jamais versionner ce fichier dans Git.
- Ajoutez au
.gitignore(si pas déjà fait) :
.streamlit/secrets.tomlNote : dans l’état actuel du code, l’API Finnhub n’est pas utilisée (yfinance est la source principale).
Si vous n’utilisez pas Finnhub, vous pouvez supprimer la clé.
- Choisir un ticker (ex.
AAPL,^GSPC,BTC-USD) - Sélectionner une période (dates)
- Choisir une stratégie + paramètres
- Lire la perf, les métriques, comparer plusieurs stratégies
- Tester les prédictions (modèle linéaire / random forest)
- Ajouter 2+ tickers et un montant (€) par ticker
- Générer la série portfolio
- Définir une fenêtre globale + segments
- Comparer Buy & Hold vs stratégies
Lancer manuellement :
python cron/daily_report.pyRésultats : fichiers texte dans cron/data/ (un par ticker et par jour).
Planification (exemple) : voir cron/crontab.txt.
modules/data_loader.pyget_live_price(): récupère le dernier prix via yfinanceget_history()/load_historical_data(): OHLC + cache Streamlit
modules/preprocessing.py- normalisation/dédoublonnage dates
- slicing par fenêtre
- construction d’équity “gated” (afficher uniquement sur segments)
modules/strategy_single.py- stratégies (SMA/RSI/MACD/Bollinger/GoldenCross/B&H)
compute_metrics(): Sharpe, Sortino, Vol ann., MaxDD
modules/prediction.pyetmodules/predictions_portfolio.py- feature engineering simple
- split temporel
- modèles : linéaire + RF
- simulation/rollout + bandes d’incertitude
modules/plots.py- graphes plotly pour equity segmentée
modules/ai_reco.py- recherche simple (grid) des paramètres maximisant le Sortino
- yfinance renvoie des données vides
- vérifier le ticker
- tester une autre période
- relancer (limitations réseau / rate limits)
- erreurs de dates
- vérifier que vos segments sont non chevauchants
- vérifier que la fenêtre globale contient les segments
- Streamlit ne voit pas les pages
- garder
pages/à la racine du projet - nommage des fichiers
pages/2_*.py,pages/3_*.pyetc.
- garder
- Ne pas committer :
.streamlit/secrets.toml.venv/cron/data/si c’est du bruit (ou le garder mais en l’assumant)
- Éviter de versionner
.git/dans une archive/zip si l’objectif est le partage.
À définir (MIT / Apache-2.0 / …) selon votre usage.