OBJ_ARROW_LEFT_PRICE

Etiquette de Prix à Gauche

ObjArrowLeftPrice

Exemple

Le script suivant crée et déplace l'étiquette de prix à gauche 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 crée l'étiquette de prix à droite sur le graphique."
#property description "La coordonnée du point d'ancrage est définie en"
#property description "pourcentage de 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="LeftPrice";  // Nom de l'étiquette de prix
input int               InpDate=100;          // Date du point d'ancrage en %
input int               InpPrice=10;          // Prix du point d'ancrage en %
input color             InpColor=clrRed;      // Couleur de l'étiquette de prix
input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID// Style de la ligne de bordure
input int               InpWidth=2;           // Taille de l'étiquette de prix
input bool              InpBack=false;        // Etiquette 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 l'étiquette de prix à gauche                                                                  |
//+----------------------------------------------------------------------------------------------------+
bool ArrowLeftPriceCreate(const long            chart_ID=0,        // identifiant du graphique
                          const string          name="LeftPrice",  // nom de l'étiquette de prix
                          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 color           clr=clrRed,        // couleur de l'étiquette de prix
                          const ENUM_LINE_STYLE style=STYLE_SOLID// Style de la ligne de bordure
                          const int             width=1,           // taille de l'étiquette de prix
                          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 l'étiquette de prix
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_LEFT_PRICE,sub_window,time,price))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à créer l'étiquette de prix à gauche ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit la couleur de l'étiquette
   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 de l'étiquette
   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 l'étiquette 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 ArrowLeftPriceMove(const long   chart_ID=0,       // identifiant du graphique
                        const string name="LeftPrice"// nom de l'étiquette
                        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);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime l'étiquette de prix à gauche du graphique                                                 |
//+----------------------------------------------------------------------------------------------------+
bool ArrowLeftPriceDelete(const long   chart_ID=0,       // identifiant du graphique
                          const string name="LeftPrice"// nom de l'étiquette
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprime l'étiquette
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à supprimer l'étiquette de prix à gauche ! 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 de l'étiquette
   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 pour dessiner l'étiquette
   int d=InpDate*(bars-1)/100;
   int p=InpPrice*(accuracy-1)/100;
//--- crée l'étiquette de prix à gauche sur le graphique
   if(!ArrowLeftPriceCreate(0,InpName,0,date[d],price[p],InpColor,
      InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- redéssine le graphique et attend 1 seconde
   ChartRedraw();
   Sleep(1000);
//--- maintenant, déplace le point d'ancrage
//--- compteur de boucle
   int v_steps=accuracy*4/5;
//--- déplace le point d'ancrage
   for(int i=0;i<v_steps;i++)
     {
      //--- utilise la valeur suivante
      if(p<accuracy-1)
         p+=1;
      //--- déplace le point
      if(!ArrowLeftPriceMove(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 1 seconde
   Sleep(1000);
//--- supprime l'étiquette depuis le graphique
   ArrowLeftPriceDelete(0,InpName);
   ChartRedraw();
//--- délai de 1 seconde
   Sleep(1000);
//---
  }