Methode der Objektbindung

Die grafischen Objekte Text, Label, Bitmap und Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP und OBJ_BITMAP_LABEL) verfügen über eine der neun Arten der Bindung, die durch die OBJPROP_ANCHOR Eigenschaft gesetzt werden.

Objekt

Identifikator

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Ja

Ja

Ja

Label

OBJ_LABEL

Ja

Ja (read-only)

Ja

Ja

Ja

Button

OBJ_BUTTON

Ja

Ja

Ja

Bitmap

OBJ_BITMAP

Ja (read-only)

Ja

Ja

Bitmap Label

OBJ_BITMAP_LABEL

Ja

Ja (read-only)

Ja

Ja

Edit

OBJ_EDIT

Ja

Ja

Ja

Rectangle Label

OBJ_RECTANGLE_LABEL

Ja

Ja

Ja

In der Tabelle werden folgende Bezeichnungen verwendet:

  • X/Y – die Koordinaten des Bindepunkts werden in Pixel hinsichtlich einer der Ecken der Grafik angegeben;
  • Width/Height – Objekte haben Breite und Höhe. Wenn "read-only" angegeben ist, heißt das, dass die Höhe und die Breite erst nach dem Zeichnen des Objekts auf der Grafik berechnet werden;
  • Date/Price – das Paar Datum/Preis gibt die Koordinaten des Bindepunktes an;
  • OBJPROP_CORNER – gibt eine Ecke der Grafik an, in Hinsicht auf welche Koordinaten des Bindepunkts angegeben werden. Kann einen der vier Aufzählungswerte ENUM_BASE_CORNER annehmen;
  • OBJPROP_ANCHOR – gibt den Bindepunkt im Objekt selbst an und kann einen der 9 Aufzählungswerte ENUM_ANCHOR_POINT annehmen. Gerade von diesem Punkt werden Koordinaten in Pixel zur ausgewählten Ecke der Grafik angegeben;
  • OBJPROP_ANGLE – gibt den Drehungswinkel entgegen dem Uhrzeigersinn an.

Die notwendige Variante kann durch die Funktion ObjectSetInteger(handle_Chart, Name_Objekt, OBJPROP_ANCHOR, Verbindungs_Weg) angegeben werden, wo Verbindungs_Weg - einer der Werte von Enumeration  ENUM_ANCHOR_POINT ist.

ENUM_ANCHOR_POINT

Identifikator

Beschreibung

ANCHOR_LEFT_UPPER

Bindepunkt in der linken oberen Ecke

ANCHOR_LEFT

Bindepunkt links zentriert

ANCHOR_LEFT_LOWER

Bindepunkt in der linken unteren Ecke

ANCHOR_LOWER

Bindepunkt unten zentriert

ANCHOR_RIGHT_LOWER

Bindepunkt in der rechten unteren Ecke

ANCHOR_RIGHT

Bindepunkt rechts zentriert

ANCHOR_RIGHT_UPPER

Bindepunkt rechts zentriert

ANCHOR_UPPER

Bindepunkt oben zentriert

ANCHOR_CENTER

Bindepunkt im Objektzentrum

Die Objekte OBJ_BUTTON, OBJ_RECTANGLE_LABEL und OBJ_EDIT haben einen festen Bindepunkt in der linken oberen Ecke (ANCHOR_LEFT_UPPER).

Beispiel:

   string text_name="my_OBJ_TEXT_object";
   if(ObjectFind(0,text_name)<0)
     {
      Print("Object",text_name,"not found. Error code = ",GetLastError());
      //--- wir bekommen maximalen Preis des Charts
      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
      //--- erzeugen wir das Objekt Label
      ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
      //--- stellen wir Textfarbe fest
      ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
      //--- stellen wir Hintergrundfarbe fest 
      ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
      //--- stellen wir Text für Objekt Label fest
      ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
      //--- stellen wir Schriftgroesse der überschrift fest 
      ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
      //--- stellen wir Schriftgroesse fest 
      ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
      //--- stellen wir snap zum oberen rechten Winkel fest 
      ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
      //--- schwenken wir um 90 Grad gegen dem Uhrzeigerlauf 
      ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
      //--- verbieten wir Objekthervorheben mit der Maus 
      ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
      //--- zeichnen wir auf dem Chart 
      ChartRedraw(0);
     }

Graphische Objekte Arrow (OBJ_ARROW) haben nur 2 Snapverfahren ihrer Koordinaten. Identifikatoren werden in ENUM_ARROW_ANCHOR aufgezählt.

ENUM_ARROW_ANCHOR

Identifikator

Beschreibung

ANCHOR_TOP

Bindepunkt für Weiche befindet sich oben

ANCHOR_BOTTOM

Bindepunkt für Weiche befindet sich unten

Beispiel:

void OnStart()
  {
//--- Dienstfelder
   double Ups[],Downs[];
   datetime Time[];
//--- stellen wir für Felder Timeserienmerkmal fest 
   ArraySetAsSeries(Ups,true);
   ArraySetAsSeries(Downs,true);
   ArraySetAsSeries(Time,true);
//--- erzeugen wir handle des Indikators Fractals
   int FractalsHandle=iFractals(NULL,0);
   Print("FractalsHandle =",FractalsHandle);
//--- stellen wir Fehlerkode auf Null 
   ResetLastError();
//--- versuchen wir, Indikatorwert zu kopieren 
   int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
   if(copied<=0)
     {
      Print("Obere Fractals Kopieren Fehler. Error = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- versuchen wir Indikatorwerte zu kopieren 
   copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
   if(copied<=0)
     {
      Print("Untere Fractals Kopieren Fehler. Error = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- kopieren wir Zeitreihe mit der Eroeffnungszeit der letzten 1000 Bars
   copied=CopyTime(NULL,0,0,1000,Time);
   if(copied<=0)
     {
      Print("Nicht gelungen, Eroeffnungszeit der letzten 1000 Bars zu kopieren");
      return;
     }
 
   int upcounter=0,downcounter=0; // zählen wir die Weichen 
   bool created;// bekommen wir das Ergebnis des Versuches, ein Objekt zu erzeugen 
   for(int i=2;i<copied;i++)// sehen wir die Werte des Idikators iFractals durch
     {
      if(Ups[i]!=EMPTY_VALUE)// oberer Fraktal gefunden 
        {
         if(upcounter<10)// erzeugen nicht mehr als 10 Objekte "oben"
           {
            //--- versuchen wir das Objekt "oben" zu erzeugen
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
            if(created)// wenn erzeugt - machen wir tuning dafür 
              {
               //--- Ankerpunkt ist unten, um die Bar nicht zu bedecken 
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
               //--- letzter Strich - zeichnen
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
               upcounter++;
              }
           }
        }
      if(Downs[i]!=EMPTY_VALUE)// neuer Fraktal gefunden 
        {
         if(downcounter<10)// erzeugen wir nicht mehr als 10 Objekte "unten"
           {
            //--- vesuchen wir das Objekt "unten" zu erzeugen
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
            if(created)// wenn erzeugt  - machen wir tuning dafür 
              {
               //--- Bundepunkt ist oben, um die Bar nicht zu bedecken 
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
               //--- letzter Strich - zeichnen
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
               downcounter++;
              }
           }
        }
     }
  }

Nach der Durchführung von Script wird der Chart etwa so aussehen, wie auf diesem Bild.

Merkzeichenstellung nach Werten der Fractals