MQL5

Detección de cruce de medias (sin repaint)

Compara los dos últimos valores CERRADOS de las MA rápida y lenta: un cruce validado al cierre ya no se «descruza», a diferencia de un test sobre la vela en curso.

Requisitos

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

Resultado

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 relacionados

Volver al Data Lab