Reconnexion automatique EA MT5 : gérer les coupures de connexion en MQL5

⏱ 6 min de lecture
Mis à jour le 26 mai 2026

Reconnexion automatique EA MT5 : gérer les coupures de connexion en MQL5

Découvrez comment implémenter un système de reconnexion automatique pour votre Expert Advisor MT5, garantissant une continuité de trading même en cas de coupure réseau ou de redémarrage du terminal. Une solution robuste en MQL5 pour protéger vos stratégies algorithmiques.

Pourquoi la reconnexion automatique est cruciale pour votre EA MT5

Les coupures de connexion représentent l’un des risques les plus sous-estimés en trading algorithmique. Que ce soit une panne internet, un redémarrage du serveur MetaTrader ou une mise à jour du terminal, chaque interruption peut avoir des conséquences désastreuses sur vos performances. Sans système de reconnexion automatique, votre EA reste inactif pendant des heures, voire des jours, manquant des opportunités de trading cruciales ou pire, laissant des positions ouvertes sans gestion.

Les traders expérimentés savent que la fiabilité d’un système de trading ne se mesure pas uniquement à sa rentabilité, mais aussi à sa capacité à fonctionner 24h/24 et 7j/7. Un EA qui se déconnecte régulièrement peut générer des pertes importantes, surtout sur des marchés volatils comme le Forex ou les indices boursiers. La solution réside dans l’implémentation d’un mécanisme de reconnexion automatique en MQL5, qui surveille en permanence l’état de la connexion et réactive l’EA instantanément après une coupure.

Étape 1 : Détecter les coupures de connexion en MQL5

La première étape pour gérer les reconnexions est de savoir détecter quand votre EA perd la connexion. MQL5 fournit plusieurs fonctions utiles pour surveiller l’état du terminal. Voici comment implémenter une vérification efficace dans votre code :

//+------------------------------------------------------------------+
//| Fonction de vérification de connexion                            |
//+------------------------------------------------------------------+
bool IsConnectionAlive()
  {
   // Vérifier l'état du terminal
   if(!TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      Print("Connexion perdue !");
      return false;
     }
   
   // Vérifier que les cotations sont à jour
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      Print("Trading non autorisé - connexion instable");
      return false;
     }
   
   // Vérifier le dernier tick reçu
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
     {
      datetime last_time = last_tick.time;
      if(TimeCurrent() - last_time > 60) // Plus de 60 secondes sans tick
        {
         Print("Aucun tick reçu depuis plus de 60 secondes");
         return false;
        }
     }
   
   return true;
  }

Cette fonction vérifie trois éléments essentiels : l’état de connexion du terminal, l’autorisation de trading et la fraîcheur des cotations. En combinant ces vérifications, vous obtenez une détection fiable des coupures de connexion.

Étape 2 : Mettre en place la boucle de reconnexion automatique

Une fois que vous pouvez détecter les coupures, il faut implémenter un mécanisme de reconnexion automatique. Voici la structure recommandée pour votre EA MT5 :

//+------------------------------------------------------------------+
//| Paramètres de reconnexion                                        |
//+------------------------------------------------------------------+
input int MaxReconnectAttempts = 10;    // Nombre maximum de tentatives
input int ReconnectDelay = 5000;        // Délai entre tentatives (ms)
input bool EnableAutoReconnect = true;  // Activer la reconnexion

//+------------------------------------------------------------------+
//| Fonction principale de reconnexion                               |
//+------------------------------------------------------------------+
void CheckAndReconnect()
  {
   if(!EnableAutoReconnect)
      return;
   
   static int reconnect_attempts = 0;
   static datetime last_reconnect = 0;
   
   // Vérifier si la connexion est perdue
   if(!IsConnectionAlive())
     {
      // Limiter les tentatives
      if(reconnect_attempts >= MaxReconnectAttempts)
        {
         Print("Nombre maximum de tentatives atteint. Arrêt de l'EA.");
         ExpertRemove();
         return;
        }
      
      // Éviter les reconnexions trop fréquentes
      if(TimeCurrent() - last_reconnect < 5)
         return;
      
      reconnect_attempts++;
      last_reconnect = TimeCurrent();
      
      Print("Tentative de reconnexion n°", reconnect_attempts);
      
      // Essayer de reconnecter le terminal
      if(!TerminalInfoInteger(TERMINAL_CONNECTED))
        {
         // Forcer la reconnexion via le menu contextuel
         // Note : cette partie nécessite une API externe
         // Utiliser ShellExecute ou similaire
        }
      
      // Attendre avant la prochaine tentative
      Sleep(ReconnectDelay);
     }
   else
     {
      // Réinitialiser le compteur si la connexion est rétablie
      if(reconnect_attempts > 0)
        {
         Print("Connexion rétablie après ", reconnect_attempts, " tentatives");
         reconnect_attempts = 0;
        }
     }
  }

Cette boucle de reconnexion automatique limite le nombre de tentatives pour éviter de surcharger le système, tout en assurant une reprise rapide après une coupure. L’utilisation d’un compteur statique permet de suivre l’historique des tentatives.

Étape 3 : Gérer les positions ouvertes pendant la coupure

Une coupure de connexion peut survenir alors que votre EA a des positions ouvertes. Il est essentiel de prévoir un mécanisme pour gérer ces positions lors de la reconnexion :

