Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Twitter üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Görüntülemeler:
64
Derecelendirme:
(61)
Yayınlandı:
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Mümkün olan en basit prensipte ultra hızlı zikzak.

Sarkan köşe yok. Zaman optimizasyonlu köşe bulma desteği ile.

Mükemmel ZigZag

Avantajlar:

  1. Hesaplamalardaki en ağır işlev - tepe noktası araması için gereksiz döngüleri tamamen değiştiren iBarShift, ArrayBSearch ile değiştirildi, bu da göstergenin MQL4 analogundan daha verimli çalışacağı anlamına geliyor;
  2. Her çubuk için gerekli tüm bilgiler yalnızca tarihin herhangi bir anında mevcut olmakla kalmaz, aynı zamanda tarihin herhangi bir anı için Uzman Danışman tarafından da kullanılabilir;
  3. Asılı üstler yok;
  4. Gösterge değerlerini aramadan üstleri verimli bir şekilde arama imkanı;
  5. Çok hızlı çalışma;
  6. Geçmiş ekleme ve zaman dilimlerini değiştirmenin doğru işlenmesi;
  7. Uzman Danışmanlarda çalışmak için vazgeçilmezdir.

Dezavantajları:

  1. Bellek maliyetleri. Doğru bir zigzag çizimi için 2 tampon gerekir (1 yeterli değildir, takılmalar olacaktır), burada 5 tampon kullanılır. (Bence) #6'nın avantajı ile tamamen telafi edilmiştir. Tanım olarak, hiçbir hızlı zikzak iki tamponda geçmiş ekleme işlemini doğru bir şekilde gerçekleştiremez.
  2. Ek çizgiler çizmek. Bunları Uzman Danışman tarafından görünür kılmak gerekir. Hiçbir koşulda görünmemesi gereken büyüklük sırasının değerleri.

Prensip:

Yeni bir diz, ayarlarda ayarlanandan daha büyük bir geri çekilmede oluşturulmaya başlar. Nokta olarak (IdealZZZ) veya yüzde olarak (IdealZZP) ayarlanabilir

Köşeleri almak:

input int ChannelWidth=100;

#property indicator_chart_window

datetime LastTime;
int ZZHandle;
//+------------------------------------------------------------------+
//| Özel gösterge başlatma işlevi |
//+------------------------------------------------------------------+
void OnInit()
  {
   LastTime = 0;
   ZZHandle = iCustom(_Symbol, Period(), "IdealZZ", ChannelWidth);
  }
//+------------------------------------------------------------------+
//| GetValue|
//+------------------------------------------------------------------+
bool GetValue(double dir,int bar,int prevBar,double &peak,
             int &peakBar,datetime &peakTime,const datetime &T[])
  {
   if(dir<0)
     {
      double t[1];
      if(0>=CopyBuffer(ZZHandle,2,bar,1,t)) return false;
      int i= ArrayBsearch(T, (datetime)t[0]);

      if(i==prevBar)
        {
         if(0>=CopyBuffer(ZZHandle,2,bar+1,1,t)) return false;
         i=ArrayBsearch(T,(datetime)t[0]);
        }

      double v[1];
      if(0>=CopyBuffer(ZZHandle,1,i,1,v)) return false;

      if(v[0]==EMPTY_VALUE)
        {
         if(0>=CopyBuffer(ZZHandle,2,bar+1,1,t)) return false;
         i=ArrayBsearch(T,(datetime)t[0]);
         if(0>=CopyBuffer(ZZHandle,1,i,1,v)) return false;
        }

      peak=v[0];
      peakBar=i;
      peakTime=(datetime)t[0];
     }
   else if(dir>0)
     {
      double t[1];
      if(0>=CopyBuffer(ZZHandle,3,bar,1,t)) return false;
      int i= ArrayBsearch(T, (datetime)t[0]);

      if(i==prevBar)
        {
         if(0>=CopyBuffer(ZZHandle,3,bar+1,1,t)) return false;
         i=ArrayBsearch(T,(datetime)t[0]);
        }

      double v[1];
      if(0>=CopyBuffer(ZZHandle,0,i,1,v)) return false;

      if(v[0]==EMPTY_VALUE)
        {
         if(0>=CopyBuffer(ZZHandle,3,bar+1,1,t)) return false;
         i=ArrayBsearch(T,(datetime)t[0]);
         if(0>=CopyBuffer(ZZHandle,0,i,1,v)) return false;
        }

      peak=v[0];
      peakBar=i;
      peakTime=(datetime)t[0];
     }
   else
     {
      return(false);
     }

   return(true);
  }
//+------------------------------------------------------------------+
//| GetValue|
//+------------------------------------------------------------------+
void SetPt(string name,double price,datetime time)
  {
   ObjectCreate(0,name,OBJ_ARROW,0,time,price);
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,108);
   ObjectSetDouble(0,name,OBJPROP_PRICE,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,time);
  }
//+------------------------------------------------------------------+
//| Özel gösterge yineleme işlevi |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &T[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(LastTime==T[0]) return(rates_total);
   LastTime=T[0];

   ArraySetAsSeries(T,true);

   double dir_[1];
   if(0>=CopyBuffer(ZZHandle,4,1,1,dir_)) return rates_total;
   double dir=dir_[0];
   double rdir=-dir;

   if(dir==EMPTY_VALUE) return(rates_total);

   double v1,v2,v3,v4,v5;
   int    i1,i2,i3,i4,i5;
   datetime t1,t2,t3,t4,t5;

   if(
      GetValue(dir,1,0,v1,i1,t1,T) && 
      GetValue(rdir,i1,0,v2,i2,t2,T) && 
      GetValue(dir,i2,i1,v3,i3,t3,T) && 
      GetValue(rdir,i3,i2,v4,i4,t4,T) && 
      GetValue(dir,i4,i3,v5,i5,t5,T)
      )
     {
      SetPt("1",v1,t1);
      SetPt("2",v2,t2);
      SetPt("3",v3,t3);
      SetPt("4",v4,t4);
      SetPt("5",v5,t5);
      Print(v1,"   ",v2,"  ",v3,"  ",v4," ",v5," ",i1,"  ",i2,"  ",i3," ",i4," ",i5);
     }
   else
     {
      Print("Seems to be error available...");
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+

Bu örnek, her çubuğun (çubuk başına bir kez) son 5 tepeyi (mevcut biçimlendirilmemiş olan dahil) işaretlediğinin bir göstergesidir.

Uyarı. Sıfır çubuk modu etkinleştirilirse kod düzgün çalışmayabilir

Sıfır çubuk modu:

Kodda DrawZeroBar değişkeni tarafından açılır. Varsayılan olarak kapalıdır. Açılması tavsiye edilmez. Gösterge bir Uzman Danışman'da kullanılıyorsa, kesinlikle önerilmez.

Kullanın :) . Lütfen bulduğunuz eksiklikleri bildirin.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/925

Corrected Average (CA) Corrected Average (CA)

A.Uhl tarafından Düzeltilmiş Ortalama göstergesi ("Optimal hareketli ortalama" olarak da bilinir).

Chart_Period_Changer Chart_Period_Changer

Ana zaman dilimlerini değiştirmek için basit komut dosyası. Ana amaç, kısayol tuşları ile geçiş kolaylığıdır.

Gün İçi Üçlü Performans Gün İçi Üçlü Performans

Üç çarpı işareti belirleyin ve belirli bir zamandan başlayarak (bu da ayarlanabilir) günlük yüzde performansını izleyin.

CDatetimeMsc CDatetimeMsc

CDateTime milisaniye uzantısı + datetime denetleyici değişken uzantısı