//--- description
 #property description "Le script dessine \"Pouce vers le Bas\"."
 #property description "La coordonnée du point d'ancrage est définie en pourcentage de"
 #property description "la taille 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="ThumbDown";     // nom du signe
 input int               InpDate=25;              // Date du point d'ancrage en %
 input int               InpPrice=75;             // Prix du point d'ancrage en %
 input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // type d'ancrage
 input color             InpColor=clrRed;         // Couleur du signe
 input ENUM_LINE_STYLE   InpStyle=STYLE_DOT;      // Style de la ligne de bordure
 input int               InpWidth=5;              // Taille du signe
 input bool              InpBack=false;           // Signe en 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 le signe Pouce en Bas                                                                         |
 //+----------------------------------------------------------------------------------------------------+
 bool ArrowThumbDownCreate(const long              chart_ID=0,           // identifiant du graphique
                           const string            name="ThumbDown",     // nom du signe
                           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 ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // type d'ancrage
                           const color             clr=clrRed,           // Couleur du signe
                           const ENUM_LINE_STYLE   style=STYLE_SOLID,    // Style de la ligne de bordure
                           const int               width=3,              // Taille du signe
                           const bool              back=false,           // en arrière plan
                           const bool              selection=true,       // mise en surbrillance pour déplacer
                           const bool              hidden=true,          // caché dans la liste des objets
                           const long              z_order=0)            // priorité du clic de souris
   {
 //--- Définit les coordonnées du point d'ancrage si elles ne sont pas définies
    ChangeArrowEmptyPoint(time,price);
 //--- réinitialise la valeur d'erreur
    ResetLastError();
 //--- crée le signe
    if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_DOWN,sub_window,time,price))
      {
       Print(__FUNCTION__,
             " : n'a pas réussi à créer le signe \" Pouce en Bas\" ! Code d'erreur = ",GetLastError());
       return(false);
      }
 //--- définit le type d'ancrage
    ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
 //--- définit la couleur du signe
    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
 //--- définit le style de ligne de la bordure
    ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
 //--- définit la taille du signe
    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 (vrai) ou désactive (faux) le mode de déplacement du signal par 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 le point d'ancrage                                                                         |
 //+----------------------------------------------------------------------------------------------------+
 bool ArrowThumbDownMove(const long   chart_ID=0,       // identifiant du graphique
                         const string name="ThumbDown", // 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 type d'ancrage du signe Pouce en Bas                                                    |
 //+----------------------------------------------------------------------------------------------------+
 bool ArrowThumbDownAnchorChange(const long              chart_ID=0,        // identifiant du graphique
                                 const string            name="ThumbDown",  // nom de l'objet
                                 const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // type d'ancrage
   {
 //--- réinitialise la valeur d'erreur
    ResetLastError();
 //--- modifie le type d'ancrage
    if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
      {
       Print(__FUNCTION__,
             " : impossible de modifier le type d'ancrage ! Code d'erreur = ",GetLastError());
       return(false);
      }
 //--- exécution réussie
    return(true);
   }
 //+----------------------------------------------------------------------------------------------------+
 //| Supprime le signe Pouce en Bas                                                                     |
 //+----------------------------------------------------------------------------------------------------+
 bool ArrowThumbDownDelete(const long   chart_ID=0,       // identifiant du graphique
                           const string name="ThumbDown") // nom du signe
   {
 //--- réinitialise la valeur d'erreur
    ResetLastError();
 //--- efface le signe
    if(!ObjectDelete(chart_ID,name))
      {
       Print(__FUNCTION__,
             ": n'a pas réussi à supprimer le signe \"Pouce en Bas\" sign! 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 ChangeArrowEmptyPoint(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()
   {
 //--- vérifie l'exactitude des paramètres d'entrée
    if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>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);
 //--- taille du tableau des prix
    int accuracy=1000;
 //--- tableaux pour stocker les valeurs de date et de prix à utiliser
 //--- pour le réglage et la modification des coordonnées du point d'ancrage du signe
    datetime date[];
    double   price[];
 //--- allocation mémoire
    ArrayResize(date,bars);
    ArrayResize(price,accuracy);
 //--- 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
 //--- 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 en dessinant le signe
    int d=InpDate*(bars-1)/100;
    int p=InpPrice*(accuracy-1)/100;
 //--- crée le signe Pouce en Bas sur le graphique
    if(!ArrowThumbDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
       InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
      {
       return;
      }
 //--- redéssine le graphique et attend 1 seconde
    ChartRedraw();
    Sleep(1000);
 //--- maintenant, déplacez le point d'ancrage et changez sa position par rapport au signal
 //--- compteur de boucle
    int h_steps=bars/4;
 //--- déplace le point d'ancrage
    for(int i=0;i<h_steps;i++)
      {
       //--- utilise la valeur suivante
       if(d<bars-1)
          d+=1;
       //--- déplace le point
       if(!ArrowThumbDownMove(0,InpName,date[d],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 0,05 secondes
       Sleep(50);
      }
 //--- délai de 1 seconde
    Sleep(1000);
 //--- compteur de boucle
    int v_steps=accuracy/4;
 //--- déplace le point d'ancrage
    for(int i=0;i<v_steps;i++)
      {
       //--- utilise la valeur suivante
       if(p>1)
          p-=1;
       //--- déplace le point
       if(!ArrowThumbDownMove(0,InpName,date[d],price[p]))
          return;
       //--- vérifie si l'exécution du script a été stoppée
       if(IsStopped())
          return;
       //--- redessine le graphique
       ChartRedraw();
      }
 //--- modifie l'emplacement du point d'ancrage par rapport au signal
    ArrowThumbDownAnchorChange(0,InpName,ANCHOR_TOP);
 //--- redessine le graphique
    ChartRedraw();
 //--- délai de 1 seconde
    Sleep(1000);
 //--- efface le signe du graphique
    ArrowThumbDownDelete(0,InpName);
    ChartRedraw();
 //--- délai de 1 seconde
    Sleep(1000);
 //---
   } 
 |