Indicateur MT4 d'informations sur un graphique

Modérateur : Administrateurs

Message
Auteur
Avatar de l’utilisateur
Fabien Labrousse
Administrateur
Messages : 17994
Inscription : 17 mars 2008, 19:41
Localisation : Paris, France

Indicateur MT4 d'informations sur un graphique

#1 Message par Fabien Labrousse »

J'aurais besoin d'un indicateur pour metatradeur 4 qui précise clairement et dans une police assez grosse et lisible la paire et l'unité de temps en cours d'étude en haut à gauche de ma plateforme.

Cet indicateur me serait utile notamment dans le cadre du live.

Actuellement je passe par un indicateur de ce type que j'ai récupéré du système THV, mais ca ne s'affiche pas en assez gros et il y a précisé en gras "THV V4" donc pas top.

Si quelqu'un a un indicateur de ce type ou est motivé pour le réalisé, ce vraiment top.

:D
Comparatif brokers, courtiers, banques, néobanques et exchanges crypto

La Structure (par VideoBourse) : Formation bourse sur mesure et évolutive pour optimiser votre compréhension et vos résultats

📊 Plateforme de Trading : ProRealTime 💱 Broker : IG

🤝 Contact et échanges avec la communauté : Discord, téléphone, LinkedIn, X (Twitter), Youtube...

Avatar de l’utilisateur
madjes
Administrateur
Messages : 1194
Inscription : 28 oct. 2008, 16:00

Re: Indicateur MT4 d'informations sur un graphique

#2 Message par madjes »

J'essaye de te faire ça dans l'aprem :wink:
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith

L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte

Avatar de l’utilisateur
madjes
Administrateur
Messages : 1194
Inscription : 28 oct. 2008, 16:00

Re: Indicateur MT4 d'informations sur un graphique

#3 Message par madjes »

Et voilà ton indicateur :mrgreen:
info_tf-paire.mq4
(1.95 Kio) Téléchargé 649 fois
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith

L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte

Avatar de l’utilisateur
madjes
Administrateur
Messages : 1194
Inscription : 28 oct. 2008, 16:00

Re: Indicateur MT4 d'informations sur un graphique

#4 Message par madjes »

Nouvelle version, avec choix de la couleur et une meilleur position sur le graph :)
info_tf-paire_v1.1.mq4
(2.24 Kio) Téléchargé 674 fois
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith

L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte

Avatar de l’utilisateur
Fabien Labrousse
Administrateur
Messages : 17994
Inscription : 17 mars 2008, 19:41
Localisation : Paris, France

Re: Indicateur MT4 d'informations sur un graphique

#5 Message par Fabien Labrousse »

Excellent, merci Madjes.
Comparatif brokers, courtiers, banques, néobanques et exchanges crypto

La Structure (par VideoBourse) : Formation bourse sur mesure et évolutive pour optimiser votre compréhension et vos résultats

📊 Plateforme de Trading : ProRealTime 💱 Broker : IG

🤝 Contact et échanges avec la communauté : Discord, téléphone, LinkedIn, X (Twitter), Youtube...

xvilain

Seize ans après : le code, remis à jour et commenté

#6 Message par xvilain »

Ce fil est un bel exemple de ce que le forum savait produire : une demande le matin, un indicateur fonctionnel l'après-midi, une version améliorée le lendemain. Merci encore à madjes.

Le besoin, lui, n'a pas vieilli — afficher gros et lisible l'instrument et l'unité de temps est indispensable dès qu'on enregistre une vidéo, qu'on fait un live ou qu'on jongle entre plusieurs graphiques. Comme les pièces jointes de 2010 ne sont pas toujours accessibles et que MetaQuotes ne délivre plus de nouvelles licences MT4, voici une version autonome à jour, avec les explications qui vont avec.

1. La version MQL4, complète et commentée

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|  Info instrument + unite de temps                                |
//|  Affichage en gros, coin parametrable                            |
//+------------------------------------------------------------------+
#property indicator_chart_window

extern string  Police        = "Arial Black";
extern int     TaillePolice  = 24;
extern color   Couleur       = clrGray;
extern int     Coin          = 0;    // 0=haut gauche 1=haut droit
                                     // 2=bas gauche  3=bas droit
extern int     DecalageX     = 12;
extern int     DecalageY     = 20;
extern bool    AfficherSpread = true;

string prefixe = "InfoChart_";

