Créer un indicateur personnalisé MT5 en MQL5 : tutoriel complet

⏱ 3 min de lecture
Mis à jour le 11 mai 2026

Créer un indicateur personnalisé MT5 en MQL5 : Tutoriel Complet

Maîtrisez la création d’outils d’analyse uniques pour votre trading. Ce guide pas à pas vous apprend à développer votre propre indicateur technique sur MetaTrader 5, de la structure de base à l’optimisation avancée.

Dans l’univers compétitif du trading, disposer d’un avantage analytique est crucial. Les indicateurs par défaut de MetaTrader 5 sont puissants, mais ils ne peuvent pas s’adapter à chaque stratégie personnelle ou à chaque intuition de marché. C’est là que la création d’un indicateur personnalisé MT5 en MQL5 devient votre atout maître. Ce langage de programmation, conçu spécifiquement pour la plateforme, vous permet de transformer vos idées en signaux visuels concrets et automatisés. Que vous souhaitiez combiner des concepts existants, calculer une formule propriétaire ou visualiser des données de marché d’une nouvelle manière, MQL5 est la clé. Cet article est votre feuille de route complète. Nous allons démystifier le processus de développement, de l’installation de l’environnement au codage, au débogage et à l’optimisation de votre premier indicateur, même si vous partez de zéro en programmation.

1. Préparer son environnement de développement MQL5

À lire aussi : notre tutoriel pour copier des signaux Telegram en MQL5

Avant d’écrire la première ligne de code, il est essentiel de configurer correctement votre espace de travail. MetaTrader 5 intègre un éditeur puissant et gratuit : le MetaEditor. Pour y accéder, lancez MT5 et appuyez sur F4, ou cliquez sur “Outils” puis “MetaQuotes Language Editor”. Votre premier réflexe doit être de naviguer dans l’onglet “Navigateur” (Ctrl+N) : c’est l’arborescence de tous vos fichiers (Experts Advisors, indicateurs, scripts). Pour créer un indicateur, vous devez généralement partir d’un modèle. Allez dans “Fichier” > “Nouveau” ou cliquez sur l’icône correspondante. Dans l’assistant, sélectionnez “Indicateur personnalisé” et suivez les étapes. L’assistant génère automatiquement la structure de base avec les fonctions obligatoires comme OnInit() (initialisation) et OnCalculate() (calcul des données). Prenez le temps de parcourir les répertoires MQL5 dans votre explorateur de fichiers Windows ; comprendre où sont stockés vos fichiers sources (.mq5) et vos programmes exécutables (.ex5) facilite la gestion et la sauvegarde de vos projets.

2. Comprendre la structure fondamentale d’un indicateur

Un indicateur MQL5 est structuré comme un programme modulaire. Sa tête, ou “propriétés”, est définie par des directives de compilation qui dictent son comportement à MetaTrader. Ensuite viennent les fonctions centrales. Voici un squelette minimal commenté :

//+------------------------------------------------------------------+
//|                                             MonIndicateur.mq5    |
//+------------------------------------------------------------------+
#property copyright "Votre Nom"
#property link      "https://votresite.com"
#property version   "1.00"
#property indicator_chart_window      // S'affiche sur le graphique
#property indicator_buffers 1         // Nombre de tampons de données
#property indicator_plots   1         // Nombre de séries graphiques
#property indicator_label1  "Ma Ligne" // Nom de la série
#property indicator_type1   DRAW_LINE  // Type de dessin : ligne
#property indicator_color1  clrRed     // Couleur
#property indicator_style1  STYLE_SOLID // Style
#property indicator_width1  1          // Épaisseur

double MonBuffer[]; // Déclaration du tampon qui stockera les valeurs

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0, MonBuffer, INDICATOR_DATA); // Associe le tampon 0 au tableau
   PlotIndexSetString(0, PLOT_LABEL, "Ma Ligne"); // Étiquette pour la légende
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de calcul des indicateurs                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   // Ici, la logique de calcul pour chaque nouvelle barre
   int start = prev_calculated == 0 ? 0 : prev_calculated - 1;

   for(int i=start; i

La fonction OnCalculate est le cœur battant. Elle est appelée à chaque nouveau tick ou nouvelle barre. Les paramètres comme rates_total (nombre total de barres) et prev_calculated (valeur retournée au précédent appel) sont cruciaux pour optimiser les calculs et éviter de tout recalculer à chaque fois.

3. Coder la logique de calcul et manipuler les données

Ici, vous donnez vie à votre idée. Imaginons que vous vouliez créer une moyenne mobile pondérée par les volumes. Vous devez accéder aux tableaux de prix (close[]) et de volumes (tick_volume[]), effectuer des calculs itératifs et stocker le résultat dans votre tampon. La manipulation des tableaux en MQL5 est intuitive mais doit respecter leur indexation : l'élément le plus récent est à l'indice rates_total-1, le plus ancien à l'indice 0. Il est impératif de gérer les limites pour éviter les "array out of range" (erreur critique). Utilisez la variable start calculée à partir de prev_calculated pour ne traiter que les nouvelles données. Pour des calculs nécessitant un lookback (par exemple, un RSI sur 14 périodes), vérifiez toujours que rates_total est suffisamment grand avant de commencer la boucle. Pensez également à utiliser les fonctions mathématiques intégrées (MathMax, MathMin, NormalizeDouble) pour garantir la robustesse de vos calculs.

💡 Astuce Pro : Optimisez les performances
Pour les indicateurs complexes, évitez les boucles imbriquées inutiles sur tout l'historique. Utilisez intelligemment prev_calculated pour ne recalculer que la dernière barre. Déclarez vos variables de calcul récurrentes (comme les coefficients d'une moyenne) une seule fois dans OnInit() et stockez-les dans des tableaux ou des variables globales statiques. Cela réduit considérablement la charge processeur.

