Construction de 50+ alpha factors (momentum, value, quality, volatility, sentiment), processus de recherche systématique, analyse du decay, feature importance, et combinaison optimale. Le cœur intellectuel du système.
Un alpha factor est une variable prédictive qui capture une anomalie de marché exploitable. La recherche académique et industrielle a identifié des centaines de facteurs, mais seuls ~50 restent profitables après coûts de transaction et ajustement pour le data mining bias.
| Famille | Nombre de facteurs | Horizon optimal | Sharpe typique (seul) | Decay |
|---|---|---|---|---|
| Momentum | 12 facteurs | 1-12 mois | 0.4-0.8 | Lent (mois) |
| Value | 8 facteurs | 6-24 mois | 0.2-0.5 | Très lent (années) |
| Quality | 6 facteurs | 12-36 mois | 0.3-0.6 | Très lent |
| Volatility/Risk | 8 facteurs | 1-4 semaines | 0.3-0.7 | Rapide (jours) |
| Sentiment/Flow | 10 facteurs | 1-5 jours | 0.2-0.5 | Très rapide (heures) |
| Technical/Pattern | 8 facteurs | 1-10 jours | 0.1-0.4 | Rapide |
Le momentum est l'anomalie de marché la plus robuste et la plus documentée (Jegadeesh & Titman, 1993). Les actions qui ont bien performé continuent de bien performer sur 1-12 mois. C'est le pilier central de notre système.
| # | Facteur | Calcul | Lookback | IC moyen | Turnover |
|---|---|---|---|---|---|
| 1 | MOM_12_1 | Return 12 mois excluant le dernier mois | 252-21 jours | 0.04-0.06 | ~30%/mois |
| 2 | MOM_6_1 | Return 6 mois excluant le dernier mois | 126-21 jours | 0.03-0.05 | ~40%/mois |
| 3 | MOM_3_1 | Return 3 mois excluant le dernier mois | 63-21 jours | 0.02-0.04 | ~50%/mois |
| 4 | ACCEL_MOM | MOM_6_1 - MOM_12_7 (accélération du momentum) | 126 jours | 0.03-0.05 | ~35%/mois |
| 5 | RSI_MOMENTUM | RSI(14) normalisé cross-section | 14 jours | 0.02-0.03 | ~60%/mois |
| 6 | MACD_SIGNAL | MACD(12,26,9) cross-section Z-score | 26 jours | 0.01-0.03 | ~55%/mois |
| 7 | PRICE_52W | Prix / 52-week high | 252 jours | 0.03-0.05 | ~25%/mois |
| 8 | VOL_MOM | Return × (Volume / Volume_avg_20) | 21 jours | 0.02-0.04 | ~45%/mois |
| 9 | EARNINGS_MOM | SUE (Standardized Unexpected Earnings) Z-score | Trimestriel | 0.04-0.07 | ~20%/trimestre |
| 10 | REVISION_MOM | Variation consensus EPS 1 mois | 21 jours | 0.03-0.06 | ~30%/mois |
| 11 | INDUSTRY_MOM | Momentum du secteur/industrie (peer group) | 63 jours | 0.02-0.04 | ~25%/mois |
| 12 | IDIO_MOM | Residual momentum (après Fama-French 5 facteurs) | 126 jours | 0.03-0.05 | ~35%/mois |
# Prompt Claude Code : Implémentation des facteurs momentum
claude -p "Implémente les 12 facteurs momentum dans un module Python:
- Classe MomentumFactors(BaseFactorFamily)
- Input: DataFrame avec colonnes [date, symbol, close, volume, high, low]
- Output: DataFrame [date, symbol, MOM_12_1, MOM_6_1, ..., IDIO_MOM]
- Chaque facteur est Z-scored cross-section par date
- Gestion des NaN: forward-fill 5 jours max, puis exclusion
- Winsorize à 3 sigma pour éviter les outliers
- Unit tests avec données synthétiques
- Performance: doit traiter 3000 symboles × 2520 jours en < 10 secondes (Polars)"
| # | Facteur | Calcul | IC | Notes |
|---|---|---|---|---|
| 13 | E/P | 1 / Forward P/E | 0.02-0.04 | Inverse du P/E pour que « plus haut = moins cher » |
| 14 | B/P | Book Value / Market Cap | 0.01-0.03 | Classique Fama-French. Moins fiable depuis 2010 |
| 15 | FCF_YIELD | Free Cash Flow / Enterprise Value | 0.03-0.05 | Le meilleur facteur value pour les actions modernes |
| 16 | EBITDA_EV | EBITDA / Enterprise Value | 0.02-0.04 | Plus stable que E/P car exclut les charges non-cash |
| 17 | DIV_YIELD | Dividende annualisé / Prix | 0.01-0.02 | Faible IC mais réduit la volatilité du portefeuille |
| # | Facteur | Calcul | IC | Notes |
|---|---|---|---|---|
| 18 | ROE | Net Income / Equity | 0.02-0.04 | Profitabilité des capitaux propres |
| 19 | GROSS_MARGIN | Gross Profit / Revenue | 0.02-0.03 | Pricing power et avantage compétitif |
| 20 | ACCRUALS | (NI - CFO) / Total Assets | 0.02-0.04 | Négatif = meilleure qualité des earnings (Sloan, 1996) |
| 21 | DEBT_EQUITY | Total Debt / Equity (inversé) | 0.01-0.03 | Faible dette = résilience aux crises |
| 22 | PIOTROSKI_F | F-Score (9 critères binaires) | 0.03-0.05 | Score composite de qualité fondamentale |
| 23 | EARNINGS_STABILITY | 1 / σ(EPS growth 8Q) | 0.02-0.03 | Stabilité des bénéfices = prévisibilité |
| # | Facteur | Calcul | Source | IC |
|---|---|---|---|---|
| 24 | SOCIAL_MOMENTUM | Variation 7j du volume de mentions positives | StockTwits API | 0.01-0.03 |
| 25 | SHORT_INTEREST_CHG | Variation du SI% sur 14 jours | Fintel / FINRA | 0.02-0.04 |
| 26 | INSIDER_BUY | Achats insiders net / Market Cap (30 jours) | SEC Form 4 | 0.03-0.06 |
| 27 | ANALYST_REVISION | Net upgrades - downgrades / Total analysts | Yahoo Finance | 0.02-0.04 |
| 28 | OPTIONS_SKEW | IV Put 25Δ / IV Call 25Δ | IBKR / CBOE | 0.02-0.04 |
| 29 | FLOW_IMBALANCE | Net institutional flow (13F quarterly) | SEC EDGAR 13F | 0.02-0.03 |
| 30 | NEWS_SENTIMENT | NLP score des news 7 derniers jours (FinBERT) | News API + FinBERT | 0.01-0.03 |
Avec 50+ facteurs et 20 ans de données, il est trivial de trouver une combinaison qui backtest à 200%+ de CAGR. Mais cette combinaison ne survivra pas en production. Le processus de recherche doit être conçu pour minimiser l'overfitting à chaque étape.
Chaque facteur DOIT avoir une justification économique AVANT de regarder les données. « Pourquoi ce facteur devrait-il prédire les rendements futurs ? » Si la réponse est vague → rejeter
Tester sur un univers DIFFÉRENT de celui de la production. Ex: recherche sur US mid-cap, production sur US+EU+APAC all-cap. Si le facteur marche dans les deux → robuste
JAMAIS de backtest in-sample uniquement. Walk-forward avec train/test splits disjoints. CPCV (Combinatorial Purged Cross-Validation) pour le scoring final
Utiliser le Deflated Sharpe Ratio (Bailey & López de Prado) pour corriger le Sharpe pour le nombre de tests effectués. Un Sharpe de 1.0 qui a été trouvé après 1000 tests vaut zéro
# Prompt Claude Code : Walk-Forward Research Pipeline
claude -p "Crée un pipeline de recherche de facteurs:
1. FactorResearchPipeline class
2. Pour chaque facteur candidat:
a. Calculer l'IC (Information Coefficient) sur 10 ans de données
b. Calculer l'IC Decay (IC à t+1, t+2, ..., t+20 jours)
c. Walk-forward backtest: 756j train, 252j test, 8 folds
d. Calculer le Deflated Sharpe Ratio
e. Calculer le turnover et les coûts de transaction implicites
3. Filtrer: IC > 0.02, Deflated Sharpe > 0.5, Turnover < 60%/mois
4. Ranking: score composite = 0.4×IC + 0.3×Sharpe + 0.3×(1-Turnover)
5. Générer un rapport HTML avec:
- Heatmap des corrélations inter-facteurs
- IC Decay curves par facteur
- Walk-forward equity curves
- Feature importance (SHAP values si XGBoost est utilisé)
Utilise Polars pour la performance, vectorbt pour le backtest."
La magie de la combinaison de facteurs : si chaque facteur a un IC de 0.03 et qu'ils sont peu corrélés entre eux, la combinaison de N facteurs augmente l'IC composite proportionnellement à √N. Avec 10 facteurs indépendants, l'IC passe de 0.03 à ~0.095.
| Méthode de combinaison | Complexité | IC boost | Risk d'overfit | Recommandation |
|---|---|---|---|---|
| Equal Weight | Trivial | ×√N | Zéro | ✅ Baseline, toujours tester en premier |
| IC-Weighted | Faible | ×√N × (IC_i/IC_avg) | Faible | ✅ Améliore légèrement l'equal-weight |
| Ridge Regression | Modéré | Optimal linéaire | Modéré | ✅ Bon compromis performance/robustesse |
| XGBoost | Élevé | Non-linéaire, potentiellement ×2-3 | Élevé | ⚠️ Uniquement avec CPCV strict et >10 ans de données |
| Neural Network | Très élevé | Variable | Très élevé | ❌ Pas recommandé pour notre taille de portefeuille |