OBJ_FIBOFAN

Fibonacci Yelpazesi.

ObjFiboFan

Not

"Fibonacci Yelpazesi" için, seviye çizgilerinin sayılarının, değerlerinin ve renklerinin belirlenmesi mümkündür.

Örnek

Aşağıdaki script, Fibonacci Yelpazelerini çizelge üzerinde çizer 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, \"Fibonacci Yelpazesi\" 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="FiboFan";         // Yelpaze ismi
input int             InpDate1=10;               // 1-inci noktanın tarihi, %
input int             InpPrice1=25;              // 1-inci noktanın fiyatı, %
input int             InpDate2=30;               // 2-inci noktanın tarihi, %
input int             InpPrice2=50;              // 2-inci noktanın fiyatı, %
input color           InpColor=clrRed;           // Yelpaze çizgi rengi
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT// Çizgi stili
input int             InpWidth=2;                // Çizgi stili
input bool            InpBack=false;             // Arka-plan nesnesi
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
//+------------------------------------------------------------------+
//| Fibonacci Yelpazesini verilen koordinatlarda oluştur             |
//+------------------------------------------------------------------+
bool FiboFanCreate(const long            chart_ID=0,        // çizelge tanımlayıcısı
                   const string          name="FiboFan",    // yelpaze 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ı
                   const color           clr=clrRed,        // yelpaze çizgisi rengi
                   const ENUM_LINE_STYLE style=STYLE_SOLID// yelpaze çizgisi rengi
                   const int             width=1,           // yelpaze çizgisi kalınlığı
                   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
   ChangeFiboFanEmptyPoints(time1,price1,time2,price2);
//--- hata değerini sıfırla
   ResetLastError();
//--- Fibonacci Yelpazesini verilen koordinatlarda oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_FIBOFAN,sub_window,time1,price1,time2,price2))
     {
      Print(__FUNCTION__,
            ": \"Fibonacci Yelpazesinin\" oluşturulması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- rengi ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- çizgi 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);
//--- 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);
  }
//+------------------------------------------------------------------+
//| Seviyelerin parametrelerini ve sayılarını ayarla                 |
//+------------------------------------------------------------------+
bool FiboFanLevelsSet(int             levels,         // seviye çizgilerinin sayısı
                      double          &values[],      // seviye çizgilerinin değeri
                      color           &colors[],      // seviye çizgilerinin rengi
                      ENUM_LINE_STYLE &styles[],      // seviye çizgilerinin stili
                      int             &widths[],      // seviye çizgilerinin kalınlığı
                      const long      chart_ID=0,     // çizelge kimliği
                      const string    name="FiboFan"// yelpaze ismi
  {
//--- dizi büyüklüklerini ayarla
   if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
      levels!=ArraySize(widths) || levels!=ArraySize(widths))
     {
      Print(__FUNCTION__,": dizi uzunluğu seviyelerin sayısıyla örtüşmüyor, hata!");
      return(false);
     }
//--- seviyelerin sayısını ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- seviyelerin özeliklerini döngü içinde ayarla
   for(int i=0;i<levels;i++)
     {
      //--- seviye değeri
      ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
      //--- seviye rengi
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
      //--- seviye stili
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
      //--- seviye genişliği
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
      //--- seviye açıklaması
      ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Fibonacci Yelpazesi tutturma noktasını taşı                      |
//+------------------------------------------------------------------+
bool FiboFanPointChange(const long   chart_ID=0,     // çizelge kimliği
                        const string name="FiboFan"// yelpaze 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);
  }
//+------------------------------------------------------------------+
//| Yelpazeyi sil                                                    |
//+------------------------------------------------------------------+
bool FiboFanDelete(const long   chart_ID=0,     // çizelge tanımlayıcısı
                   const string name="FiboFan"// yelpaze ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- yelpazeyi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": \"Fibonacci Yelpazesinin\" silinmesi başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Fibonacci Yelpazesi tutturma noktası değerlerini kontrol et ve   |
//| varsayılan değerleri boş değerler için ayarla                    |
//+------------------------------------------------------------------+
void ChangeFiboFanEmptyPoints(datetime &time1,double &price1,
                              datetime &time2,double &price2)
  {
//--- ikinci noktanın zamanı ayarlanmamışsa, mevcut çubuğun üstünde olacak
   if(!time2)
      time2=TimeCurrent();
//--- İkinci noktanın fiyatı ayarlanmamışsa, Bid (alış) değerini alacak
   if(!price2)
      price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- ilk noktanın zamanı ayarlanmamışsa, ikinci noktanın 9 çubuk solunda olacak
   if(!time1)
     {
      //--- son 10 çubuğun açılış zamanını alacak bir dizi
      datetime temp[10];
      CopyTime(Symbol(),Period(),time2,10,temp);
      //--- ilk noktayı ikinciden 9 çubuk sonraya ayarla
      time1=temp[0];
     }
//--- ilk noktanın fiyatı ayarlanmamışsa, ikincinin 200 puan altına yerleştir
   if(!price1)
      price1=price2-200*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
//--- Fibonacci Yelpazesinin tutturma noktası koordinatlarını ayarlamak ve değiştirmek için
   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;
//--- Fibonacci Yelpazesinin çizileceği noktalar
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- nesneyi oluştur
   if(!FiboFanCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],
      InpColor,InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- yelpazenin tutturma noktalarını taşı
//--- döngü sayacı
   int v_steps=accuracy/2;
//--- ilk tutturma noktasını taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(p1<accuracy-1)
         p1+=1;
      //--- tutturma noktasını taşı
      if(!FiboFanPointChange(0,InpName,0,date[d1],price[p1]))
         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/4;
//--- ikinci tutturma noktasını taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(d2<bars-1)
         d2+=1;
      //--- tutturma noktasını taşı
      if(!FiboFanPointChange(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);
//--- nesneyi çizelgeden sil
   FiboFanDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }