OBJ_TEXT

Objet Texte.

ObjText

Note

La position du point d'ancrage relative au texte peut être sélectionné dans l'énumération ENUM_ANCHOR_POINT. Vous pouvez également changer l'angle de pente du texte en utilisant la propriété OBJPROP_ANGLE.

Exemple

Le script suivant crée plusieurs objets Texte sur le graphique. Des fonctions spéciales ont été développées pour créer et modifier les propriétés de l'objet graphique. Vous pouvez utiliser ces fonctions "telles quelles" dans vos propres applications.

 

//--- description
#property description "Le script dessine un objet graphique \"Texte\"."
//--- affichage de la fenêtre des paramètres d'entrée lors du lancement du script
#property script_show_inputs
//--- paramètres d'entrée du script
input string            InpFont="Arial";         // Police de caractères
input int               InpFontSize=10;          // Taille de la police de caractères
input color             InpColor=clrRed;         // Couleur
input double            InpAngle=90.0;           // Angle de pente en degrés
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_LEFT;   // type d'ancrage
input bool              InpBack=false;           // Objet en arrière-plan
input bool              InpSelection=false;      // Mise en surbrillance pour déplacer
input bool              InpHidden=true;          // Caché dans la liste des objets
input long              InpZOrder=0;             // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Création de l'objet Texte                                                                          |
//+----------------------------------------------------------------------------------------------------+
bool TextCreate(const long              chart_ID=0,               // identifiant du graphique
                const string            name="Text",              // nom de l'objet
                const int               sub_window=0,             // indice de sous-fenêtre
                datetime                time=0,                   // heure du point d'ancrage
                double                  price=0,                  // prix du point d'ancrage
                const string            text="Text",              // le texte lui-même
                const string            font="Arial",             // police de caractères
                const int               font_size=10,             // taille de la police de caractères
                const color             clr=clrRed,               // couleur
                const double            angle=0.0,                // pente du texte
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER// type d'ancrage
                const bool              back=false,               // en arrière plan
                const bool              selection=false,          // mise en surbrillance pour le déplacement
                const bool              hidden=true,              // caché dans la liste des objets
                const long              z_order=0)                // priorité pour le clic de souris
  {
//--- Définit les coordonnées du point d'ancrage si elles ne sont pas définies
   ChangeTextEmptyPoint(time,price);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- crée l'objet Texte
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
     {
      Print(__FUNCTION__,
            " : impossible de créer l'objet \"Texte\" ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit le texte
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- définit la police de caractères du texte
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- définit la taille de la police de caractères
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- définit l'angle de pente du texte
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- définit le type d'ancrage
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- définit la couleur
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- affiche en premier plan (false) ou en arrière-plan (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- active (true) ou désactive (false) le mode de déplacement de l'objet avec la souris
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- masque (true) ou affiche (false) le nom de l'objet graphique dans la liste des objets
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- définit la priorité pour recevoir l'événement d'un clic de souris dans le graphique
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Déplace le point d'ancrage                                                                         |
//+----------------------------------------------------------------------------------------------------+
bool TextMove(const long   chart_ID=0,  // identifiant du graphique
              const string name="Text"// nom de l'objet
              datetime     time=0,      // coordonnées du point d'ancrage temporel
              double       price=0)     // coordonnées du point d'ancrage prix
  {
//--- si la position du point n'est pas définie, le déplace vers la barre courante du prix Bid
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- déplace le point d'ancrage
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            " : impossible de déplacer le point d'ancrage ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Modifie le texte de l'objet                                                                        |
//+----------------------------------------------------------------------------------------------------+
bool TextChange(const long   chart_ID=0,  // identifiant du graphique
                const string name="Text"// nom de l'objet
                const string text="Text"// texte
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- modifie le texte de l'objet
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            " : impossible de modifier le texte ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime l'objet Texte                                                                             |
//+----------------------------------------------------------------------------------------------------+
bool TextDelete(const long   chart_ID=0,  // identifiant du graphique
                const string name="Text"// nom de l'objet
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprime l'objet
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            " : impossible de créer l'objet \"Texte\" ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Vérifie les valeurs du point d'ancrage et définit les valeurs par défaut                           |
//| pour les points vides                                                                              |
//+----------------------------------------------------------------------------------------------------+
void ChangeTextEmptyPoint(datetime &time,double &price)
  {
//--- si l'heure du point n'est pas définie, elle sera sur la barre courante
   if(!time)
      time=TimeCurrent();
//--- si le prix du point n'est pas défini, il aura la valeur Bid
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script                                                                    |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
  {
   datetime date[]; // tableau pour stocker les dates des barres visibles
   double   low[];  // tableau pour stocker les prix Low des barres visibles
   double   high[]; // tableau pour stocker les prix High des barres visibles
//--- nombre de barres visibles dans la fenêtre du graphique
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- allocation mémoire
   ArrayResize(date,bars);
   ArrayResize(low,bars);
   ArrayResize(high,bars);
//--- remplit le tableau de dates
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("N'a pas réussi à copier les valeurs de l'heure ! Code d'erreur = ",GetLastError());
      return;
     }
//--- remplit le tableau des prix Low
   if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
     {
      Print("N'a pas réussi à copier les valeurs des prix Low ! Code d'erreur = ",GetLastError());
      return;
     }
//--- remplit le tableau des prix High
   if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
     {
      Print("N'a pas réussi à copier les valeurs des prix High ! Code d'erreur = ",GetLastError());
      return;
     }
//--- définit à quelle fréquence les textes doivent être affichés
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- définit le pas
   int step=1;
   switch(scale)
     {
      case 0:
         step=12;
         break;
      case 1:
         step=6;
         break;
      case 2:
         step=4;
         break;
      case 3:
         step=2;
         break;
     }
//--- crée les textes pour les valeurs High et Low des barres (avec les gaps)
   for(int i=0;i<bars;i+=step)
     {
      //--- crée les textes
      if(!TextCreate(0,"TextHigh_"+(string)i,0,date[i],high[i],DoubleToString(high[i],5),InpFont,InpFontSize,
         InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      if(!TextCreate(0,"TextLow_"+(string)i,0,date[i],low[i],DoubleToString(low[i],5),InpFont,InpFontSize,
         InpColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      //--- vérifie si l'exécution du script a été stoppée
      if(IsStopped())
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0,05 secondes
      Sleep(50);
     }
//--- délai d'une demie seconde
   Sleep(500);
//--- supprime les textes
   for(int i=0;i<bars;i+=step)
     {
      if(!TextDelete(0,"TextHigh_"+(string)i))
         return;
      if(!TextDelete(0,"TextLow_"+(string)i))
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0,05 secondes
      Sleep(50);
     }
//---
  }