OBJ_RECTANGLE

Dikdörtgen.

ObjRectangle

Not

Dikdörtgen için renk ile doldurma modu, OBJPROP_FILL özelliği ile seçilebilir.

Örnek

Aşağıdaki script, çizelge üzerinde bir dikdörtgen oluşturur ve onu 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, çizelge üzerinde bir dikdörtgen oluşturur."
#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="Rectangle"// Dikdörtgen adı
input int             InpDate1=40;         // 1-inci nokta tarihi, %
input int             InpPrice1=40;        // 1-inci nokta fiyatı, %
input int             InpDate2=60;         // 2-inci nokta tarihi, %
input int             InpPrice2=60;        // 2-inci nokta fiyatı, %
input color           InpColor=clrRed;     // Dikdörtgen rengi
input ENUM_LINE_STYLE InpStyle=STYLE_DASH// Dikdörtgen çizgi stili
input int             InpWidth=2;          // Dikdörtgen çizgi kalınlığı
input bool            InpFill=true;        // Dikdörtgenin renk ile doldurulması
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
//+------------------------------------------------------------------+
//| Verilen koordinatlarda dikdörtgeni oluştur                       |
//+------------------------------------------------------------------+
bool RectangleCreate(const long            chart_ID=0,        // çizelge kimliği
                     const string          name="Rectangle",  // dikdörtgen ismi
                     const int             sub_window=0,      // alt pencere indisi 
                     datetime              time1=0,           // ilk nokta zamanı
                     double                price1=0,          // ilk nokta fiyatı
                     datetime              time2=0,           // ikinci nokta zamanı
                     double                price2=0,          // ikinci nokta fiyatı
                     const color           clr=clrRed,        // dikdörtgen ismi
                     const ENUM_LINE_STYLE style=STYLE_SOLID// dikdörtgen çizgi stili
                     const int             width=1,           // dikdörtgen çizgi genişliği
                     const bool            fill=false,        // dikdörtgeni renk ile doldurma
                     const bool            back=false,        // arka-plan çizimi
                     const bool            selection=true,    // taşıma için vurgula
                     const bool            hidden=true,       // nesne listesinde gizle
                     const long            z_order=0)         // fare tıklaması için öncelik
  {
//--- ayarlanmamışsa, tutturma noktası koordinatlarını ayarla
   ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- hata değerini sıfırla
   ResetLastError();
//--- verilen koordinatlarda bir dikdörtgen oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
     {
      Print(__FUNCTION__,
            ": dikdörtgenin oluşturulması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- dikdörtgen rengini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- dikdörtgen çizgi stilini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- dikdörtgen çizgi genişliğini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- dikdörtgeni doldurma modunu etkinleştir (true) veya devre dışı bırak (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- ön-planda (false) veya arkaplanda (true) göster
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- taşıma için vurgulama 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);
  }
//+------------------------------------------------------------------+
//| Dikdörtgenin tutturma noktasını taşı                             |
//+------------------------------------------------------------------+
bool RectanglePointChange(const long   chart_ID=0,       // çizelge kimliği
                          const string name="Rectangle"// dikdörtgen ismi
                          const int    point_index=0,    // tutturma noktası indisi
                          datetime     time=0,           // tutturma noktası zaman koordinatı
                          double       price=0)          // tutturma noktası fiyat koordinatı
  {
//--- noktanın pozisyonu belirlenmemişse, noktayı Bid (alış) fiyatı olan mevcut çubuğa taşı
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- hata değerini sıfırla
   ResetLastError();
//--- tutturma noktasını taşı
   if(!ObjectMove(chart_ID,name,point_index,time,price))
     {
      Print(__FUNCTION__,
            ": tutturma noktasının taşınması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Dikdörtgeni sil                                                  |
//+------------------------------------------------------------------+
bool RectangleDelete(const long   chart_ID=0,       // çizelge kimliği
                     const string name="Rectangle"// dikdörtgen ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- dikdörtgeni sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": dikdörtgenin silinmesi başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Dikdörtgenin tutturma noktası değerlerini kontrol et ve          |
//| boş olanlar için varsayılan değerleri kullan                     |
//+------------------------------------------------------------------+
void ChangeRectangleEmptyPoints(datetime &time1,double &price1,
                                datetime &time2,double &price2)
  {
//--- ilk noktanın zamanı ayarlanmamışsa mevcut çubuk üzerinde olacak
   if(!time1)
      time1=TimeCurrent();
//--- ilk noktanın fiyatı ayarlanmamışsa mevcut Bid değerini alacak
   if(!price1)
      price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- ikinci noktanın zamanı ayarlanmamışsa, ilkinin 9 çubuk sonrasına konumlandırılır
   if(!time2)
     {
      //--- son 10 çubuğun açılış zamanını alacak bir dizi
      datetime temp[10];
      CopyTime(Symbol(),Period(),time1,10,temp);
      //--- ikinci noktayı birincisinden 9 çubuk ileri ayarla
      time2=temp[0];
     }
//--- ikinci noktanın fiyatı ayarlanmamışsa, ilkinin 300 puan aşağısına konumla
   if(!price2)
      price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- giriş parametrelerinin doğruluğunu kontrol et
   if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 || 
      InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>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);
//--- fiyat dizisi büyüklüğü
   int accuracy=1000;
//--- nesnenin tutturma noktası konumunu değiştirmek için kullanılacak
//--- tarih ve fiyat değerlerinin saklanacağı diziler
   datetime date[];
   double   price[];
//--- bellek tahsisi
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- 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;
     }
//--- 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;
//--- dikdörtgenin çizimi için noktaları tanımla
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- bir dikdörtgen oluştur
   if(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
      InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- şimdi, dikdörtgenin tutturma noktalarını taşı
//--- döngü sayacı
   int h_steps=bars/2;
//--- tutturma noktalarını taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- şu değerleri kullan
      if(d1<bars-1)
         d1+=1;
      if(d2>1)
         d2-=1;
      //--- noktaları kaydır
      if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
         return;
      if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
      // 0.05 saniyelik gecikme
      Sleep(50);
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- döngü sayacı
   int v_steps=accuracy/2;
//--- tutturma noktalarını taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- şu değerleri kullan
      if(p1<accuracy-1)
         p1+=1;
      if(p2>1)
         p2-=1;
      //--- noktaları kaydır
      if(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
         return;
      if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- dikdörtgeni çizelgeden sil
   RectangleDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }