Corrélation de Pearson entre deux symboles
Calcule la corrélation des rendements (pas des prix bruts, qui sur-estiment toujours la corrélation) sur N bougies alignées par CopyClose.
Cas d'usage
Éviter de doubler le risque en ouvrant EURUSD et GBPUSD simultanément (corrélation > 0.8).
Prérequis
MetaTrader 5, MQL5
MQL5
double SymbolsCorrelation(string symA, string symB, ENUM_TIMEFRAMES tf, int bars)
{
double a[], b[];
if(CopyClose(symA, tf, 1, bars + 1, a) != bars + 1) return 0.0;
if(CopyClose(symB, tf, 1, bars + 1, b) != bars + 1) return 0.0;
// Rendements log : stationnaires, contrairement aux prix
double ra[], rb[];
ArrayResize(ra, bars); ArrayResize(rb, bars);
for(int i = 0; i < bars; i++)
{
ra[i] = MathLog(a[i + 1] / a[i]);
rb[i] = MathLog(b[i + 1] / b[i]);
}
double ma = 0, mb = 0;
for(int i = 0; i < bars; i++) { ma += ra[i]; mb += rb[i]; }
ma /= bars; mb /= bars;
double cov = 0, va = 0, vb = 0;
for(int i = 0; i < bars; i++)
{
cov += (ra[i] - ma) * (rb[i] - mb);
va += MathPow(ra[i] - ma, 2);
vb += MathPow(rb[i] - mb, 2);
}
return (va > 0 && vb > 0) ? cov / MathSqrt(va * vb) : 0.0;
}Résultat
2026.06.10 09:30:00.412 CorrCheck (EURUSD,H1) EURUSD vs GBPUSD : r = +0.87 (rendements log, 200 barres H1) 2026.06.10 09:30:00.413 CorrCheck (EURUSD,H1) r > 0.80 -> 2e position REFUSÉE (risque effectivement doublé) 2026.06.10 09:30:00.498 CorrCheck (EURUSD,H1) EURUSD vs USDJPY : r = -0.42 -> diversification acceptable 2026.06.10 09:30:00.499 CorrCheck (EURUSD,H1) NB : sur prix bruts, r aurait affiché +0.96 (sur-estimé)
CorrélationPearsonMulti-symbolesDiversification