OBJ_HLINE

Ligne Horizontale.

ObjHLine

Exemple

Le script suivant crée et déplace une ligne horizontale 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 Horizontale\"."
#property description "Les coordonnées du point d'ancrage sont en pourcentage de la taille"
#property description "de la fenêtre du graphique."
//--- 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="HLine";     // Nom de la ligne
input int             InpPrice=25;         // Prix de la ligne, %
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            InpHidden=true;      // Caché dans la liste des objets
input long            InpZOrder=0;         // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Crée une ligne horizontale                                                                         |
//+----------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // identifiant du graphique
                 const string          name="HLine",      // Nom de la ligne
                 const int             sub_window=0,      // indice de sous-fenêtre
                 double                price=0,           // Prix de la ligne
                 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            hidden=true,       // caché dans la liste des objets
                 const long            z_order=0)         // priorité pour le clic de souris
  {
//--- si le prix n'est pas défini, la positionne au niveau du prix Bid actuel
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- crée une ligne horizontale
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
     {
      Print(__FUNCTION__,
            ": impossible de créer une ligne horizontale ! 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);
//--- 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 horizontale                                                                       |
//+----------------------------------------------------------------------------------------------------+
bool HLineMove(const long   chart_ID=0,   // identifiant du graphique
               const string name="HLine"// Nom de la ligne
               double       price=0)      // Prix de la ligne
  {
//--- si le prix de la ligne n'est pass défini, la déplace au niveau du prix Bid actuel
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- déplace la ligne horizontale
   if(!ObjectMove(chart_ID,name,0,0,price))
     {
      Print(__FUNCTION__,
            ": impossible de déplacer la ligne horizontale ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime une ligne horizontale                                                                     |
//+----------------------------------------------------------------------------------------------------+
bool HLineDelete(const long   chart_ID=0,   // identifiant du graphique
                 const string name="HLine"// Nom de la ligne
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprime la ligne horizontale
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": impossible de supprimer la ligne horizontale ! 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(InpPrice<0 || InpPrice>100)
     {
      Print("Erreur ! Valeurs incorrectes des paramètres d'entrée !");
      return;
     }
//--- taille du tableau des prix
   int accuracy=1000;
//--- tableau pour stocker les valeurs de prix à utiliser
//--- pour le réglage et la modification des coordonnées des points d'ancrage des lignes
   double price[];
//--- allocation mémoire
   ArrayResize(price,accuracy);
//--- remplit le tableau des prix
//--- trouve les valeurs les plus élevées et les plus faibles du graphique
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- définit un changement de prix et remplit le tableau
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- définit les points pour dessiner la ligne
   int p=InpPrice*(accuracy-1)/100;
//--- crée une ligne horizontale
   if(!HLineCreate(0,InpName,0,price[p],InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- redéssine le graphique et attend 1 seconde
   ChartRedraw();
   Sleep(1000);
//--- déplace maintenant la ligne
//--- compteur de boucle
   int v_steps=accuracy/2;
//--- déplace la ligne
   for(int i=0;i<v_steps;i++)
     {
      //--- utilise la valeur suivante
      if(p<accuracy-1)
         p+=1;
      //--- déplace le point
      if(!HLineMove(0,InpName,price[p]))
         return;
      //--- vérifie si l'exécution du script a été stoppée
      if(IsStopped())
         return;
      //--- redessine le graphique
      ChartRedraw();
     }
//--- délai de 1 seconde
   Sleep(1000);
//--- supprime du graphique
   HLineDelete(0,InpName);
   ChartRedraw();
//--- délai de 1 seconde
   Sleep(1000);
//---
  }