MQL5

Correlación de Pearson entre dos símbolos

Calcula la correlación de los rendimientos (no de los precios brutos, que siempre sobrestiman la correlación) sobre N velas alineadas mediante CopyClose.

Requisitos

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;
}

Resultado

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

Snippets relacionados

Volver al Data Lab