MQL5

Détection de croisement de moyennes (sans repaint)

Compare les deux dernières valeurs CLÔTURÉES des MA rapide et lente : un croisement validé à la clôture ne se « dé-croise » plus, contrairement à un test sur la bougie en cours.

Cas d'usage

Signal d'entrée classique fiabilisé — l'anti-repaint est ce qui sépare backtest et réel.

Prérequis

MetaTrader 5, MQL5

MQL5
// Handles créés dans OnInit : iMA(.., 9, ..) et iMA(.., 21, ..)
int CrossSignal(int fastHandle, int slowHandle)
{
   double fast[], slow[];
   ArraySetAsSeries(fast, true);
   ArraySetAsSeries(slow, true);

   // Index 1 et 2 : uniquement des bougies clôturées
   if(CopyBuffer(fastHandle, 0, 1, 2, fast) != 2) return 0;
   if(CopyBuffer(slowHandle, 0, 1, 2, slow) != 2) return 0;

   bool crossUp   = (fast[1] <= slow[1] && fast[0] > slow[0]);
   bool crossDown = (fast[1] >= slow[1] && fast[0] < slow[0]);

   if(crossUp)   return  1;
   if(crossDown) return -1;
   return 0;
}

Résultat

2026.06.10 13:00:00.045  CrossEA (EURUSD,H1)  MA9 : 1.08401 -> 1.08422 | MA21 : 1.08418 -> 1.08415
2026.06.10 13:00:00.046  CrossEA (EURUSD,H1)  Croisement HAUSSIER validé à la clôture -> signal +1
2026.06.10 14:00:00.039  CrossEA (EURUSD,H1)  MA9 1.08440 > MA21 1.08421 (déjà au-dessus) -> signal 0
2026.06.10 14:00:00.040  CrossEA (EURUSD,H1)  Index 1-2 only : le signal ne peut plus se « dé-croiser »
MA CrossRepaintSignaliMA

Snippets liés

Retour au Data Lab