OBJ_VLINE

Ligne verticale.

ObjVLine

Note

Lors du dessin d'une ligne verticale, il est possible de définir le mode d'affichage de la ligne pour toutes les fenêtres (propriété OBJPROP_RAY).

Exemple

Le script suivant crée et déplace la ligne verticale 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 l'objet graphique \"Ligne Verticale\"."
#property description "Le point d'ancrage de la date est défini en pourcentage de"
#property description "la largeur de la fenêtre du graphique en barres."
//--- 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          InpName="VLine";     // Nom de la ligne
input int             InpDate=25;          // Date de l'évènement, %
input color           InpColor=clrRed;     // Couleur de la ligne
input ENUM_LINE_STYLE InpStyle=STYLE_DASH// Style de la ligne
input int             InpWidth=3;          // Largeur de ligne
input bool            InpBack=false;       // Ligne d'arrière-plan
input bool            InpSelection=true;   // Mise en surbrillance pour déplacer
input bool            InpRay=true;         // Prolongement de la ligne vers le bas
input bool            InpHidden=true;      // Caché dans la liste des objets
input long            InpZOrder=0;         // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Crée une ligne verticale                                                                           |
//+----------------------------------------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // identifiant du graphique
                 const string          name="VLine",      // nom de la ligne
                 const int             sub_window=0,      // indice de sous-fenêtre
                 datetime              time=0,            // line time
                 const color           clr=clrRed,        // couleur de la ligne
                 const ENUM_LINE_STYLE style=STYLE_SOLID// style de la ligne
                 const int             width=1,           // largeur de la ligne
                 const bool            back=false,        // en arrière plan
                 const bool            selection=true,    // mise en surbrillance pour le déplacement
                 const bool            ray=true,          // prolongement de la ligne vers le bas
                 const bool            hidden=true,       // caché dans la liste des objets
                 const long            z_order=0)         // priorité pour le clic de souris
  {
//--- si l'heure de la ligne n'est pas définie, la dessine sur la dernière barre
   if(!time)
      time=TimeCurrent();
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- crée une ligne verticale
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
     {
      Print(__FUNCTION__,
            " : impossible de créer une ligne verticale ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit la couleur de la ligne
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- définit le style d'affichage de la ligne
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- définit la largeur de la ligne
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- 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 la ligne à la souris
//--- lors de la création d'un objet graphique utilisant la fonction ObjectCreate, l'objet ne peut pas être
//--- mis en surbrillance et déplacé par défaut. Dans cette méthode, le paramètre de sélection
//--- est vrai par défaut, permettant de mettre en surbrillance et de déplacer l'objet
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- active (true) ou désactive (false) le mode d'affichage de la ligne dans les sous-fenêtres du graphique
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- 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 la ligne verticale                                                                         |
//+----------------------------------------------------------------------------------------------------+
bool VLineMove(const long   chart_ID=0,   // identifiant du graphique
               const string name="VLine"// nom de la ligne
               datetime     time=0)       // heure de la ligne
  {
//--- si l'heure de la ligne n'est pas définie, déplace la ligne sur la dernière barre
   if(!time)
      time=TimeCurrent();
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- déplace la ligne verticale
   if(!ObjectMove(chart_ID,name,0,time,0))
     {
      Print(__FUNCTION__,
            " : impossible de déplacer la ligne verticale ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime la ligne verticale                                                                        |
//+----------------------------------------------------------------------------------------------------+
bool VLineDelete(const long   chart_ID=0,   // identifiant du graphique
                 const string name="VLine"// nom de la ligne
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprme la ligne verticale
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            " : impossible de supprimer la ligne verticale ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script                                                                    |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
  {
//--- vérifie l'exactitude des paramètres d'entrée
   if(InpDate<0 || InpDate>100)
     {
      Print("Erreur ! Valeurs incorrectes des paramètres d'entrée !");
      return;
     }
//--- nombre de barres visibles dans la fenêtre du graphique
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- tableau pour stocker les valeurs de date à utiliser
//--- pour le réglage et la modification des coordonnées des points d'ancrage des lignes
   datetime date[];
//--- allocation mémoire
   ArrayResize(date,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;
     }
//--- définit les points pour dessiner la ligne
   int d=InpDate*(bars-1)/100;
//--- crée une ligne verticale
   if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpRay,InpHidden,InpZOrder))
      return;
//--- redéssine le graphique et attend 1 seconde
   ChartRedraw();
   Sleep(1000);
//--- déplace maintenant la ligne
//--- compteur de boucle
   int h_steps=bars/2;
//--- déplace la ligne
   for(int i=0;i<h_steps;i++)
     {
      //--- utilise la valeur suivante
      if(d<bars-1)
         d+=1;
      //--- déplace le point
      if(!VLineMove(0,InpName,date[d]))
         return;
      //--- vérifie si l'exécution du script a été stoppée
      if(IsStopped())
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0.03 secondes
      Sleep(30);
     }
//--- délai de 1 seconde
   Sleep(1000);
//--- supprime le canal du graphique
   VLineDelete(0,InpName);
   ChartRedraw();
//--- délai de 1 seconde
   Sleep(1000);
//---
  }