OBJ_ELLIPSE

Elips.

ObjEllipse

Not

Elips için renkle doldurma modu, OBJPROP_FILL özelliği ile ayarlanabilir.

Örnek

Aşağıdaki script, çizelge üzerinde elips nesnesini 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, çizelge üzerinde elips şekli oluşturur."
#property description "tutturma koordinatları, pencere boyutunun"
#property description "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="Ellipse";         // Elipsin ismi
input int             InpDate1=30;               // 1-inci noktanın tarihi, %
input int             InpPrice1=20;              // 1-inci noktanın fiyatı, %
input int             InpDate2=70;               // 2-inci noktanın tarihi, %
input int             InpPrice2=80;              // 2-inci noktanın fiyatı, %
input int             InpDate3=50;               // 3-üncü noktanın tarihi, %
input int             InpPrice3=60;              // 3-üncü noktanın fiyatı, %
input color           InpColor=clrRed;           // Elips rengi
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT// Elips çizgi stili
input int             InpWidth=2;                // Elips çizgilerinin kalınlığı
input bool            InpFill=false;             // Elipsi renkle doldurma
input bool            InpBack=false;             // Arka-plan elipsi
input bool            InpSelection=true;         // Taşımak için vurgula
input bool            InpHidden=true;            // Nesne listesinde gizle
input long            InpZOrder=0;               // Fare tıklaması için öncelik
//+------------------------------------------------------------------+
//| Verilen koordinatlarda bir elips oluştur                         |
//+------------------------------------------------------------------+
bool EllipseCreate(const long            chart_ID=0,        // çizelge kimliği
                   const string          name="Ellipse",    // elips ismi
                   const int             sub_window=0,      // alt-pencere indisi 
                   datetime              time1=0,           // ilk noktanın zamanı
                   double                price1=0,          // ilk noktanın fiyatı
                   datetime              time2=0,           // ikinci nokta zamanı
                   double                price2=0,          // ikinci nokta fiyatı
                   datetime              time3=0,           // üçüncü nokta zamanı
                   double                price3=0,          // üçüncü nokta fiyatı
                   const color           clr=clrRed,        // elips rengi
                   const ENUM_LINE_STYLE style=STYLE_SOLID// elips çizgilerinin stili
                   const int             width=1,           // elips çizgi kalınlığı
                   const bool            fill=false,        // elipsi renk ile doldurma
                   const bool            back=false,        // arka-planda
                   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
   ChangeEllipseEmptyPoints(time1,price1,time2,price2,time3,price3);
//--- hata değerini sıfırla
   ResetLastError();
//--- verilen koordinatlarda bir elips oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_ELLIPSE,sub_window,time1,price1,time2,price2,time3,price3))
     {
      Print(__FUNCTION__,
            ": elipsin oluşturulması başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- bir elips rengi ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- elips çizgilerinin stilini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- elips çizgilerinin kalınlığını ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- elips 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);
  }
//+------------------------------------------------------------------+
//| Elipsin tutturma noktasını taşı                                  |
//+------------------------------------------------------------------+
bool EllipsePointChange(const long   chart_ID=0,     // çizelge kimliği
                        const string name="Ellipse"// elips 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);
  }
//+------------------------------------------------------------------+
//| Elipsi sil                                                       |
//+------------------------------------------------------------------+
bool EllipseDelete(const long   chart_ID=0,     // çizelge kimliği
                   const string name="Ellipse"// elips ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- elipsi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": elipsin silinmesi başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Elipsin tutturma (çapa) noktalarının değerlerini kontrol et      |
//| boş olanlar için varsayılan değerleri ayarla                     |
//+------------------------------------------------------------------+
void ChangeEllipseEmptyPoints(datetime &time1,double &price1,
                              datetime &time2,double &price2,
                              datetime &time3,double &price3)
  {
//--- 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);
//--- üçüncü noktanın zamanı ayarlanmamışsa, ikincinin tarihine karşılık gelir
   if(!time3)
      time3=time2;
//--- üçüncü noktanın fiyatı ayarlanmamışsa, ilk noktanınkine eşittir
   if(!price3)
      price3=price1;
  }
//+------------------------------------------------------------------+
//| 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 || 
      InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>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 değerlerini depolayacak bir dizi
   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;
//--- elipsin çizileceği noktaları ayarla
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int d3=InpDate3*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
   int p3=InpPrice3*(accuracy-1)/100;
//--- bir elips oluştur
   if(!EllipseCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
      InpColor,InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- şimdi, elipsin taşıma noktalarını taşı
//--- döngü sayacı
   int v_steps=accuracy/5;
//--- ilk ve ikinci 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(!EllipsePointChange(0,InpName,0,date[d1],price[p1]))
         return;
      if(!EllipsePointChange(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);
//--- döngü sayacı
   int h_steps=bars/5;
//--- üçüncü tutturma noktasını taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(d3>1)
         d3-=1;
      //--- tutturma noktasını taşı
      if(!EllipsePointChange(0,InpName,2,date[d3],price[p3]))
         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);
//--- elipsi çizelgeden sil
   EllipseDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }