Gérer plusieurs timeframes dans un EA MQL5 sans indicateur externe

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

Gérer plusieurs timeframes dans un EA MQL5 sans indicateur externe

Découvrez comment analyser plusieurs unités de temps (M5, H1, H4, D1) directement depuis votre Expert Advisor MQL5, sans charger d’indicateur personnalisé. Une méthode robuste pour filtrer vos signaux et éviter les faux breakouts.

Pourquoi utiliser plusieurs timeframes dans un EA MQL5 sans indicateur externe ?

Lorsque l’on développe un robot de trading, la tentation est grande d’ajouter des indicateurs pour chaque timeframe. Pourtant, la plupart des EAs les plus performants se basent sur l’action du prix brute (prix Open, High, Low, Close) sur différentes périodes. L’approche “multiple timeframes ea mql5 sans indicateur” présente plusieurs avantages :

  • Performance accrue : Moins d’appels à des indicateurs signifie moins de calculs et un EA plus rapide.
  • Fiabilité : Les données de prix sont toujours disponibles, même en cas de problème de connexion.
  • Transparence : Vous comprenez exactement ce que votre EA analyse, sans boîte noire.
  • Compatibilité : Fonctionne sur tous les brokers, sans dépendre d’indicateurs tiers.

Dans cet article, nous allons construire un squelette d’EA capable de lire les prix de n’importe quel timeframe (M1 à MN1) en utilisant uniquement les fonctions natives de MQL5 : CopyRates et iTime.

Étape 1 : Récupérer les données de plusieurs timeframes avec CopyRates

La fonction clé pour implémenter un multiple timeframes ea mql5 sans indicateur est CopyRates. Elle permet de copier en une seule fois les données OHLCV (Open, High, Low, Close, Volume) d’un symbole et d’un timeframe donné dans un tableau de structures MqlRates.

//--- Exemple : Récupérer les 3 dernières bougies de H1 et H4
MqlRates ratesH1[], ratesH4[];
ArraySetAsSeries(ratesH1, true);
ArraySetAsSeries(ratesH4, true);

// Copie des 3 bougies H1
int copiedH1 = CopyRates(_Symbol, PERIOD_H1, 0, 3, ratesH1);
if(copiedH1 != 3) { Print("Erreur copie H1"); return; }

// Copie des 3 bougies H4
int copiedH4 = CopyRates(_Symbol, PERIOD_H4, 0, 3, ratesH4);
if(copiedH4 != 3) { Print("Erreur copie H4"); return; }

// Maintenant, vous pouvez lire :
// ratesH1[0].close  // Fermeture de la dernière bougie H1
// ratesH4[0].high   // Plus haut de la dernière bougie H4

Astuce : Utilisez ArraySetAsSeries pour que l’index 0 corresponde à la bougie la plus récente. Cela rend le code plus intuitif.

Étape 2 : Créer une structure de données pour gérer les timeframes dynamiquement

Pour éviter de dupliquer le code pour chaque timeframe, nous allons créer une structure et une fonction utilitaire. Cette approche rend votre multiple timeframes ea mql5 sans indicateur modulaire et facile à étendre.

//--- Définition de la structure
struct TimeframeData
{
   ENUM_TIMEFRAMES   tf;        // Timeframe (ex: PERIOD_H1)
   MqlRates          rates[];   // Tableau des bougies
   datetime          lastUpdate; // Dernière mise à jour
};

//--- Fonction pour mettre à jour un timeframe
bool UpdateTimeframe(TimeframeData &data, int bars=3)
{
   if(TimeCurrent() - data.lastUpdate < PeriodSeconds(data.tf)/2)
      return true; // Pas besoin de mettre à jour trop souvent

   ArraySetAsSeries(data.rates, true);
   int copied = CopyRates(_Symbol, data.tf, 0, bars, data.rates);
   if(copied != bars)
      return false;

   data.lastUpdate = TimeCurrent();
   return true;
}

//--- Utilisation dans OnTick()
TimeframeData tfH1, tfH4;
tfH1.tf = PERIOD_H1;
tfH4.tf = PERIOD_H4;

if(!UpdateTimeframe(tfH1) || !UpdateTimeframe(tfH4))
   return; // Sortie si les données ne sont pas disponibles

Étape 3 : Analyser la tendance principale en comparant les timeframes

Le cœur d'un multiple timeframes ea mql5 sans indicateur réside dans la logique de confirmation. Voici une méthode simple pour déterminer la tendance :

  1. Tendance haussière : Le plus bas de la bougie H4 actuelle est supérieur au plus bas de la bougie H4 précédente, ET la bougie H1 est haussière (close > open).
  2. Tendance baissière : Le plus haut de la bougie H4 actuelle est inférieur au plus haut de la bougie H4 précédente, ET la bougie H1 est baissière.
