OBJ_VLINE

Diey çizgi.

ObjVLine

Not

Bir dikey çizgi çizerken, çizginin görüntülenme modunu, tüm çizelge pencereleri için ayarlamak mümkündür (OBJPROP_RAY özelliği).

Örnek

Aşağıdaki script, çizelge üzerinde bir dikey çizgi oluşturur ve taşır. Grafiksel nesne özelliklerini oluşturmak ve değiştirmek için özel fonksiyonlar geliştirilmiştir. Bu fonksiyonları kendi uygulamalarınızda da "aynı şekilde" kullanabilirsiniz.

//--- açıklama
#property description "Script, \"Dikey Çizgi\" grafiksel nesnesini çizer."
#property description "Tutturma noktası koordinatları, çizelge penceresi"
#property description "boyutunun yüzdesi şeklinde ayarlanır."
//--- betiğin çalıştırılması sırasında giriş parametreleri penceresini göster
#property script_show_inputs
//--- betiğin giriş parametreleri
input string          InpName="VLine";     // Çizgi ismi
input int             InpDate=25;          // Olay tarihi, %
input color           InpColor=clrRed;     // Çizgi rengi
input ENUM_LINE_STYLE InpStyle=STYLE_DASH// Çizgi stili
input int             InpWidth=3;          // Çizgi genişliği
input bool            InpBack=false;       // Arkaplan nesnesi
input bool            InpSelection=true;   // Taşımak için vurgula
input bool            InpRay=true;         // Çizginin aşağı doğru sürekliliği
input bool            InpHidden=true;      // Nesne listesinde gizle
input long            InpZOrder=0;         // Fare tıklaması önceliği
//+------------------------------------------------------------------+
//| Dikey çizgiyi oluştur                                            |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // çizelge tanımlayıcısı
                 const string          name="VLine",      // çizgi ismi
                 const int             sub_window=0,      // alt pencere indisi
                 datetime              time=0,            // çizgi zamanı
                 const color           clr=clrRed,        // çizgi rengi
                 const ENUM_LINE_STYLE style=STYLE_SOLID// çizgi stili
                 const int             width=1,           // çizgi genişliği
                 const bool            back=false,        // arkaplan nesnesi
                 const bool            selection=true,    // taşıma için vurgula
                 const bool            ray=true,          // çizginin aşağı doğru sürekliliği
                 const bool            hidden=true,       // nesne listesinde gizle
                 const long            z_order=0)         // fare ttıklaması önceliği
  {
//--- çizgi zamanı ayarlanmamışsa, son çubuk üzerinde çiz
   if(!time)
      time=TimeCurrent();
//--- hata değerini sıfırla
   ResetLastError();
//--- bir dikey çizgi oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
     {
      Print(__FUNCTION__,
            ": dikey çizginin oluşturulması başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- çizgi rengini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- çizgi görünüm stilini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- çizgi genişliğini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- ön-planda (false) veya arkaplanda (true) göster
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- çizgiyi fare ile taşıma modunu etkinleştir (true) veya devre dışı bırak (false)
//--- ObjectCreate fonksiyonu ile bir nesne oluşturulurken,
//--- nesne ön tanımlı olarak vurgulanamaz veya taşınamaz. Bu yöntemin içinde, parametre için ön tanımlı olarak 'true' değerinin
//--- seçilmesi, nesnenin vurgulanmasını ve taşınmasını mümkün kılar
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- çizgiyi, çizelge alt pencerelerinde görüntüleme modunu etkinleştir (true) veya devre dışı bırak (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- nesne listesinde grafiksel nesnenin adını sakla (true) veya göster (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- çizelge üzerinde fare tıklaması olayının alınması için özellik ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Dikey çizgiyi taşı                                               |
//+------------------------------------------------------------------+
bool VLineMove(const long   chart_ID=0,   // çizelge kimliği
               const string name="VLine"// çizgi ismi
               datetime     time=0)       // çizgi zamanı
  {
//--- eğer, çizginin zamanı ayarlanmamışsa, çizgiyi son çubuğa taşı
   if(!time)
      time=TimeCurrent();
//--- hata değerini sıfırla
   ResetLastError();
//--- dikey çizgiyi taşı
   if(!ObjectMove(chart_ID,name,0,time,0))
     {
      Print(__FUNCTION__,
            ": dikey çizginin taşınması başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Dikey çizgiyi sil                                                |
//+------------------------------------------------------------------+
bool VLineDelete(const long   chart_ID=0,   // çizelge kimliği
                 const string name="VLine"// çizgi ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- dikey çizgiyi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": dikey çizginin silinmesi başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- giriş parametrelerinin doğruluğunu kontrol et
   if(InpDate<0 || InpDate>100)
     {
      Print("Hata! Hatalı giriş parametresi değerleri!");
      return;
     }
//--- çizelge penceresindeki görünür çubukların sayısı
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- çizginin tutturma noktası koordinatlarını ayarlamak ve değiştirmek için
//--- tarih değerlerini depolayacak bir dizi
   datetime date[];
//--- bellek tahsisi
   ArrayResize(date,bars);
//--- tarih dizisini doldur
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Zaman değerlerinin kopyalanması başarısız oldu! Hata kodu = ",GetLastError());
      return;
     }
//--- çizgiyi çizmek için noktaları tanımla
   int d=InpDate*(bars-1)/100;
//--- bir dikey çizgi oluştur
   if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpRay,InpHidden,InpZOrder))
      return;
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- şimdi, çizgiyi taşı
//--- döngü sayacı
   int h_steps=bars/2;
//--- çizgiyi taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(d<bars-1)
         d+=1;
      //--- tutturma noktasını taşı
      if(!VLineMove(0,InpName,date[d]))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
      // 0.03 saniyelik gecikme
      Sleep(30);
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- kanalı çizelgeden sil
   VLineDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }