OBJ_ARROW

Objet flèche.

ObjArrow

Note

La position du point d'ancrage par rapport à l'objet peut être sélectionnée dans ENUM_ARROW_ANCHOR.

Les grandes flèches (plus de 5) ne peuvent être créées qu'en définissant la valeur appropriée de la propriété OBJPROP_WIDTH lors de l'écriture du code dans MetaEditor.

Le type de flèche désiré peut être sélectionné en utilisant l'un des codes de symbole de la police de caractères Wingdings.

Exemple

Le script suivant crée l'objet Flèche sur le graphique et modifie son type. 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 flèche aléatoire dans la fenêtre du 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="Arrow";        // Nom de la flêche
input int               InpDate=50;             // Date du point d'ancrage en %
input int               InpPrice=50;            // Prix du point d'ancrage en %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP;   // Type d'ancrage
input color             InpColor=clrDodgerBlue// Couleur de la flêche
input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID;   // Style de la ligne de bordure
input int               InpWidth=10;            // Taille de la flêche
input bool              InpBack=false;          // Flêche en arrière-plan
input bool              InpSelection=false;     // Mise en surbrillance pour déplacer
input bool              InpHidden=true;         // Caché dans la liste des objets
input long              InpZOrder=0;            // Priorité pour les clics de souris
//+----------------------------------------------------------------------------------------------------+
//| Crée la flèche                                                                                     |
//+----------------------------------------------------------------------------------------------------+
bool ArrowCreate(const long              chart_ID=0,           // identifiant du graphique
                 const string            name="Arrow",         // nom de la flêche
                 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 uchar             arrow_code=252,       // code de la flêche
                 const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM// position du point d'ancrage
                 const color             clr=clrRed,           // couleur de la flêche
                 const ENUM_LINE_STYLE   style=STYLE_SOLID,    // Style de la ligne de bordure
                 const int               width=3,              // taille de la flêche
                 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é des clics 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 une flèche
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": n'a pas réussi à créer une flèche ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- Définit le code de la flèche
   ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,arrow_code);
//--- définit le type d'ancrage
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- Définit la couleur de la flèche
   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 la flèche
   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 de la flèche 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 ArrowMove(const long   chart_ID=0,   // identifiant du graphique
               const string name="Arrow"// 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 code de la flêche                                                                       |
//+----------------------------------------------------------------------------------------------------+
bool ArrowCodeChange(const long   chart_ID=0,   // identifiant du graphique
                     const string name="Arrow"// nom de l'objet
                     const uchar  code=252)     // code de la flêche
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- modifie le code de la flêche
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,code))
     {
      Print(__FUNCTION__,
            ": impossible de modifier le code de la flêche ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Modifie le type d'ancrage                                                                          |
//+----------------------------------------------------------------------------------------------------+
bool ArrowAnchorChange(const long              chart_ID=0,        // identifiant du graphique
                       const string            name="Arrow",      // 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 la flêche                                                                                 |
//+----------------------------------------------------------------------------------------------------+
bool ArrowDelete(const long   chart_ID=0,   // identifiant du graphique
                 const string name="Arrow"// nom de la flêche
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprime la flêche
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": n'a pas réussi à supprimer la flêche ! 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 pour dessiner la flèche
   int d=InpDate*(bars-1)/100;
   int p=InpPrice*(accuracy-1)/100;
//--- crée une flèche sur le graphique
   if(!ArrowCreate(0,InpName,0,date[d],price[p],32,InpAnchor,InpColor,
      InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- redessine le graphique
   ChartRedraw();
//--- considére tous les cas de création de flèches dans la boucle
   for(int i=33;i<256;i++)
     {
      if(!ArrowCodeChange(0,InpName,(uchar)i))
         return;
      //--- vérifie si l'exécution du script a été stoppée
      if(IsStopped())
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai d'une demie seconde
      Sleep(500);
     }
//--- délai de 1 seconde
   Sleep(1000);
//--- efface la flèche du graphique
   ArrowDelete(0,InpName);
   ChartRedraw();
//--- délai de 1 seconde
   Sleep(1000);
//---
  }