//--- Exemple de logique de tendance
bool TendanceHaussiere()
{
   // H4 : creux ascendants
   if(ratesH4[0].low > ratesH4[1].low && ratesH4[1].low > ratesH4[2].low)
   {
      // H1 : confirmation haussière
      if(ratesH1[0].close > ratesH1[0].open)
         return true;
   }
   return false;
}

bool TendanceBaissiere()
{
   // H4 : sommets descendants
   if(ratesH4[0].high < ratesH4[1].high && ratesH4[1].high < ratesH4[2].high)
   {
      // H1 : confirmation baissière
      if(ratesH1[0].close < ratesH1[0].open)
         return true;
   }
   return false;
}
💡 Conseil Pro : N'utilisez pas plus de 3 timeframes dans un EA. Un combo gagnant est M15 (pour le signal), H1 (pour la tendance courte) et H4 (pour la tendance longue). Au-delà, vous risquez de trop filtrer et de manquer des trades. Testez toujours votre EA sur 3 ans de données historiques pour valider votre logique de confirmation.

Étape 4 : Intégrer la gestion des timeframes dans votre EA complet

Voici comment structurer la fonction OnTick() de votre multiple timeframes ea mql5 sans indicateur :

void OnTick()
{
   // 1. Mise à jour des données
   if(!UpdateTimeframe(tfM15, 5) || !UpdateTimeframe(tfH1, 3) || !UpdateTimeframe(tfH4, 3))
   {
      Print("Données timeframes non disponibles");
      return;
   }

   // 2. Filtre de tendance (H4 et H1)
   if(!TendanceHaussiere() && !TendanceBaissiere())
      return; // Pas de trade si tendance neutre

   // 3. Signal d'entrée (M15)
   bool signalAchat = (TendanceHaussiere() && SignalAchatM15());
   bool signalVente = (TendanceBaissiere() && SignalVenteM15());

   // 4. Exécution
   if(signalAchat && PositionsTotal() == 0)
      OuvrirAchat();
   if(signalVente && PositionsTotal() == 0)
      OuvrirVente();
}

//--- Fonction pour le signal sur M15 (exemple : breakout)
bool SignalAchatM15()
{
   // Prix actuel > plus haut des 2 dernières bougies M15
   return (ratesM15[0].close > ratesM15[1].high && ratesM15[1].high > ratesM15[2].high);
}

Étape 5 : Optimiser les performances et éviter les erreurs courantes

Pour que votre EA reste rapide et fiable :

  • Limitez le nombre de bougies copiées : Copiez 3 à 5 bougies par timeframe, pas 100.
  • Utilisez PeriodSeconds : Pour ne pas copier les données à chaque tick, mettez à jour les timeframes plus hautes (H4, D1) moins souvent.
  • Gérez les symboles multiples : Si votre EA trade sur plusieurs paires, créez un tableau de structures TimeframeData pour chaque symbole.
  • Testez avec le Strategy Tester : Activez "Tous les ticks" pour vérifier que votre EA réagit correctement aux changements de timeframes.
  • Attention aux décalages : Les timeframes plus hautes (H4, D1) se ferment à des heures fixes. Vérifiez rates[0].time pour savoir si la bougie est fermée ou en cours.

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

Questions fréquentes

Puis-je utiliser CopyRates avec un timeframe personnalisé (ex: 3 heures) ?

Non, CopyRates ne supporte que les timeframes standards (M1, M5, M15, M30, H1, H4, D1, W1, MN1). Pour un timeframe personnalisé, vous devrez soit utiliser des indicateurs personnalisés, soit agréger manuellement les données depuis un timeframe inférieur (ex: copier 12 bougies M15 pour simuler une bougie H3).

Mon EA ralentit avec 3 timeframes, que faire ?

Assurez-vous de ne copier que le nombre minimum de bougies nécessaires (3 à 5). Utilisez la vérification TimeCurrent() - data.lastUpdate pour limiter les appels à CopyRates. Sur un timeframe H4, une mise à jour toutes les 30 secondes est suffisante. Évitez également d'appeler CopyRates dans des boucles inutiles.

Comment éviter les erreurs de données lors du changement de symbole ?

Utilisez Symbol() pour vérifier que vous êtes sur le bon graphique. Si votre EA trade plusieurs paires, créez un dictionnaire (tableau associatif) avec le symbole comme clé. Avant chaque appel à CopyRates, vérifiez que le symbole est bien sélectionné avec SymbolSelect(symbol, true).

Est-ce que cette méthode fonctionne pour les indices et les matières premières ?

Oui, CopyRates fonctionne pour tous les instruments disponibles dans MetaTrader 5, qu'il s'agisse de forex, d'indices, de matières premières ou de cryptomonnaies. Assurez-vous simplement que le symbole est correct et que vous avez accès aux données historiques.

Recevez nos meilleurs conseils

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

Site realise par Agence FluxDigital