OBJ_ELLIOTWAVE5

Elliott Dürtü Dalgası.

ObjElliotWave5

Not

"Elliott Dürtü Dalgası" için, noktaların çizgilerle bağlanması modunun (OBJPROP_DRAWLINES özelliğinin), etkinleştirilmesi/devre dışı bırakılması mümkündür, aynı zamanda dalganın konumlandırılması da (ENUM_ELLIOT_WAVE_DEGREE sayımından) mümkündür.

Örnek

Aşağıdaki script, Elliott Dürtü Dalgasını çizelge üzerinde 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, \"Elliott Dürtü Dalgası\" 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="ElliotWave5";   // Nesne ismi
input int                     InpDate1=10;             // 1-inci noktanın tarihi, %
input int                     InpPrice1=90;            // 1-inci noktanın fiyatı, %
input int                     InpDate2=20;             // 2-inci noktanın tarihi, %
input int                     InpPrice2=40;            // 2-inci noktanın fiyatı, %
input int                     InpDate3=30;             // 3-üncü noktanın tarihi, %
input int                     InpPrice3=60;            // 3-üncü noktanın fiyatı, %
input int                     InpDate4=40;             // 4-üncü noktanın tarihi, %
input int                     InpPrice4=10;            // 4-üncü noktanın fiyatı, %
input int                     InpDate5=60;             // 5-inci noktanın tarihi, %
input int                     InpPrice5=40;            // 5-inci noktanın fiyatı, %
input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR// Seviye
input bool                    InpDrawLines=true;       // Çizgilerin görüntülenmesi
input color                   InpColor=clrRed;         // Çizgilerin rengi
input ENUM_LINE_STYLE         InpStyle=STYLE_DASH;     // Çizgilerin stili
input int                     InpWidth=2;              // Çizgilerin kalınlığı
input bool                    InpBack=false;           // Arka-plan nesnesi
input bool                    InpSelection=true;       // Taşıma için vurgula
input bool                    InpHidden=true;          // Nesne listesinde gizle
input long                    InpZOrder=0;             // Fare tıklaması için öncelik
//+------------------------------------------------------------------+
//| Elliott Dürtü Dalgasını verilen koordinatlarda oluştur           |
//+------------------------------------------------------------------+
bool ElliotWave5Create(const long                    chart_ID=0,              // çizelge kimliği
                       const string                  name="ElliotWave5",      // dalga 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ı
                       datetime                      time3=0,                 // üçüncü nokta zamanı
                       double                        price3=0,                // üçüncü nokta fiyatı
                       datetime                      time4=0,                 // dördüncü nokta zamanı
                       double                        price4=0,                // dördüncü nokta fiyatı
                       datetime                      time5=0,                 // beşinci nokta zamanı
                       double                        price5=0,                // beşinci nokta fiyatı
                       const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE// derece
                       const bool                    draw_lines=true,         // çizgilerin görüntülenmesi
                       const color                   clr=clrRed,              // nesne rengi
                       const ENUM_LINE_STYLE         style=STYLE_SOLID,       // çizgilerin stili
                       const int                     width=1,                 // çizgilerin kalınlığı
                       const bool                    back=false,              // arka-plan nesnesi
                       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
   ChangeElliotWave5EmptyPoints(time1,price1,time2,price2,time3,price3,time4,price4,time5,price5);
//--- hata değerini sıfırla
   ResetLastError();
//--- "Elliott Dürtü Dalgasını" verilen koordinatlarda oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE5,sub_window,time1,price1,time2,price2,time3,
      price3,time4,price4,time5,price5))
     {
      Print(__FUNCTION__,
            ": \"Elliott Dürtü Dalgası\" nesnesinin oluşturulması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- dereceyi (dalga boyunu) ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degree);
//--- çizgilerin görüntülenmesi modunu etkinleştir (true) veya devre dışı bırak (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,draw_lines);
//--- nesnenin rengini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- çizgi stilini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- çizgilerin 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);
  }
//+------------------------------------------------------------------+
//| Elliott Dürtü Dalgasının tutturma noktasını taşı                 |
//+------------------------------------------------------------------+
bool ElliotWave5PointChange(const long   chart_ID=0,         // çizelge kimliği
                            const string name="ElliotWave5"// nesne ismi
                            const int    point_index=0,      // tutturma (çapa) noktası ismi
                            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);
  }
