StockMarket
Aucun outil ne combinait suivi de portefeuille et backtesting avec transparence. J'ai construit le mien — analyse statistique, 7 indicateurs techniques, stratégie mean-reversion validée.
Problème
Les outils existants forcent à choisir : soit un tracker de portfolio (Yahoo Finance, Ghostfolio), soit un outil de backtesting (Backtrader, QuantConnect). Aucun ne combine les deux avec de la transparence sur les modèles.
Solution
Un outil personnel qui combine suivi de portefeuille, analyse statistique et backtesting de stratégies — le tout dans une seule application. L'objectif : prendre des décisions d'investissement basées sur des données, pas sur l'intuition.
Architecture
| Composant | Technologie |
|---|---|
| Langage | Python 3.12+ |
| Interface | Streamlit + Plotly |
| Base de données | SQLite + SQLModel |
| Données marché | yfinance (historique) + Finnhub (temps réel) |
| Indicateurs | ta (SMA, EMA, RSI, MACD, Bollinger, ATR, OBV) |
| Tests | pytest (29 tests) |
| Linter | ruff |
Résultats
- Suivi de portefeuille : CRUD achats/ventes, holdings, P&L avec prix temps réel
- Analyse statistique : rendements, volatilité, Sharpe ratio, max drawdown, corrélations
- Indicateurs techniques : 7 indicateurs calculés automatiquement
- Stratégie Mean-Reversion + Breakout : backtesting avec optimisation grid search et validation train/test
- Dashboard Streamlit : 5 pages interactives (Portfolio, Analyse, Comparer, Stratégie, Transactions)
Stratégie de trading
La stratégie repose sur des bandes d'écart-type autour d'une moyenne glissante :
upper_2 = μ + a₂·σ → BUY (breakout haussier)
upper_1 = μ + a₁·σ → SELL (take profit)
lower_1 = μ - a₁·σ → BUY (buy the dip)
lower_2 = μ - a₂·σ → SELL (stop loss)
Les paramètres optimaux (a₁, a₂, window) sont trouvés par grid search sur une période d'entraînement, puis validés sur une période de test pour éviter l'overfitting.
Ce que j'ai appris
- Structurer une application data Python (séparation data / analysis / viz)
- Implémenter et valider un backtest sans tomber dans l'overfitting
- Utiliser Streamlit pour du prototypage rapide de dashboards interactifs
- Intégrer plusieurs sources de données financières (yfinance, Finnhub)