//+------------------------------------------------------------------+
//| Gestion des positions après reconnexion                          |
//+------------------------------------------------------------------+
void ManageOpenPositionsAfterReconnect()
  {
   // Récupérer toutes les positions ouvertes
   for(int i = PositionsTotal() - 1; i >= 0; i--)
     {
      if(PositionSelectByIndex(i))
        {
         ulong ticket = PositionGetInteger(POSITION_TICKET);
         string symbol = PositionGetString(POSITION_SYMBOL);
         double volume = PositionGetDouble(POSITION_VOLUME);
         double profit = PositionGetDouble(POSITION_PROFIT);
         
         Print("Position ouverte détectée : Ticket ", ticket,
               " Symbole ", symbol,
               " Volume ", volume,
               " Profit ", profit);
         
         // Vérifier si le stop loss ou take profit doit être mis à jour
         double sl = PositionGetDouble(POSITION_SL);
         double tp = PositionGetDouble(POSITION_TP);
         
         if(sl == 0 || tp == 0)
           {
            Print("Mise à jour des stops pour la position ", ticket);
            // Ajouter votre logique de gestion des risques ici
           }
        }
     }
  }

Cette fonction parcourt toutes les positions ouvertes après une reconnexion, affiche leur statut et peut mettre à jour les niveaux de stop loss si nécessaire. C’est une sécurité supplémentaire pour protéger votre capital.

Étape 4 : Automatiser la relance de l’EA après redémarrage du terminal

Le scénario le plus critique est le redémarrage complet du terminal MetaTrader. Dans ce cas, votre EA doit être relancé automatiquement. Voici comment implémenter une solution robuste :

//+------------------------------------------------------------------+
//| Script de relance automatique (à placer dans le dossier Scripts) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Vérifier si l'EA est déjà attaché                                |
//+------------------------------------------------------------------+
bool IsEAAttached(string ea_name)
  {
   for(int i = 0; i < ChartsTotal(); i++)
     {
      long chart_id = ChartFirst();
      if(ChartExpertName(chart_id) == ea_name)
         return true;
      chart_id = ChartNext(chart_id);
     }
   return false;
  }

//+------------------------------------------------------------------+
//| Attacher l'EA automatiquement                                    |
//+------------------------------------------------------------------+
void AttachEAAutomatically()
  {
   string ea_name = "MonExpertAdvisor"; // Nom de votre EA
   
   if(!IsEAAttached(ea_name))
     {
      long chart_id = ChartFirst();
      if(chart_id != -1)
        {
         // Attacher l'EA au premier graphique disponible
         ChartSetInteger(chart_id, CHART_SHOW, true);
         ExpertRemove();
         Sleep(1000);
         
         // Utiliser ChartApplyTemplate ou une méthode externe
         // Note : nécessite l'utilisation de l'API MQL5 ou d'un script externe
        }
     }
  }

Pour une solution complète, combinez ce script avec un programme externe (Batch, PowerShell ou application .NET) qui surveille le processus MetaTrader et relance le script automatiquement après un redémarrage.

Conseil pro : Pour une fiabilité maximale, implémentez un système de logging détaillé qui enregistre chaque événement de connexion/déconnexion. Utilisez FileOpen() et FileWrite() pour créer un fichier journal. Cela vous permettra d'analyser les patterns de coupures et d'optimiser votre stratégie de reconnexion. Pensez également à configurer des alertes par email via SendMail() pour être notifié en temps réel des coupures prolongées.

Besoin d'un EA sur-mesure avec reconnexion automatique ? Demander un devis gratuit

Questions fréquentes

Mon EA MT5 ne se reconnecte pas automatiquement après une coupure internet. Que faire ?

Vérifiez d'abord que votre EA inclut bien une fonction de vérification de connexion dans la fonction OnTick(). Assurez-vous que le paramètre EnableAutoReconnect est activé dans les inputs. Si le problème persiste, vérifiez que votre terminal MetaTrader n'est pas bloqué par un pare-feu ou un antivirus. Testez également avec une connexion différente (ex : partage de connexion mobile) pour isoler le problème.

Quelle est la meilleure fréquence de vérification de connexion pour un EA ?

La fréquence optimale dépend de votre stratégie de trading. Pour la plupart des cas, une vérification toutes les 1 à 5 secondes dans la fonction OnTick() est suffisante. Évitez de vérifier trop souvent (moins d'une seconde) pour ne pas surcharger le processeur. Pour les stratégies scalping, une vérification toutes les 500ms peut être justifiée, mais testez l'impact sur les performances.

Comment gérer les positions ouvertes si mon EA reste déconnecté plusieurs heures ?

Dans ce cas, la priorité est la protection du capital. Implémentez un mécanisme de stop loss dynamique qui s'active si la connexion n'est pas rétablie après X minutes. Vous pouvez également programmer des alertes par email pour être notifié et intervenir manuellement. Pour les stratégies long terme, envisagez d'utiliser un VPS (serveur privé virtuel) qui garantit une connexion stable 24h/24.

Est-il possible de relancer automatiquement l'EA après un redémarrage de Windows ?

Oui, c'est possible en combinant plusieurs techniques. Créez un script Batch qui lance MetaTrader avec les paramètres appropriés, puis utilisez le Planificateur de tâches Windows pour exécuter ce script au démarrage. Dans MetaTrader, utilisez un script MQL5 qui vérifie périodiquement si votre EA est attaché et le réattache si nécessaire. Vous pouvez également utiliser des outils tiers comme MT4/MT5 Manager pour une gestion plus avancée.

Recevez nos meilleurs conseils

1 email par semaine, désinscription en 1 clic. Pas de spam, jamais.

Site realise par Agence FluxDigital