Skip to content

About

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.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 Bot Analyste Quantitatif

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.

⚠️ Avertissement

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.

📋 Fonctionnalités

Modèles Implémentés

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

Indicateurs Techniques

  • 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

Indicateurs de Volume Avancés

  • VWAP: Volume Weighted Average Price
  • MFI: Money Flow Index (surachat/survente)
  • CMF: Chaikin Money Flow (pression achat/vente)
  • Volume Ratio: Détection squeeze/climax

Patterns de Chandeliers Japonais

  • 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

Données Fondamentales (via Yahoo Finance)

  • 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)

Feature Engineering pour ML

  • 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

Système de Décision

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

🚀 Installation et Démarrage

Prérequis

  • Python 3.12+ (aligné avec pyproject.toml et l’image Docker)
  • UV (gestionnaire de paquets)

Installation

# Installer les dépendances avec UV
uv sync

# Lancer l'application
uv run streamlit run app.py

# Ou alternativement
python main.py

🖥️ Interface de Commande (CLI)

Générez des rapports détaillés pour intégration avec n8n, Zapier, ou autres outils d'automatisation.

Installation

uv sync

Commandes principales

# 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

Options disponibles

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

Commandes

Commande Description
analyze Analyser un ticker spécifique
batch Analyser plusieurs tickers en batch
models Lister tous les modèles utilisés

Intégration n8n

Workflow n8n exemple:

  1. Noeud "Execute Command":
uv run python cli.py analyze {{ $json.ticker }} --horizon 7 --format json --quiet
  1. 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
};
  1. Noeud "Switch" - Router selon le signal:
  • BUY → Notification Telegram/Email
  • SELL → Alerte de vente
  • HOLD → Log dans Google Sheets

Codes de sortie

Code Signification
0 Succès (HOLD ou BUY)
2 Attention (SELL/STRONG_SELL)

Exemple de sortie JSON

{
  "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

📖 Utilisation

  1. Entrer un Ticker: Saisissez le symbole (ex: AAPL, BTC-USD, ^GSPC)
  2. Sélectionner la Période: Choisissez l'historique de données (6 mois à 5 ans)
  3. Choisir l'Horizon: Sélectionnez l'horizon de prédiction (1, 7, 14, ou 30 jours)
  4. Lancer l'Analyse: Cliquez sur le bouton pour exécuter tous les modèles
  5. 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é

🧠 Architecture Technique

Pipeline de Données

yfinance → Nettoyage → Indicateurs Techniques → Features

Pipeline de Prédiction

Features → XGBoost ──┐
         → RF ───────┼→ Vote Pondéré → Signal
         → ARIMA ────┤
         → Prophet ──┤
         → GARCH ────┘ (modificateur)

Critères de Décision

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

📊 Exemples de Tickers

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

🔧 Améliorations pour la Production

1. Entraînement Hors Ligne

# 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

2. API de News/Sentiment

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)

3. Backtesting

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

4. Cache et Base de Données

  • Redis: Cache des prédictions
  • PostgreSQL: Stockage historique des signaux
  • Feature Store: Centraliser les features calculées

5. Optimisation Hyperparamètres

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

6. Déploiement

  • 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"]

7. Monitoring et Alerts

  • Prometheus/Grafana: Monitoring des performances
  • Alertes: Discord/Slack webhook pour les signaux forts
  • Logging: Structured logging avec ELK stack

8. Features Additionnelles

  • Prophet: Modèle de tendance supplémentaire
  • LSTM: Deep learning pour séries temporelles
  • Correlation Matrix: Analyse sectorielle
  • Portfolio Optimization: Allocation d'actifs

📝 Limitations Connues

  1. Données Yahoo Finance: Peut avoir des délais ou indisponibilités
  2. Entraînement à chaque requête: Lent pour les grands datasets (utilisez le cache)
  3. Pas de données fondamentales: Seulement analyse technique
  4. Classification binaire: Ne prédit pas l'amplitude du mouvement

🛠️ Dépannage

Erreur: "Ticker inexistant"

  • Vérifiez le symbole (ex: AAPL pas Apple)
  • Certains ETF européens utilisent .PA (ex: CAC.PA)

Erreur: "Données insuffisantes"

  • Augmentez la période de données
  • Certains tickers récents n'ont pas assez d'historique

Erreur: "Module non trouvé"

uv sync --upgrade

🐳 Déploiement Docker & n8n

Voir 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)

Workflows n8n inclus

Fichier Format Destinations
quant-bot-json-email.json JSON → HTML Email, Telegram
quant-bot-markdown-email.json Markdown → HTML Email, Slack, Discord

📄 Licence

Ce projet est fourni à titre éducatif. Utilisation à vos risques et périls.

🤝 Contribution

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

About

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.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages