Excel : le point de départ
Excel reste l'outil le plus accessible pour calculer des corrélations simples. Trois fonctions essentielles suffisent pour commencer.
Les 3 fonctions essentielles
| Fonction | Syntaxe | Usage | Exemple |
| CORREL |
=CORREL(A2:A252, B2:B252) |
Corrélation de Pearson entre 2 séries |
Corrélation SPY/QQQ sur 1 an (252 jours) |
| STDEV |
=STDEV(A2:A252) |
Écart-type (volatilité) d'une série |
Vol annuelle = STDEV(returns_daily) * SQRT(252) |
| AVERAGE |
=AVERAGE(A2:A252) |
Moyenne d'une série |
Rendement moyen quotidien |
Étapes pour calculer une corrélation rolling dans Excel
1) Téléchargez les prix historiques (Yahoo Finance → "Download" CSV). 2) Calculez les rendements quotidiens : =(B3-B2)/B2 pour chaque actif. 3) Appliquez CORREL sur une fenêtre glissante de 60 jours : =CORREL(C2:C61, D2:D61), puis glissez la formule vers le bas. 4) Créez un graphique en ligne pour visualiser l'évolution de la corrélation. Limite : Excel devient lent au-delà de 10,000 lignes et ne gère pas facilement les matrices de corrélation multi-actifs.
Piège courant : corrélation sur les prix vs les rendements
Ne jamais calculer la corrélation sur les prix bruts — toujours sur les rendements (returns). Pourquoi ? Deux actifs peuvent avoir des prix qui montent tous les deux (tendance haussière commune) avec une corrélation de prix de +0.99 tout en ayant des rendements journaliers non corrélés (+0.20). La corrélation de prix est trompeuse car elle capte la tendance commune, pas la relation réelle entre les mouvements quotidiens.
Python + yfinance : corrélation rolling et matrice complète
Python avec les librairies yfinance, pandas et matplotlib/seaborn est l'outil le plus puissant pour l'analyse de corrélation. Voici un script complet et réutilisable.
Script 1 : Matrice de corrélation rolling
import yfinance as yf
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
tickers = ['SPY', 'QQQ', 'GLD', 'TLT', 'USO', 'EEM']
data = yf.download(tickers, period='2y')['Adj Close']
returns = data.pct_change().dropna()
corr_matrix = returns.corr()
print(corr_matrix.round(2))
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='RdYlGn',
center=0, vmin=-1, vmax=1, fmt='.2f')
plt.title('Matrice de corrélation (2 ans)')
plt.tight_layout()
plt.savefig('correlation_matrix.png', dpi=150)
plt.show()
Script 2 : Corrélation rolling avec alertes Z-score
import numpy as np
window = 60
rolling_corr = returns['SPY'].rolling(window).corr(returns['TLT'])
corr_mean = rolling_corr.rolling(252).mean()
corr_std = rolling_corr.rolling(252).std()
z_score = (rolling_corr - corr_mean) / corr_std
anomalies = z_score[z_score.abs() > 2]
print(f"Anomalies détectées: {len(anomalies)}")
print(anomalies.tail(10))
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(14, 8))
ax1.plot(rolling_corr, color='#0891b2', linewidth=1.5)
ax1.axhline(y=0, color='red', linestyle='--', alpha=0.5)
ax1.set_title('Corrélation Rolling 60j SPY/TLT')
ax1.set_ylabel('Corrélation')
ax2.plot(z_score, color='#f97316', linewidth=1)
ax2.axhline(y=2, color='red', linestyle='--')
ax2.axhline(y=-2, color='red', linestyle='--')
ax2.fill_between(z_score.index, 2, z_score.clip(lower=2),
alpha=0.3, color='red')
ax2.set_title('Z-Score de la corrélation')
ax2.set_ylabel('Z-Score')
plt.tight_layout()
plt.savefig('rolling_correlation.png', dpi=150)
plt.show()
Script 3 : Analyse de saisonnalité
spy = yf.download('SPY', period='20y')['Adj Close']
spy_monthly = spy.resample('M').last().pct_change().dropna()
spy_monthly.index = spy_monthly.index.to_period('M')
monthly_avg = spy_monthly.groupby(spy_monthly.index.month).mean() * 100
print("Rendement moyen par mois (%):")
print(monthly_avg.round(2))
pivot = spy_monthly.copy()
pivot.index = pd.MultiIndex.from_arrays(
[pivot.index.year, pivot.index.month])
pivot = pivot.unstack() * 100
plt.figure(figsize=(14, 8))
sns.heatmap(pivot, annot=True, fmt='.1f',
cmap='RdYlGn', center=0, linewidths=0.5)
plt.title('Rendements mensuels SPY (%) par année')
plt.xlabel('Mois')
plt.ylabel('Année')
plt.tight_layout()
plt.savefig('seasonality_heatmap.png', dpi=150)
plt.show()
Installer l'environnement Python
Si vous n'avez pas Python, la manière la plus simple est d'installer Anaconda (anaconda.com) qui inclut Python, pandas, matplotlib et Jupyter Notebook. Puis installez yfinance et seaborn : pip install yfinance seaborn. Ouvrez Jupyter Notebook et collez les scripts ci-dessus. Alternativement, utilisez Google Colab (colab.research.google.com) — gratuit, rien à installer, il suffit d'un navigateur.
TradingView : visualisation et Pine Script
TradingView est la plateforme la plus populaire pour la visualisation de corrélations et de saisonnalité. Son langage Pine Script permet de créer des indicateurs personnalisés directement sur le graphique.
Pine Script : indicateur de corrélation rolling
//@version=5
indicator("Corrélation Rolling + Z-Score", overlay=false)
symbol2 = input.symbol("TLT", "Second actif")
window = input.int(60, "Fenêtre corrélation", minval=10)
z_window = input.int(252, "Fenêtre Z-Score", minval=60)
price1 = close
price2 = request.security(symbol2, timeframe.period, close)
ret1 = ta.change(price1) / price1[1]
ret2 = ta.change(price2) / price2[1]
corr_val = ta.correlation(ret1, ret2, window)
corr_avg = ta.sma(corr_val, z_window)
corr_dev = ta.stdev(corr_val, z_window)
z_score = (corr_val - corr_avg) / corr_dev
plot(corr_val, "Corrélation", color=color.teal, linewidth=2)
hline(0, "Zéro", color=color.gray, linestyle=hline.style_dashed)
hline(0.5, "+0.5", color=color.green, linestyle=hline.style_dotted)
hline(-0.5, "-0.5", color=color.red, linestyle=hline.style_dotted)
bgcolor(z_score > 2 ? color.new(color.red, 85) : na)
bgcolor(z_score < -2 ? color.new(color.green, 85) : na)
alertcondition(math.abs(z_score) > 2, "Corrélation anormale")
Indicateurs TradingView utiles (gratuits)
| Indicateur | Auteur | Usage | Comment y accéder |
| Correlation Coefficient |
Built-in |
Corrélation vs un autre symbole |
Indicateurs → Built-in → Correlation Coefficient |
| Seasonality |
TradingView |
Rendement mensuel moyen historique |
Indicateurs → rechercher "Seasonality" |
| Market Correlation |
LuxAlgo |
Matrice de corrélation multi-actifs |
Community Scripts → "Market Correlation" |
| VIX Term Structure |
Diverses |
Contango/backwardation du VIX |
Community Scripts → "VIX Term Structure" |
Les meilleurs outils gratuits
Vous n'avez pas besoin d'un terminal Bloomberg pour analyser les corrélations et la saisonnalité. Voici les meilleurs outils gratuits classés par usage.
MacroMicro.me
Le meilleur outil gratuit pour les corrélations macro. Graphiques interactifs avec overlay multi-actifs, corrélation automatique, et données remontant à 50+ ans. Idéal pour Or/DXY, Taux/Actions, Yield Curve.
FRED (St. Louis Fed)
La base de données économique de la Fed de St. Louis. 800,000+ séries temporelles gratuites. Taux, inflation, emploi, spread 2Y-10Y, TIPS. Export CSV pour vos analyses Python/Excel.
SeasonalCharts.de
Graphiques de saisonnalité pour actions, indices, matières premières et devises. Pattern mensuel moyen sur 5, 10, 20 ans. Gratuit et simple d'utilisation. Parfait pour valider vos hypothèses saisonnières.
Finviz
Screener d'actions avec heatmap sectorielle gratuite. Visualisez la rotation sectorielle en temps réel. La heatmap montre la performance relative de chaque secteur et sous-secteur.
Portfolio Visualizer
Backtesting gratuit de portefeuilles avec matrice de corrélation, frontière efficiente, et analyse risk parity. Entrez vos tickers et obtenez instantanément corrélations, drawdowns, et métriques.
Glassnode / CryptoQuant (free tier)
Indicateurs on-chain gratuits (version limitée) : MVRV, SOPR, NUPL, Fear & Greed Index. Suffisant pour suivre le cycle BTC. Le plan gratuit offre les données essentielles avec 24h de délai.
Configurer des alertes automatiques
La surveillance continue des corrélations est essentielle. Plutôt que de vérifier manuellement chaque jour, configurez des alertes automatiques qui vous préviennent quand une corrélation sort de sa zone normale.
Les 3 types d'alertes à configurer
Alerte 1 : Z-Score de corrélation > 2.0
Critique
Quand la corrélation rolling 60j entre deux actifs dévie de plus de 2 écarts-types de sa moyenne 1 an. Action : examiner le catalyseur, évaluer si c'est temporaire ou structurel. Si temporaire → opportunité de pairs trade. Configurable dans TradingView (Pine Script alertcondition) ou via script Python avec notification email/Telegram.
Alerte 2 : Changement de signe de corrélation
Important
Quand une corrélation passe de positive à négative (ou inverse). Exemple : SPY/TLT passant de -0.30 à +0.20. Action : réévaluer la couverture du portefeuille. Si la corrélation SPY/TLT est positive, les obligations ne protègent plus — envisager d'autres hedges (or, VIX, cash).
Alerte 3 : Seuil saisonnier atteint
Planifié
Alertes calendaires pour les événements saisonniers : 1er mai (évaluer Sell in May), 3ème vendredi de chaque trimestre (Triple Witching), 26 décembre (début Santa Rally). Action : exécuter la checklist pré-trade saisonnière (section suivante). Utilisez Google Calendar ou un simple rappel smartphone.
Script Python d'alerte automatique (via email)
Combinez les scripts de la section précédente avec la librairie smtplib de Python pour envoyer un email automatique quand le Z-score dépasse 2.0. Planifiez le script avec cron (Linux/Mac) ou Task Scheduler (Windows) pour qu'il s'exécute chaque jour à 18h (après la clôture). Coût : $0. Temps de setup : 30 minutes. Alternativement, utilisez IFTTT ou Zapier avec TradingView Webhooks pour des notifications push sur votre téléphone.
La checklist pré-trade basée sur les corrélations
Avant chaque trade, vérifiez ces points pour vous assurer que les corrélations et la saisonnalité sont en votre faveur. Cette checklist systématique réduit les décisions émotionnelles.
Checklist en 8 points
1
Corrélation du sous-jacent avec SPY — Quel est le bêta effectif ? Si corrélé à +0.80, un crash SPY emportera votre position.
2
Position dans le calendrier saisonnier — Sommes-nous dans la "bonne" saison pour ce secteur/actif ? (cf. heatmap sectorielle, Partie 3).
3
DXY direction — Le dollar est-il en hausse ou en baisse ? Impact sur commodities, EM, or (cf. Partie 2).
4
VIX et volatilité implicite — Le VIX est-il dans sa zone saisonnière normale ? Une IV élevée = options chères (vendre de la vol), IV basse = acheter de la protection.
5
Corrélation SPY/TLT actuelle — Négative = diversification fonctionne. Positive = attention, les obligations ne protègent pas.
6
OpEx prochain — Y a-t-il une expiration d'options majeure dans les 5 jours ? Si oui, méfiez-vous du pin risk et du gamma squeeze.
7
Phase du cycle Fed — Hausse, plateau, ou baisse de taux ? Quel impact sur votre classe d'actifs ? (cf. Partie 2).
8
Convergence des signaux — Combien de facteurs (corrélation, saisonnalité, macro, technique) pointent dans la même direction ? Minimum 3/4 pour un trade de conviction.
Imprimez cette checklist
La meilleure pratique est d'imprimer cette checklist et de la garder à côté de votre écran. Avant chaque trade, cochez les 8 points. Si 6+ sont favorables, le trade a un bon contexte. Si seulement 3-4 sont favorables, réduisez la taille de la position. Si moins de 3, passez votre tour. Cette discipline simple élimine 70% des trades perdants liés à un mauvais timing ou un contexte défavorable.
Projet : construire votre portfolio saisonnier
Pour mettre en pratique tout ce que vous avez appris dans cette série, voici un projet complet : construire un portfolio saisonnier avec dashboard de corrélation.
Architecture du portfolio
| Composante | Pondération | Ajustement saisonnier | ETF |
| Actions US Large Caps |
40% |
-10% en Mai-Oct si momentum faible |
SPY ou VOO |
| Obligations US Long |
20% |
+5% si corrélation SPY/TLT < -0.20 |
TLT ou IEF |
| Or |
10% |
+5% si taux réels en baisse |
GLD ou IAU |
| Rotation Sectorielle |
15% |
Selon la saison (cf. Partie 3 & 5) |
XLE, XLK, XLY, XLU |
| Small Caps |
10% |
+5% en Jan, -5% en Mai-Oct |
IWM |
| Cash / T-Bills |
5% |
+10% quand VIX < 12 (complacency) |
BIL ou SHV |
Dashboard de suivi : les 4 métriques à surveiller
Rééquilibrage mensuel en 5 étapes
1
Calculer la matrice de corrélation rolling 60j (Python ou TradingView). Noter les changements significatifs depuis le mois dernier.
2
Vérifier la saisonnalité du mois prochain (SeasonalCharts). Identifier les secteurs en saison haute et les risques saisonniers (OpEx, septembre, etc.).
3
Vérifier les alertes Z-score. Des corrélations anormales ? Des opportunités de pairs trade ? Des changements de signe à surveiller ?
4
Appliquer les ajustements saisonniers. Modifier les pondérations selon le mois (rotation sectorielle, Sell in May si applicable, January Effect).
5
Exécuter et documenter. Passer les ordres de rééquilibrage. Tenir un journal avec les raisons de chaque ajustement. Revoir la performance chaque trimestre.
Commencez petit, itérez
Ne construisez pas le portfolio complet dès le premier jour. Mois 1 : créez le dashboard Python (matrice de corrélation + saisonnalité). Mois 2 : configurez les alertes Z-score. Mois 3 : commencez avec un paper trading du portfolio saisonnier. Mois 4-6 : investissez avec de petites positions et observez. Après 6 mois : ajustez les paramètres selon vos observations et montez en taille progressivement. La patience et la discipline sont plus importantes que la stratégie elle-même.
Quiz Final — 5 questions
Question 1 : Pourquoi faut-il calculer la corrélation sur les rendements et non sur les prix bruts ?
Réponse : Les prix bruts captent la tendance commune, pas la relation réelle entre les mouvements quotidiens.
Deux actifs en tendance haussière auront une corrélation de prix proche de +1.0 même si leurs mouvements journaliers sont indépendants. Les rendements (returns = variation en %) éliminent cette tendance commune et mesurent la véritable co-mouvement. En finance quantitative, toutes les corrélations sont calculées sur les rendements logarithmiques ou arithmétiques, jamais sur les prix bruts.
Question 2 : Quelle est la meilleure plateforme gratuite pour visualiser la corrélation entre l'or et le dollar sur 20 ans ?
Réponse : MacroMicro.me (macromicro.me).
MacroMicro offre des graphiques interactifs avec overlay multi-actifs et calcul de corrélation automatique. Les données remontent à 50+ ans pour les actifs majeurs. C'est l'outil gratuit le plus complet pour l'analyse macro. FRED (Federal Reserve Economic Data) est la meilleure alternative pour les données brutes (taux, inflation, yield curve) mais est moins visuel.
Question 3 : Dans la checklist pré-trade, combien de facteurs favorables sont nécessaires minimum pour un trade de conviction ?
Réponse : Au moins 3 sur 4 facteurs principaux (corrélation, saisonnalité, macro, technique) doivent pointer dans la même direction.
Si 6+ des 8 points de la checklist sont favorables, le trade a un excellent contexte. Si seulement 3-4 sont favorables, réduisez la taille de la position. Si moins de 3, passez votre tour. La convergence des signaux est le principe fondamental : un signal isolé est faible, mais 3-4 signaux convergents créent une probabilité élevée de succès.
Question 4 : Comment configurer une alerte automatique quand la corrélation SPY/TLT change de signe ?
Réponse : Trois méthodes possibles, de la plus simple à la plus avancée.
1) TradingView : utilisez le Pine Script avec alertcondition() qui se déclenche quand la corrélation rolling 60j passe de négatif à positif (ou inversement). 2) Python + cron : un script qui calcule la corrélation rolling chaque soir et envoie un email via smtplib si le signe a changé. 3) Webhook : TradingView peut envoyer un webhook vers IFTTT/Zapier pour une notification push sur votre téléphone. La méthode TradingView est la plus rapide à mettre en place (5 minutes avec le Pine Script fourni dans cette partie).
Question 5 : Quelle est l'erreur la plus courante des débutants qui utilisent les corrélations pour investir ?
Réponse : Traiter la corrélation comme une constante alors qu'elle change de régime.
L'erreur la plus fréquente est de prendre une corrélation historique moyenne (ex: SPY/TLT = -0.30) et de supposer qu'elle sera toujours valide. En 2022, cette corrélation est passée à +0.50. Un investisseur qui comptait sur TLT pour protéger son portefeuille d'actions a été doublement pénalisé. La corrélation est un animal vivant : elle varie dans le temps, change selon le régime de marché, et peut s'inverser brusquement. Il faut la surveiller en continu (rolling 60j) et adapter sa stratégie en conséquence.