Dashboard interactif d'analyse de marché utilisant une convergence de modèles quantitatifs (Machine Learning et statistiques) pour générer des opinions de marché structurées.
Ceci n'est pas un conseil en investissement. Les performances passées ne préjugent pas des performances futures. Cette application est fournie à titre éducatif et expérimental uniquement. Consultez un conseiller financier professionnel avant toute décision d'investissement.
| Modèle | Type | Objectif |
|---|---|---|
| XGBoost | ML Classification | Prédire la direction (Hausse/Baisse) |
| Random Forest | ML Classification | Prédire la direction (Hausse/Baisse) |
| ARIMA | Série Temporelle | Prévision du prix cible |
| GARCH | Volatilité | Estimation du risque |
| Prophet | Tendance + Saisonnalité | Détection tendances et cycles |
- Tendance: SMA (20, 50), EMA (12, 26)
- Momentum: RSI (14), MACD (12, 26, 9), Stochastic, ROC, ADX
- Volatilité: Bandes de Bollinger (20, 2), ATR, Keltner Channels
- Volume: OBV, VWAP, MFI, CMF, Force Index, Volume Ratio
- VWAP: Volume Weighted Average Price
- MFI: Money Flow Index (surachat/survente)
- CMF: Chaikin Money Flow (pression achat/vente)
- Volume Ratio: Détection squeeze/climax
- 1 chandelier: Doji, Marteau, Hanging Man, Shooting Star, Marubozu
- 2 chandeliers: Engulfing, Harami, Piercing Line, Dark Cloud Cover
- 3 chandeliers: Morning/Evening Star, Three Soldiers/Crows
- Valuation: P/E, P/B, PEG, EV/EBITDA
- Profitabilité: Marges, ROE, ROA
- Croissance: Revenue growth, Earnings growth
- Santé financière: Debt/Equity, Current ratio
- Objectifs analystes: Cible de prix, recommandations
- Scores composites: Value, Quality, Growth, Health (0-100)
- Lag Features: Retours sur 1, 2, 3, 5, 10, 20 jours
- Rolling Statistics: Moyenne, std, skew, kurtosis (5, 10, 20 jours)
- Scores Techniques Composites:
- Trend Score (tendance)
- Momentum Score (momentum)
- Volume Score (flux de volume)
- Volatility Score (régime de volatilité)
- Overall Technical Score (composite global)
- Time Features: Jour de la semaine, mois, fin de trimestre
- Total Features: 100+ features pour les modèles ML
Vote pondéré pour générer le signal final (voir calculate_weighted_vote dans src/analysis.py) :
- XGBoost : 25 % du score combiné
- Random Forest : 25 %
- ARIMA : 20 % (exclu du dénominateur si le modèle échoue)
- Prophet : 30 % (idem si échec)
Les scores ML sont ajustés par la précision sur le jeu de test. Le résultat est renormalisé sur la somme des poids des modèles effectivement utilisés.
Volatilité (GARCH) : le modèle GARCH sert à estimer le régime de volatilité (faible / moyen / élevé). Ce niveau ne vote pas comme ARIMA ou Prophet ; il applique un modificateur sur la conviction finale (réduction plus forte si volatilité élevée).
Signaux possibles:
- 🚀
STRONG_BUY- Achat Fort - 📈
BUY- Achat - ⏸️
HOLD- Attente/Neutre - 📉
SELL- Vente - 💥
STRONG_SELL- Vente Forte
- Python 3.12+ (aligné avec
pyproject.tomlet l’image Docker) - UV (gestionnaire de paquets)
# Installer les dépendances avec UV
uv sync
# Lancer l'application
uv run streamlit run app.py
# Ou alternativement
python main.pyGénérez des rapports détaillés pour intégration avec n8n, Zapier, ou autres outils d'automatisation.
uv sync# Analyser un ticker avec affichage Rich
uv run python cli.py analyze AAPL --horizon 7 --format json --display
# Rapport JSON (pour API/intégration)
uv run python cli.py analyze AAPL --horizon 7 --format json --output rapport.json
# Rapport Markdown (pour lecture humaine)
uv run python cli.py analyze MSFT --horizon 14 --format markdown
# Rapport texte (pour logs)
uv run python cli.py analyze BTC-USD --horizon 30 --format text
# Mode silencieux (uniquement la sortie)
uv run python cli.py analyze AAPL -q --format json
# Analyse batch de plusieurs tickers
uv run python cli.py batch -t AAPL -t MSFT -t GOOGL -f json
# Lister les modèles utilisés
uv run python cli.py models| Option | Description | Défaut |
|---|---|---|
ticker |
Symbole du titre (obligatoire) | - |
--period, -p |
Période de données (6mo, 1y, 2y, 5y) | 2y |
--horizon, -H |
Horizon de prédiction (1, 7, 14, 30 jours) | 7 |
--format, -f |
Format de sortie (json, markdown, text) | json |
--output, -o |
Fichier de sortie | stdout |
--quiet, -q |
Mode silencieux | False |
--display, -d |
Afficher résumé Rich | False |
| Commande | Description |
|---|---|
analyze |
Analyser un ticker spécifique |
batch |
Analyser plusieurs tickers en batch |
models |
Lister tous les modèles utilisés |
Workflow n8n exemple:
- Noeud "Execute Command":
uv run python cli.py analyze {{ $json.ticker }} --horizon 7 --format json --quiet- Noeud "Function" - Parser le JSON:
const report = JSON.parse($input.first().json.stdout);
return {
ticker: report.metadata.ticker,
signal: report.summary.signal,
confidence: report.summary.confidence,
action: report.recommendation.action,
risk: report.recommendation.risk_level,
price: report.metadata.current_price,
target: report.price_info.price_target_arima
};- Noeud "Switch" - Router selon le signal:
BUY→ Notification Telegram/EmailSELL→ Alerte de venteHOLD→ Log dans Google Sheets
| Code | Signification |
|---|---|
0 |
Succès (HOLD ou BUY) |
2 |
Attention (SELL/STRONG_SELL) |
{
"metadata": {
"ticker": "AAPL",
"generated_at": "2026-03-24T19:50:52",
"horizon_days": 7,
"current_price": 252.61
},
"summary": {
"signal": "HOLD",
"signal_emoji": "⏸️",
"confidence": 25.65,
"summary_text": "..."
},
"model_predictions": {
"xgboost": {"direction": "Bullish", "confidence": 0.59},
"random_forest": {"direction": "Bullish", "confidence": 0.61},
"arima": {"direction": "Bullish", "price_target": 252.75},
"prophet": {"direction": "Bearish", "all_horizons": {...}},
"garch": {"volatility_level": "Medium"}
},
"technical_indicators": {
"rsi_14": 35.47,
"macd": -3.91,
"sma_20": 258.28
},
"recommendation": {
"action": "HOLD",
"risk_level": "Medium",
"suggested_position_size": "Moderate (3-5% of portfolio)",
"key_factors": [...],
"warnings": [...]
}
}bot-1/
├── app.py # Interface Streamlit
├── main.py # Point d'entrée
├── pyproject.toml # Configuration du projet
├── README.md # Documentation
└── src/
├── __init__.py
├── data.py # Fetching données & indicateurs
├── models.py # XGBoost & Random Forest
├── timeseries.py # ARIMA & GARCH
└── analysis.py # Agrégation & décision
- Entrer un Ticker: Saisissez le symbole (ex:
AAPL,BTC-USD,^GSPC) - Sélectionner la Période: Choisissez l'historique de données (6 mois à 5 ans)
- Choisir l'Horizon: Sélectionnez l'horizon de prédiction (1, 7, 14, ou 30 jours)
- Lancer l'Analyse: Cliquez sur le bouton pour exécuter tous les modèles
- Consulter les Résultats:
- Signal de trading avec code couleur
- Score de confiance (0-100%)
- Graphiques interactifs (Plotly)
- Prédictions Prophet par horizon (1 jour, 1 semaine, 2 semaines, 1 mois)
- Projection graphique avec intervalles de confiance
- Performance des modèles
- Analyse de volatilité
yfinance → Nettoyage → Indicateurs Techniques → Features
Features → XGBoost ──┐
→ RF ───────┼→ Vote Pondéré → Signal
→ ARIMA ────┤
→ Prophet ──┤
→ GARCH ────┘ (modificateur)
| Condition | Signal |
|---|---|
| ML Hausse + ARIMA Hausse + Volatilité Faible | STRONG_BUY |
| ML Hausse + ARIMA Hausse | BUY |
| Conflit modèles ou Volatilité Élevée | HOLD |
| ML Baisse + ARIMA Baisse | SELL |
| ML Baisse + ARIMA Baisse + Volatilité Faible | STRONG_SELL |
| Catégorie | Tickers |
|---|---|
| Actions US | AAPL, MSFT, GOOGL, TSLA, NVDA |
| Crypto | BTC-USD, ETH-USD, SOL-USD |
| Indices | ^GSPC (S&P 500), ^NDX (Nasdaq), ^DJI (Dow Jones) |
| ETF | SPY, QQQ, VTI, IWM |
# Sauvegarder les modèles entraînés
import joblib
joblib.dump(ml_model, 'models/xgb_model.pkl')
# Charger en production
ml_model = joblib.load('models/xgb_model.pkl')Avantages:
- Réduction du temps de réponse
- Cohérence des prédictions
- Possibilité d'entraîner sur plus de données
Intégrer une API de news financières pour ajouter le sentiment comme feature:
- NewsAPI: Actualités financières
- Twitter/X API: Sentiment social media
- AlphaVantage: Sentiment analysis
# Exemple: Ajouter le sentiment comme feature
df['news_sentiment'] = get_sentiment_score(ticker)Implémenter un module de backtesting pour évaluer la performance historique:
def backtest_strategy(signals, prices, initial_capital=10000):
# Simuler les trades basés sur les signaux
# Calculer: Sharpe ratio, Max drawdown, CAGR
pass- Redis: Cache des prédictions
- PostgreSQL: Stockage historique des signaux
- Feature Store: Centraliser les features calculées
Utiliser Optuna ou GridSearchCV pour optimiser:
import optuna
def objective(trial):
params = {
'max_depth': trial.suggest_int('max_depth', 3, 10),
'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3),
'n_estimators': trial.suggest_int('n_estimators', 50, 200)
}
# Évaluer avec validation croisée
return accuracy- Docker: Containerisation
- Streamlit Cloud: Hébergement gratuit
- AWS/GCP: Déploiement scalable
FROM python:3.12-slim
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir uv && uv sync --frozen
CMD ["streamlit", "run", "app.py", "--server.address", "0.0.0.0"]- Prometheus/Grafana: Monitoring des performances
- Alertes: Discord/Slack webhook pour les signaux forts
- Logging: Structured logging avec ELK stack
- Prophet: Modèle de tendance supplémentaire
- LSTM: Deep learning pour séries temporelles
- Correlation Matrix: Analyse sectorielle
- Portfolio Optimization: Allocation d'actifs
- Données Yahoo Finance: Peut avoir des délais ou indisponibilités
- Entraînement à chaque requête: Lent pour les grands datasets (utilisez le cache)
- Pas de données fondamentales: Seulement analyse technique
- Classification binaire: Ne prédit pas l'amplitude du mouvement
- Vérifiez le symbole (ex:
AAPLpasApple) - Certains ETF européens utilisent
.PA(ex:CAC.PA)
- Augmentez la période de données
- Certains tickers récents n'ont pas assez d'historique
uv sync --upgradeVoir le guide complet dans DOCKER_SETUP.md.
# Configuration
cp .env.example .env
# Éditer .env avec vos credentials
# Lancer les services
docker-compose up -d --build
# Accéder à n8n
# http://localhost:5678 (admin / votre_mot_de_passe)| Fichier | Format | Destinations |
|---|---|---|
quant-bot-json-email.json |
JSON → HTML | Email, Telegram |
quant-bot-markdown-email.json |
Markdown → HTML | Email, Slack, Discord |
Ce projet est fourni à titre éducatif. Utilisation à vos risques et périls.
Les améliorations sont les bienvenues:
- Nouveaux indicateurs techniques
- Modèles de ML additionnels
- Optimisations de performance
- Tests unitaires
Développé avec ❤️ pour la communauté Fintech