4. Tester, déboguer et styliser son indicateur

Après avoir écrit votre code, la phase de test est capitale. Compilez avec F7. Si des erreurs apparaissent dans le journal (Onglet "Experts"), corrigez-les ligne par ligne. Une fois compilé, votre indicateur apparaît dans la fenêtre "Navigateur" de MT5 sous "Indicateurs Personnalisés". Glissez-le sur un graphique. S'il ne s'affiche pas ou affiche des valeurs incohérentes, utilisez l'outil de débogage ultime : Print() et Comment(). Insérez Print("Valeur à la barre ", i, " = ", MonBuffer[i]); dans votre boucle de calcul pour inspecter les valeurs dans le journal. Comment() affiche des informations directement sur le graphique. Pour la stylisation, allez au-delà des #property de base. Utilisez PlotIndexSetInteger() dans OnInit() pour modifier dynamiquement le style, la couleur ou l'épaisseur en fonction de conditions (ex: une ligne qui devient verte au-dessus d'un niveau). Vous pouvez aussi ajouter des niveaux horizontaux avec #property indicator_levelcolor.

5. Aller plus loin : paramètres, alertes et gestion des timeframes

Pour rendre votre indicateur professionnel et interactif, ajoutez des paramètres externes modifiables par l'utilisateur via la fenêtre de propriétés. Utilisez le mot-clé input :

input int      Periode = 14;       // Période de calcul
input double   NiveauAlerte = 1.5; // Niveau pour l'alerte
input bool     SonAlerte = true;   // Activer le son ?

Pour implémenter des alertes, utilisez la fonction OnCalculate pour vérifier si une condition est remplie sur la barre la plus récente (indice 0). Ensuite, utilisez Alert() ou SendNotification() (pour les notifications push sur mobile). Pensez à utiliser un drapeau booléen pour éviter de déclencher l'alerte à chaque tick. La gestion des timeframes multiples est aussi possible. Si votre calcul nécessite des données d'une timeframe supérieure, utilisez les fonctions de séries temporelles comme iClose() ou CopyClose() en spécifiant le symbole et le timeframe désiré. Cela ouvre la porte à des indicateurs multi-timeframes très puissants.

💼 Votre stratégie mérite l'outil parfait ! Besoin d'un EA ou d'un indicateur sur-mesure, robuste et optimisé ? Demandez un devis gratuit pour un développement professionnel →

Questions fréquentes sur les indicateurs personnalisés MT5

Faut-il être un expert en programmation pour créer un indicateur en MQL5 ?

Pas nécessairement. Une logique de trading claire et une compréhension basique des concepts de programmation (variables, boucles, conditions) suffisent pour débuter. MQL5 est un langage relativement accessible, et de nombreux exemples sont disponibles dans la documentation et la communauté. Commencez par modifier des indicateurs existants pour apprendre la syntaxe.

Mon indicateur personnalisé peut-il être utilisé dans un Expert Advisor (EA) ?

Absolument, et c'est l'une de ses grandes forces. Vous pouvez appeler votre indicateur depuis un EA en utilisant la fonction iCustom(). Cela permet à votre robot de trading de prendre des décisions basées sur les signaux générés par votre logique propriétaire, créant ainsi un système de trading automatisé complet et cohérent.

Comment partager ou protéger mon indicateur personnalisé ?

Pour le partager, vous pouvez distribuer le fichier .ex5 (compilé) qui est exécutable mais dont le code source n'est pas lisible. Pour une protection accrue contre le décompilage basique, vous pouvez recourir à l'obfuscation de code proposée par MQL5. Pour une protection commerciale sérieuse, la solution standard est d'acheter une licence de protection via le marché MQL5, qui lie l'exécutable à un compte utilisateur spécifique.

Pourquoi mon indicateur se recharge-t-il ou disparaît-il à l'ouverture de MT5 ?

Cela est souvent dû à une erreur d'exécution lors de l'initialisation (OnInit). Vérifiez le journal "Experts" au démarrage pour voir les messages d'erreur. Les causes fréquentes sont : un accès à un tableau hors limites dès l'init, un problème de chargement d'historique, ou l'utilisation d'un objet graphique non correctement créé. Un code robuste doit inclure des vérifications (ArrayResize(), vérification de rates_total) dès le début de OnCalculate.

Recevez nos meilleurs conseils

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