OBJ_ARROW_SELL

Signe de Vente.

ObjArrowSell

Exemple

Le script suivant crée et déplace le signal Sell 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 des signes \"Vente\" sur le 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 color InpColor=C'225,68,29'// Couleur des signaux
//+----------------------------------------------------------------------------------------------------+
//| Crée un signe de Vente                                                                             |
//+----------------------------------------------------------------------------------------------------+
bool ArrowSellCreate(const long            chart_ID=0,        // identifiant du graphique
                     const string          name="ArrowSell",  // 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 color           clr=C'225,68,29',  // Couleur du signe
                     const ENUM_LINE_STYLE style=STYLE_SOLID// Style de trait (en surbrillance)
                     const int             width=1,           // taille de la ligne (en surbrillance)
                     const bool            back=false,        // en arrière-plan
                     const bool            selection=false,   // 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_SELL,sub_window,time,price))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à créer le signe de \"Vente\" ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit la couleur du signe
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- définit un style de ligne (lorsqu'elle est en surbrillance)
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- définit la taille de la ligne (lorsqu'elle est en surbrillance)
   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
   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 ArrowSellMove(const long   chart_ID=0,       // identifiant du graphique
                   const string name="ArrowSell"// 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);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime le signal de Vente                                                                        |
//+----------------------------------------------------------------------------------------------------+
bool ArrowSellDelete(const long   chart_ID=0,       // identifiant du graphique
                     const string name="ArrowSell"// 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 de \"Vente\" ! 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()
  {
   datetime date[]; // tableau pour stocker les dates des barres visibles
   double   low[];  // tableau pour stocker les prix Low des barres visibles
   double   high[]; // tableau pour stocker les prix High des barres visibles
//--- nombre de barres visibles dans la fenêtre du graphique
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- allocation mémoire
   ArrayResize(date,bars);
   ArrayResize(low,bars);
   ArrayResize(high,bars);
//--- 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 Low
   if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
     {
      Print("N'a pas réussi à copier les valeurs des prix Low ! Code d'erreur = ",GetLastError());
      return;
     }
//--- remplit le tableau des prix High
   if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
     {
      Print("N'a pas réussi à copier les valeurs des prix High ! Code d'erreur = ",GetLastError());
      return;
     }
//--- crée des signaux de Vente en point High pour chaque barre visible
   for(int i=0;i<bars;i++)
     {
      if(!ArrowSellCreate(0,"ArrowSell_"+(string)i,0,date[i],high[i],InpColor))
         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);
     }
//--- modifie des signaux de Vente en point Low pour chaque barre visible
   for(int i=0;i<bars;i++)
     {
      if(!ArrowSellMove(0,"ArrowSell_"+(string)i,date[i],low[i]))
         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);
     }
//--- supprime les signaux de Vente
   for(int i=0;i<bars;i++)
     {
      if(!ArrowSellDelete(0,"ArrowSell_"+(string)i))
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0,05 secondes
      Sleep(50);
     }
//---
  }