OBJ_ARROW_RIGHT_PRICE

Etiquette de Prix à Droite

ObjArrowRightPrice

Exemple

Le script suivant crée et déplace la bonne étiquette de prix 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 une é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="RightPrice"// Nom de l'étiquette de prix
input int               InpDate=0;            // Date du point d'ancrage en %
input int               InpPrice=90;          // 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 à droite                                                                  |
//+----------------------------------------------------------------------------------------------------+
bool ArrowRightPriceCreate(const long            chart_ID=0,        // identifiant du graphique
                           const string          name="RightPrice"// nom de l'étiquette 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é pour le 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_RIGHT_PRICE,sub_window,time,price))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à créer l'étiquette de prix à droite ! 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 ArrowRightPriceMove(const long   chart_ID=0,        // identifiant du graphique
                         const string name="RightPrice"// 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 le prix de l'étiquette à droite depuis le graphique                                       |
//+----------------------------------------------------------------------------------------------------+
bool ArrowRightPriceDelete(const long   chart_ID=0,        // identifiant du graphique
                           const string name="RightPrice"// 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 à créer l'étiquette de prix à droite ! 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 le prix de l'étiquette à droite sur le graphique
   if(!ArrowRightPriceCreate(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>1)
         p-=1;
      //--- déplace le point
      if(!ArrowRightPriceMove(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
   ArrowRightPriceDelete(0,InpName);
   ChartRedraw();
//--- délai de 1 seconde
   Sleep(1000);
//---
  }