OBJ_VLINE

Vertikale Linie.

ObjVLine

Hinweis

Wenn Sie eine vertikale Linie erstellen, können Sie den Anzeigemodus für Linien in alle Chart-Fenster (Eigenschaft OBJPROP_RAY) angeben.

Beispiel

Das folgende Skript erstellt und bewegt auf dem Chart eine vertikale Linie. Um die Eigenschaften eines grafischen Objekts zu erstellen und ändern, gibt es speziale Funktionen, die Sie "wie es ist" für Ihre eigenen Programme verwenden können.

//--- Beschreibung
#property description "Das Skript erstellt ein graphisches Objekt \"Vertikale Linie\"."
#property description "Datum des Ankerpunkts wird als Prozentsatz der Breite"
#property description "des Chartfensters in Bars."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string          InpName="VLine";     // Linienname
input int             InpDate=25;          // Datum der Linie %
input color           InpColor=clrRed;     // Linienfarbe
input ENUM_LINE_STYLE InpStyle=STYLE_DASH// Linienstil
input int             InpWidth=3;          // Linienbreite
input bool            InpBack=false;       // Die Linie im Hintergrund
input bool            InpSelection=true;   // Wählen zu bewegen
input bool            InpRay=true;         // Fortsetzung der Linie nach unten
input bool            InpHidden=true;      // Ausgeblendet in der Objektliste
input long            InpZOrder=0;         // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt eine vertikale Linie                                    |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // ID des Charts
                 const string          name="VLine",      // Linienname
                 const int             sub_window=0,      // Nummer des Unterfensters
                 datetime              time=0,            // Linienzeit
                 const color           clr=clrRed,        // Linienfarbe
                 const ENUM_LINE_STYLE style=STYLE_SOLID// Linienstil
                 const int             width=1,           // Linienbreite
                 const bool            back=false,        // Im Hintergrund
                 const bool            selection=true,    // Wählen um zu bewegen
                 const bool            ray=true,          // Fortsetzung der Linie nach unten
                 const bool            hidden=true,       // Ausgeblendet in der Objektliste
                 const long            z_order=0)         // Priorität auf Mausklick
  {
//--- wenn die Zeit der Linie nicht angegeben ist, wird sie auf den letzten Balken liegen
   if(!time)
      time=TimeCurrent();
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- eine vertikale Linie erstellen
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
     {
      Print(__FUNCTION__,
            ": Vertikale Linie konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- Farbe der Linie setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Linienstil setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- Linienbreite setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus
//--- Wenn Sie ein grafisches Objekt durch Funktion ObjectCreate erstellen, das Objekt
//--- kann nicht ausgewählt und verschoben werden. Innerhalb dieser Methode ist der Standardwert des Parameters selection
//--- true, was Sie das Objekt auswählen und verschieben erlaubt
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- aktivieren (true) oder deaktivieren (false) Anzeige der Linie in Unterfenster des Charts
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Vertikale Linie bewegen                                          |
//+------------------------------------------------------------------+
bool VLineMove(const long   chart_ID=0,   // ID des Charts
               const string name="VLine"// Linienname
               datetime     time=0)       // Linienzeit
  {
//--- wenn die Zeit der Linie nicht angegeben ist, bewegen wir sie auf den letzten Balken
   if(!time)
      time=TimeCurrent();
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- eine vertikale Linie bewegen
   if(!ObjectMove(chart_ID,name,0,time,0))
     {
      Print(__FUNCTION__,
            ": Vertikale Linie konnte nicht bewegt werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Löscht eine vertikale Linie                                      |
//+------------------------------------------------------------------+
bool VLineDelete(const long   chart_ID=0,   // ID des Charts
                 const string name="VLine"// Linienname
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- eine vertikale Linie löschen
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": Vertikale Linie konnte nicht gelöscht werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Überprüfen die Richtigkeit der Eingabeparameter
   if(InpDate<0 || InpDate>100)
     {
      Print("Fehler! Ungültige Eingabeparameter! ");
      return;
     }
//--- Die Anzahl der sichtbaren Bars im Chart-Fenster
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Array speichert Datumswerte, die verwendet werden,
//--- um die Koordinaten der Ankerpunkten der Linie zu setzen und zu ändern
   datetime date[];
//--- Speicher reservieren
   ArrayResize(date,bars);
//--- Füllen die Anordnung von Daten
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Kann nicht den Wert der Zeit kopieren! Fehlercode = ",GetLastError());
      return;
     }
//--- Wir definieren Punkte, um die Linie zu zeichnen
   int d=InpDate*(bars-1)/100;
//--- eine vertikale Linie erstellen
   if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpRay,InpHidden,InpZOrder))
      return;
//--- den Chart neu zeichnen und 1 Sekunde warten
   ChartRedraw();
   Sleep(1000);
//--- jetzt bewegen wir die Linie
//--- Schleifenzähler
   int h_steps=bars/2;
//--- Linie bewegen
   for(int i=0;i<h_steps;i++)
     {
      //--- den nächsten Wert nehmen
      if(d<bars-1)
         d+=1;
      //--- den Punkt bewegen
      if(!VLineMove(0,InpName,date[d]))
         return;
 //--- Überprüfen die Fakten von Zwangsabschaltung der Skript
      if(IsStopped())
         return;
      //--- den Chart neu zeichnen
      ChartRedraw();
      // Verzögerung 0.03 Sekunden
      Sleep(30);
     }
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//--- den Kanal aus dem Chart löschen
   VLineDelete(0,InpName);
   ChartRedraw();
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//---
  }