//+------------------------------------------------------------------+
string LibelleUT(int periode)
  {
   switch(periode)
     {
      case PERIOD_M1:  return("M1");
      case PERIOD_M5:  return("M5");
      case PERIOD_M15: return("M15");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H4:  return("H4");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
   return("UT " + IntegerToString(periode));
  }

//+------------------------------------------------------------------+
void PoserTexte(string nom, string texte, int taille, int decalY)
  {
   if(ObjectFind(nom) < 0)
      ObjectCreate(nom, OBJ_LABEL, 0, 0, 0);

   ObjectSet(nom, OBJPROP_CORNER,     Coin);
   ObjectSet(nom, OBJPROP_XDISTANCE,  DecalageX);
   ObjectSet(nom, OBJPROP_YDISTANCE,  decalY);
   ObjectSet(nom, OBJPROP_BACK,       true);
   ObjectSet(nom, OBJPROP_SELECTABLE, false);
   ObjectSetText(nom, texte, taille, Police, Couleur);
  }

//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }

//+------------------------------------------------------------------+
int deinit()
  {
   // menage indispensable : on retire nos objets et rien d'autre
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
     {
      string nom = ObjectName(i);
      if(StringFind(nom, prefixe) == 0) ObjectDelete(nom);
     }
   return(0);
  }

//+------------------------------------------------------------------+
int start()
  {
   string ligne1 = Symbol() + "   " + LibelleUT(Period());
   PoserTexte(prefixe + "L1", ligne1, TaillePolice, DecalageY);

   if(AfficherSpread)
     {
      double spread = (Ask - Bid) / (Point * (Digits == 3 || Digits == 5 ? 10 : 1));
      string ligne2 = "spread " + DoubleToStr(spread, 1) + " pips";
      PoserTexte(prefixe + "L2", ligne2, TaillePolice / 2,
                 DecalageY + TaillePolice + 10);
     }

   return(0);
  }
À déposer dans le dossier MQL4/Indicators, puis compiler.

2. Les cinq points qui font la différence entre un indicateur qui marche et un qui embête
  • Le nettoyage dans deinit(). C'est l'erreur la plus fréquente sur ce type d'indicateur : sans cette boucle, les étiquettes restent sur le graphique après avoir retiré l'indicateur, et on se retrouve à les supprimer à la main. Le préfixe sur le nom des objets sert précisément à ne supprimer que les siens et à ne pas effacer les tracés de l'utilisateur.
  • OBJPROP_BACK à true et OBJPROP_SELECTABLE à false. Le premier place le texte derrière les chandeliers, le second évite de le sélectionner ou de le déplacer par un clic malencontreux pendant un enregistrement.
  • OBJ_LABEL et non OBJ_TEXT. Un label est positionné en pixels par rapport à un coin de la fenêtre : il reste en place quand on fait défiler ou qu'on zoome. Un objet texte est ancré à une date et un prix, donc il disparaît de l'écran dès qu'on se déplace. C'est la différence entre les deux versions qu'on croise sur les forums.
  • Le paramètre Coin. Utile en pratique : le coin haut gauche est souvent occupé par le nom des indicateurs déjà chargés. Pouvoir basculer en bas à gauche évite la superposition.
  • Le calcul du spread. Attention au piège classique : sur un courtier à 5 décimales, un "point" vaut un dixième de pip. Sans la correction, l'affichage indique 15 au lieu de 1,5.
3. Les adaptations utiles selon l'usage
  • Pour du live ou de la vidéo, une taille de 28 à 32 et une couleur gris moyen fonctionnent bien : lisible sur l'enregistrement, sans écraser le graphique. Le gris est préférable au blanc ou au noir, il reste lisible sur les deux thèmes.
  • Pour distinguer démo et réel, on peut ajouter le type de compte, ce qui évite l'incident classique du trade passé sur le mauvais compte :

Code : Tout sélectionner

string type = (IsDemo() ? "DEMO" : "REEL");
  • [b)] Pour afficher l'heure du serveur[/b], utile quand on travaille sur des sessions : TimeToStr(TimeCurrent(), TIME_MINUTES). Rappel au passage — l'heure du serveur n'est pas la vôtre, elle correspond au fuseau du courtier, souvent GMT+2 ou +3.
4. Pour MT5

L'écosystème ayant basculé, voici les différences à connaître si vous portez ce code :
  • start() devient OnCalculate, init() devient OnInit, deinit() devient OnDeinit.
  • Les fonctions ObjectSet et ObjectSetText sont remplacées par ObjectSetInteger et ObjectSetString, avec le nom du graphique en premier paramètre.
  • OBJPROP_CORNER prend les constantes CORNER_LEFT_UPPER, CORNER_RIGHT_UPPER, etc., au lieu d'entiers.
  • Le libellé de l'unité de temps s'obtient directement avec EnumToString(_Period), ce qui rend la fonction LibelleUT inutile.
  • Il faut appeler ChartRedraw() après avoir modifié les objets, sinon l'affichage ne se rafraîchit pas toujours.
Et une nuance qui n'existait pas en 2010 : sur MT5, le nom du symbole peut porter un suffixe propre au courtier (NAS100.p, EURUSDm, etc.). Symbol() le renvoie tel quel, ce qui est en fait une bonne chose pour ce cas d'usage — on veut voir exactement l'instrument affiché.

5. Un mot sur le besoin lui-même

Ce type d'indicateur passe pour un gadget, il ne l'est pas. Le trade passé sur le mauvais graphique ou la mauvaise unité de temps est une erreur banale, et elle coûte plus cher que la plupart des erreurs d'analyse. Trois affichages gros et visibles — instrument, unité de temps, type de compte — suppriment une catégorie entière d'incidents pour dix lignes de code.

C'est aussi vrai en dehors de MetaTrader : sur n'importe quelle plateforme, prendre trente secondes pour rendre ces informations impossibles à manquer est un des meilleurs investissements de temps qu'on puisse faire sur son espace de travail.

Si quelqu'un veut la version MT5 complète plutôt que la liste des différences, je peux la poster.

Répondre