OBJ_HLINE

Yatay çizgi.

ObjHLine

Örnek

Aşağıdaki script, bir yatay çizgi oluşturur ve onu çizelge üzerinde 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, \"Horizontal Line\" grafiksel nesnesini çizer."
#property description "Tutturma (çapa) 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="HLine";     // Çizgi ismi
input int             InpPrice=25;         // Çizgi fiyatı, %
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            InpHidden=true;      // Nesne listesinde gizle
input long            InpZOrder=0;         // Fare tıklaması önceliği
//+------------------------------------------------------------------+
//| Yatay çizgiyi oluştur                                            |
//+------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // çizelge kimliği
                 const string          name="HLine",      // çizelge ismi
                 const int             sub_window=0,      // alt pencere indisi
                 double                price=0,           // çizgi fiyatı
                 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            hidden=true,       // nesne listesinde gizle
                 const long            z_order=0)         // fare ttıklaması önceliği
  {
//--- eğer fiyat ayarlanmamışsa, mevcut Bid fiyatı seviyesine ayarla
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- hata değerini sıfırla
   ResetLastError();
//--- yatay çizgiyi oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
     {
      Print(__FUNCTION__,
            ": yatay çizgi oluşturulamadı! 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);
//--- 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);
  }
//+------------------------------------------------------------------+
//| Yatay çizgiyi taşı                                               |
//+------------------------------------------------------------------+
bool HLineMove(const long   chart_ID=0,   // çizelge kimliği
               const string name="HLine"// çizgi ismi
               double       price=0)      // çizgi fiyatı
  {
//--- eğer fiyat ayarlanmamışsa, mevcut Bid fiyatı seviyesine ayarla
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- hata değerini sıfırla
   ResetLastError();
//--- yatay çizgiyi taşı
   if(!ObjectMove(chart_ID,name,0,0,price))
     {
      Print(__FUNCTION__,
            ": yatay çizginin taşınması başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Yatay çizgiyi sil                                                |
//+------------------------------------------------------------------+
bool HLineDelete(const long   chart_ID=0,   // çizelge kimliği
                 const string name="HLine"// çizgi ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- yatay çizgiyi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": yatay ç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(InpPrice<0 || InpPrice>100)
     {
      Print("Hata! Hatalı giriş parametresi değerleri!");
      return;
     }
//--- fiyat dizisi büyüklüğü
   int accuracy=1000;
//--- tutturma noktası konumunu değiştirmek için kullanılacak
//--- tarih değerlerini depolayacak bir dizi
   double price[];
//--- bellek tahsisi
   ArrayResize(price,accuracy);
//--- fiyat dizisini değerlerle doldur
//--- çizelgedeki en yüksek ve en düşük değerleri bul
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- fiyatlar için bir değişim birimini tanımla ve diziyi doldur
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- çizgiyi çizmek için noktaları tanımla
   int p=InpPrice*(accuracy-1)/100;
//--- yatay çizgiyi oluştur
   if(!HLineCreate(0,InpName,0,price[p],InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- şimdi, çizgiyi taşı
//--- döngü sayacı
   int v_steps=accuracy/2;
//--- çizgiyi taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(p<accuracy-1)
         p+=1;
      //--- tutturma noktasını taşı
      if(!HLineMove(0,InpName,price[p]))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- çizelgeden sil
   HLineDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }