Régularité de la courbe d'équité (R² comme critère)
Mesure la linéarité de la courbe d'équité par le coefficient de détermination R² calculé sur les profits cumulés des deals — une équité en ligne droite vaut mieux qu'un même profit en dents de scie.
Cas d'usage
Sélectionner en optimisation les paramètres au comportement régulier, signature d'un edge stable.
Prérequis
MetaTrader 5, Strategy Tester
MQL5
double OnTester()
{
if(!HistorySelect(0, TimeCurrent())) return 0.0;
double equity[]; int n = 0;
double cum = 0.0;
for(uint i = 0; i < HistoryDealsTotal(); i++)
{
ulong t = HistoryDealGetTicket(i);
if(HistoryDealGetInteger(t, DEAL_ENTRY) != DEAL_ENTRY_OUT) continue;
cum += HistoryDealGetDouble(t, DEAL_PROFIT);
ArrayResize(equity, n + 1);
equity[n++] = cum;
}
if(n < 10 || cum <= 0.0) return 0.0;
// Régression linéaire equity = a*i + b, puis R²
double sx = 0, sy = 0, sxy = 0, sxx = 0;
for(int i = 0; i < n; i++)
{ sx += i; sy += equity[i]; sxy += i * equity[i]; sxx += (double)i * i; }
double a = (n * sxy - sx * sy) / (n * sxx - sx * sx);
double b = (sy - a * sx) / n;
double ssRes = 0, ssTot = 0, mean = sy / n;
for(int i = 0; i < n; i++)
{
ssRes += MathPow(equity[i] - (a * i + b), 2);
ssTot += MathPow(equity[i] - mean, 2);
}
double r2 = (ssTot > 0) ? 1.0 - ssRes / ssTot : 0.0;
return r2 * cum; // régularité pondérée par le profit
}Résultat
2026.06.10 23:55:10.205 Core 2 pass 1571 returned result 1893.42 2026.06.10 23:55:10.206 MyEA (EURUSD,H1) n=112 clôtures, profit cumulé 2104.90 2026.06.10 23:55:10.206 MyEA (EURUSD,H1) Régression : pente a=18.79/deal, R² = 0.8996 2026.06.10 23:55:10.207 MyEA (EURUSD,H1) Score = R² x profit = 1893.42 (équité quasi linéaire) 2026.06.10 23:55:11.480 Core 4 pass 1572 returned result 312.07 (R² 0.41 : dents de scie pénalisées)
Equity CurveR²OnTesterRobustesse