Méthode de Lien avec un Objet

Les objets graphiques Texte, Etiquette, Bitmap et Etiquette Bitmap (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP et OBJ_BITMAP_LABEL) peuvent être ancrés de l'une des 9 façons définies par la propriété OBJPROP_ANCHOR.

Objet

Identifiant

X/Y

Largeur/Hauteur

Date/Prix

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Texte

OBJ_TEXT

Oui

Oui

Oui

Etiquette

OBJ_LABEL

Oui

Oui (en lecture seule)

Oui

Oui

Oui

Bouton

OBJ_BUTTON

Oui

Oui

Oui

Bitmap

OBJ_BITMAP

Oui (en lecture seule)

Oui

Oui

Etiquete Bitmap

OBJ_BITMAP_LABEL

Oui

Oui (en lecture seule)

Oui

Oui

Champ d'Edition

OBJ_EDIT

Oui

Oui

Oui

Etiquette Rectangle

OBJ_RECTANGLE_LABEL

Oui

Oui

Oui

Les considérations suivantes sont utilisées dans le tableau :

  • X/Y — coordonnées des points d'ancrage spécifiés en pixels relativement à un coin du graphique ;
  • Largeur/Hauteur — les objets ont une largeur et une hauteur. Pour "lecture seule", la largeur et la hauteur ne sont calculées qu'une seule fois lorsque l'objet est dessiné sur le graphique ;
  • Date/Prix — les coordonnées du point d'ancrage sont spécifiées avec la date et le prix ;
  • OBJPROP_CORNER — définit le coin du graphique relativement auquel les coordonnées du point d'ancrage sont spécifiées. Peut être l'une des 4 valeurs de l'énumération ENUM_BASE_CORNER ;
  • OBJPROP_ANCHOR — définit le point d'ancrage dans l'objet lui-même et peut être l'une des 9 valeurs de l'énumération ENUM_ANCHOR_POINT. Les coordonnées en pixels sont spécifiées depuis ce point particulier vers le coin sélectionné du graphique ;
  • OBJPROP_ANGLE — définit l'angle de rotation de l'objet dans le sens horaire.

La variante nécessaire peut être spécifiée en utilisant la fonction ObjectSetInteger(handle_du_graphique, nom_objet, OBJPROP_ANCHOR, anchor_point_mode),  où anchor_point_mode est l'une des valeurs de ENUM_ANCHOR_POINT.

ENUM_ANCHOR_POINT

Identifiant

Description

ANCHOR_LEFT_UPPER

Point d'ancrage dans le coin supérieur gauche

ANCHOR_LEFT

Point d'ancrage à gauche au centre

ANCHOR_LEFT_LOWER

Point d'ancrage dans le coin inférieur gauche

ANCHOR_LOWER

Point d'ancrage en bas au centre

ANCHOR_RIGHT_LOWER

Point d'ancrage dans le coin inférieur droit

ANCHOR_RIGHT

Point d'ancrage à droite au centre

ANCHOR_RIGHT_UPPER

Point d'ancrage dans le coin supérieur droit

ANCHOR_UPPER

Point d'ancrage en haut au centre

ANCHOR_CENTER

Point d'ancrage strictement au centre de l'objet

Les objets OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT et OBJ_CHART ont un point d'ancrage fixe situé dans le coin supérieur gauche (ANCHOR_LEFT_UPPER).

Exemple :

   string text_name="my_OBJ_TEXT_object";
   if(ObjectFind(0,text_name)<0)
     {
      Print("Objet ",text_name," non trouvé. Code d'erreur = ",GetLastError());
      //--- Récupère le prix maximal du graphique
      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
      //--- Crée l'objet Etiquette
      ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
      //--- Définit la couleur du texteSet color of the text
      ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
      //--- Définit la couleur d'arrière plan
      ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
      //--- Définit le texte pour l'objet Etiquette
      ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
      //--- Définit la police de caractères du texte
      ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
      //--- Définit la taille de la police de caractères
      ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
      //--- Lie l'objet au coin supérieur droit
      ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
      //--- Tourne l'objet de 90 degrés dans le sens horaire
      ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
      //--- Interdit la sélection de l'objet avec la souris
      ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
      //--- redessine l'objet
      ChartRedraw(0);
     }

Les objets graphiques Flèche (OBJ_ARROW) ont deux façons de lier leurs coordonnées. Les identifiants sont listés dans ENUM_ARROW_ANCHOR.

ENUM_ARROW_ANCHOR

Identifiant

Description

ANCHOR_TOP

Ancre sur le côté supérieur

ANCHOR_BOTTOM

Ancre sur le côté inférieur

Exemple :

void OnStart()
  {
//--- Tableaux supplémentaires
   double Ups[],Downs[];
   datetime Time[];
//--- Définit les tableaux en mode timeseries
   ArraySetAsSeries(Ups,true);
   ArraySetAsSeries(Downs,true);
   ArraySetAsSeries(Time,true);
//--- Crée un handle pour l'indicateur Fractals
   int FractalsHandle=iFractals(NULL,0);
   Print("FractalsHandle = ",FractalsHandle);
//--- Réinitialize la valeur de la dernière erreurSet Last error value to Zero
   ResetLastError();
//--- Essaye de copier les valeurs de l'indicateur
   int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
   if(copied<=0)
     {
      Print("Impossible de cpoier les fractales supérieures. Erreur = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- Essaye de copier les valeurs de l'indicateur
   copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
   if(copied<=0)
     {
      Print("Impossible de copier les fractales inférieures. Erreur = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- Copies les timeseries contenant les ouvertures des 1000 dernières barres
   copied=CopyTime(NULL,0,0,1000,Time);
   if(copied<=0)
     {
      Print("Impossible de copier l'heure d'Ouverture des 1000 dernières barres");
      return;
     }
 
   int upcounter=0,downcounter=0; // compte du nombre de flèches
   bool created;// reçoit les résultats des tentatives de création d'un objet
   for(int i=2;i<copied;i++)// Boucle sur les valeurs de l'indicateur iFractals
     {
      if(Ups[i]!=EMPTY_VALUE)// Fractale supérieure trouvée
        {
         if(upcounter<10)// Ne crée pas plus de 10 flèches "Vers le haut"
           {
            //--- Essaye de créer un objet "Vers le haut"
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
            if(created)// S'il est créé, personnalisons-le
              {
               //--- Le point d'ancrage est en-dessous afin de ne pas recouvrir la barre
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
               //--- Touche finale - la couleur
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
               upcounter++;
              }
           }
        }
      if(Downs[i]!=EMPTY_VALUE)// Fractale inférieure trouvée
        {
         if(downcounter<10)// Ne crée pas plus de 10 flèches "Vers le bas"
           {
            //--- Essaye de créer un objet "Vers le bas"
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
            if(created)// S'il est créé, personnalisons-le
              {
               //--- Le point d'ancrage est au-dessus afin de ne pas recouvrir la barre
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
               //--- Touche finale - la couleur
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
               downcounter++;
              }
           }
        }
     }
  }

Après l'exécution du script, le graphique ressemblera à celui-ci.

Place les marques des valeurs des fractales