Système de trading algorithmique multi-tickers basé sur l'analyse de sentiment (NewsAPI) et des modèles de classification probabilistes calibrés.
┌─────────────────────────────────────────────────────────────────────┐
│ AI/DC Trading System │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ NewsAPI │───►│ news_storage │───►│ news_impact │ │
│ │ (fetch) │ │ (SQLite) │ │ _builder │ │
│ └───────────┘ └──────────────┘ └───────┬───────┘ │
│ │ │
│ ┌───────────┐ ┌──────────────┐ │ │
│ │ yfinance/ │───►│ features │◄───────────┘ │
│ │ stooq │ │ _v2.py │ │
│ └───────────┘ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌───────────────┐ │
│ │ training │───►│ model │ │
│ │ _dataset.py │ │ _training │ │
│ └──────────────┘ └───────┬───────┘ │
│ │ │
│ ┌────────────────────┘ │
│ ▼ │
│ ┌───────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ portfolio │◄───│ signal │◄───│ signals.py │ │
│ │ _tracker │ │ _generator │ │ (inference) │ │
│ │ (SQLite) │ └──────────────┘ └───────┬───────┘ │
│ └───────────┘ │ │ │
│ ▲ │ │ │
│ └─────────────────┼────────────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ unified │ │
│ │ _system.py │──► HTTP Server (port 3000) │
│ │ (Dashboard) │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Créez un fichier .env à partir du template :
cp .env.example .env
# Éditez .env et ajoutez votre clé NewsAPIÀ faire lors de la première installation ou si vous voulez repartir de zéro.
python populate_data.pyNote : Cette étape télécharge les news, construit les datasets, entraîne les modèles et génère les premiers signaux.
À lancer chaque jour (avant ouverture du marché ou en clôture).
python daily_update.pyNote : Le script utilise par défaut 'stooq' pour les prix et inclut les étapes de Portfolio, News, Impact, et Retraining.
python unified_system.py --mode server --port 3000Ouvrir http://localhost:3000 dans votre navigateur.
.
├── config/ # Configuration
│ ├── settings.py # Pydantic settings
│ └── watchlist.yaml # Liste des tickers
├── data/ # Données (gitignored)
│ ├── news/ # SQLite database (News)
│ ├── portfolio.db # SQLite database (Portfolio)
│ ├── impact/ # Impact scores CSV
│ ├── signals/ # Historique des signaux
│ ├── prices/ # Prix historiques
│ └── backtest/ # Résultats backtests
├── models/ # Modèles ML (gitignored)
│ └── {ticker}/ # Modèle par ticker
├── static/ # Assets frontend
│ ├── index.html
│ ├── style.css
│ └── script.js
├── tests/ # Tests unitaires
├── .github/workflows/ # CI/CD
│ └── ci.yml
├── unified_system.py # Serveur principal (Dashboard)
├── daily_update.py # Pipeline quotidien
├── features_v2.py # Feature Engineering avancé
├── portfolio_tracker.py # Gestion Portfolio & NAV
├── validation.py # Scripts de validation
└── requirements.txt # Dépendances (pinned)
| Endpoint | Méthode | Description |
|---|---|---|
/ |
GET | Dashboard HTML |
/api/inference |
GET | Inférence pour tous les tickers |
/api/leaderboard |
GET | Classement avec KPIs et Signaux |
/api/company/{ticker} |
GET | Détails d'une entreprise (Prix, News, Métriques) |
/api/news |
GET | Dernières news avec impacts (Global) |
/api/portfolio |
GET | Snapshot du portfolio (Legacy/General) |
/api/tickers |
GET | Liste des tickers actifs (Source of Truth) |
/api/performance/summary |
GET | Résumé performance réelle (NAV, PnL) |
/api/performance/nav |
GET | Historique NAV et Drawdown |
/api/performance/positions |
GET | Positions actuelles (Mark-to-Market) |
/api/performance/rebalance |
POST | Déclencher rebalancement (Target Weights) |
/api/retrain |
POST | Déclencher pipeline de ré-entraînement |
/api/health |
GET | Statut de santé du système |
/api/debug/ticker_coverage |
GET | Diagnostic de couverture des données |
# Lancer tous les tests
pytest tests/ -v
# Avec couverture
pytest tests/ -v --cov=. --cov-report=htmlLe système est conçu pour être résilient :
- Si NewsAPI échoue, il utilise les données existantes.
- Si un ticker manque de données, il est ignoré ou affiché en "N/A" sur le dashboard.
- Ne jamais commit le fichier
.env(déjà dans.gitignore) - Les clés API doivent être stockées dans des variables d'environnement
- Utilisez
secretsGitHub pour CI/CD
Voir CHANGELOG.md pour l'historique des versions.
Voir CONTRIBUTING.md pour les guidelines.