//+------------------------------------------------------------------+
//| Elliott Dürtü Dalgasını sil                                      |
//+------------------------------------------------------------------+
bool ElliotWave5Delete(const long   chart_ID=0,         // çizelge kimliği
                       const string name="ElliotWave5"// nesne ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- nesneyi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": \"Elliott Dürtü Dalgasının\" silinmesi başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Elliott Dürtü Dalgasının tutturma noktalarının değerlerini       |
//| boş olanlar için varsayılan değerler ile ayarla                  |
//+------------------------------------------------------------------+
void ChangeElliotWave5EmptyPoints(datetime &time1,double &price1,
                                  datetime &time2,double &price2,
                                  datetime &time3,double &price3,
                                  datetime &time4,double &price4,
                                  datetime &time5,double &price5)
  {
//--- son 10 çubuğun açılış zamanlarını almak için bir dizi
   datetime temp[];
   ArrayResize(temp,10);
//--- veriyi al
   CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
//--- çizelge üzerindeki bir noktanın değerini al
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//--- ilk noktanın zamanı ayarlanmamışsa, son çubuktan 9 çubuk solda olacak
   if(!time1)
      time1=temp[0];
//--- ilk noktanın fiyatı ayarlanmamışsa mevcut Bid değerini alacak
   if(!price1)
      price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- ikinci noktanın zamanı ayarlı değilse, son çubuktan 7 soldaki çubukta olacak
   if(!time2)
      time2=temp[2];
//--- ikinci noktanın fiyatı ayarlanmamışsa, ilkinin 300 puan aşağısına konumla
   if(!price2)
      price2=price1-300*point;
//--- üçüncü noktanın zamanı ayarlanmamışsa, son çubuktan 5 çubuk solda olacak
   if(!time3)
      time3=temp[4];
//--- üçüncü noktanın fiyatı ayarlanmamışsa, ilkinden 250 puan aşağı konumla
   if(!price3)
      price3=price1-250*point;
//--- dördüncü noktanın zamanı ayarlanmamışsa, son çubuktan 3 çubuk solda olacak
   if(!time4)
      time4=temp[6];
//--- dördüncü noktanın fiyatı ayarlanmamışsa, ilkinden 550 puan aşağıda konumla
   if(!price4)
      price4=price1-550*point;
//--- beşinci noktanın zamanı ayarlanmamışsa, son çubuğun üstünde olacak
   if(!time5)
      time5=temp[9];
//--- beşinci noktanın fiyatı ayarlanmamışsa, ilkinden 450 puan aşağıda konumla
   if(!price5)
      price5=price1-450*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 || 
      InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100 || 
      InpDate4<0 || InpDate4>100 || InpPrice4<0 || InpPrice4>100 || 
      InpDate5<0 || InpDate5>100 || InpPrice5<0 || InpPrice5>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;
//--- Elliott Dürtü Dalgasının çizimi için noktaları tanımla
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int d3=InpDate3*(bars-1)/100;
   int d4=InpDate4*(bars-1)/100;
   int d5=InpDate5*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
   int p3=InpPrice3*(accuracy-1)/100;
   int p4=InpPrice4*(accuracy-1)/100;
   int p5=InpPrice5*(accuracy-1)/100;
//--- Elliott Dürtü Dalgasını oluştur
   if(!ElliotWave5Create(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
      date[d4],price[p4],date[d5],price[p5],InpDegree,InpDrawLines,InpColor,InpStyle,InpWidth,
      InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve 1 saniye bekle
   ChartRedraw();
   Sleep(1000);
//--- şimdi, tutturma noktalarını taşı
//--- döngü sayacı
   int v_steps=accuracy/5;
//--- beşinci tutturma noktasını taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- bir sonraki değeri kullan
      if(p5<accuracy-1)
         p5+=1;
      //--- tutturma noktasını taşı
      if(!ElliotWave5PointChange(0,InpName,4,date[d5],price[p5]))
         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ı
   v_steps=accuracy/5;
//--- ikinci ve üçüncü tutturma noktalarını taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- şu değerleri kullan
      if(p2<accuracy-1)
         p2+=1;
      if(p3>1)
         p3-=1;
      //--- noktaları kaydır
      if(!ElliotWave5PointChange(0,InpName,1,date[d2],price[p2]))
         return;
      if(!ElliotWave5PointChange(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();
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- döngü sayacı
   v_steps=accuracy*4/5;
//--- birinci ve dördüncü tutturma (çapa) noktalarını taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- şu değerleri kullan
      if(p1>1)
         p1-=1;
      if(p4<accuracy-1)
         p4+=1;
      //--- noktaları kaydır
      if(!ElliotWave5PointChange(0,InpName,0,date[d1],price[p1]))
         return;
      if(!ElliotWave5PointChange(0,InpName,3,date[d4],price[p4]))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- nesneyi çizelgeden sil
   ElliotWave5Delete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }