[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 29

 
hoz :

Bana zikzak göstergesinden değerleri nasıl çekeceğimi söyle? Genel olarak nasıl uygulanır? Onlar. sadece sonuncuyu değil, belirli bir ekstremumu yakalamak istersem.

Örneğin, şu anda bu zikzak Uzman Danışmanıma eklemek istiyorum:

Özel hindiye erişmek için genellikle yapıldığı gibi iCustom işlevini kullanmanız gerektiğini anlıyorum, ancak üstlere nasıl yapışılacağı bir soru ...

Tampon, şu prensibe göre NON-EMPTY ( EMPTY_VALUE ) değeri için aranır:

 //+-------------------------------------------------------------------------------------+
//| Поиск последнего элемента ZZBuf с непустым значением                                |
//+-------------------------------------------------------------------------------------+
int GetLastIndexNoEmptyValue( int index)
{
   while (ZZBuf[index] == EMPTY_VALUE && index < Bars ) // Поиск по графику справа налево
      index++;                                     // Пока не будет найден экстремум или
                                                   // ..пока не достигнем конца истории
   return (index);                                   // Индекс бара с непустым значением..
                                                   // ..зиг-зага
}
ve iCustom() aracılığıyla gösterge arabelleğine erişim.
 
TarasBY :

Tamponda şu prensibe göre NON-EMPTY (EMPTY_VALUE) değeri aranır:

 //+-------------------------------------------------------------------------------------+
//| Поиск последнего элемента ZZBuf с непустым значением                                |
//+-------------------------------------------------------------------------------------+
int GetLastIndexNoEmptyValue( int index)
{
   while (ZZBuf[index] == EMPTY_VALUE && index < Bars ) // Поиск по графику справа налево
      index++;                                     // Пока не будет найден экстремум или
                                                   // ..пока не достигнем конца истории
   return (index);                                   // Индекс бара с непустым значением..
                                                   // ..зиг-зага
}

ve iCustom() aracılığıyla gösterge arabelleğine erişim.


Mantıken. Ancak bu şekilde boş olmayan bir değere rastlayana kadar bir arama yapılacaktır. Ve örneğin, I ve aslında, son boş olmayan değere ihtiyaç duymuyorsa, yani. son ekstremum değil, başka.. Örneğin, burada ekranda:

 
hoz :


Mantıken. Ancak bu şekilde boş olmayan bir değere rastlayana kadar bir arama yapılacaktır. Ve örneğin, I ve aslında, son boş olmayan değere ihtiyaç duymuyorsa, yani. son ekstremum değil, başka.. Örneğin, burada ekranda:

Ekstremum sayacını döngüye girin ve döngüyü ekstremum sayısına göre bölün (bir satırda boş olmayan değer).
 
TarasBY :
Ekstremum sayacını döngüye girin ve döngüyü ekstremum sayısına göre bölün (bir satırda boş olmayan değer).

Anladım. Sayesinde. Şimdi hepsini uygulamaya koymamız gerekiyor. Özünü anladım, ama beynin kaynattığı filtrelerin boşalmasının zihninde ...
 
hoz :

Anladım. Sayesinde. Şimdi hepsini uygulamaya koymamız gerekiyor. Özünü anladım, ama beynin kaynattığı filtrelerin boşalmasının zihninde ...

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1)  

         if(ind!=0) n--;

         else

         if(ind!=0) return(ind);

      }

   }


bunun gibi. fonksiyona n (en yüksek sayı) verirseniz, değerini size döndürür. tepe çubuk numarasına ihtiyacınız varsa, işlev türünü dönüş(ind) yerine int ve olarak değiştirin; return(i) yaz;

Ayrıca, kodunuzda i'yi özellikle yinelemelerde (ders kitabında olduğu gibi) kullanırsanız, bu işlevde i'yi başka bir değişkenle, örneğin k ile değiştireceğinizi unutmayın.

ve göstergenizin işlevinin içinde iCustom'u kurduğunuzdan emin olun.

 
keep87 :

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1)  

         if(ind!=0) n--;

         else

         if(ind!=0) return(ind);

      }

   }


bunun gibi. fonksiyona n (en yüksek sayı) verirseniz, değerini size döndürür. tepe çubuk numarasına ihtiyacınız varsa, işlev türünü dönüş(ind) yerine int ve olarak değiştirin; return(i) yaz;

Ayrıca, kodunuzda i'yi özellikle yinelemelerde (ders kitabında olduğu gibi) kullanırsanız, bu işlevde i'yi başka bir değişkenle, örneğin k ile değiştireceğinizi unutmayın.

ve iCustom'u göstergenizin işlevinin içine ayarladığınızdan emin olun.

Nikolai , ilginç, elbette, yazılı bir şartınız var. bakıyorum ve düşünüyorum...

 if (ind!= 0 ) n--;

else

if (ind!= 0 ) return (ind);

Özel gösterge arabelleği sıfır değerini döndürürse n-- ve özel gösterge arabelleği sıfır değerini döndürürse, o zaman ... gösterge arabelleğinin değerini döndürür.

Ama şartlar aynı. Ve orada ve sıfır değilse ..

 
hoz :

Nikolai , ilginç, elbette, yazılı bir şartınız var. bakıyorum ve düşünüyorum...

Özel gösterge arabelleği sıfır değerini döndürürse n-- ve özel gösterge arabelleği sıfır değerini döndürürse, o zaman ... gösterge arabelleğinin değerini döndürür.

Ama şartlar aynı. Ve orada ve sıfır değilse ..

kodu normal şekilde eklemeye çalışırken küme parantezleri bir yere düştü:

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1) {

         if(ind!=0) n--;

         }else{

         if(ind!=0) return(ind);

         } 

      }

   }

n>1 { ise

arabellek boş değilse, n'den 1 çıkarın

}tersine{

arabellek boş değilse - değerini döndür

}

 

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(ind!=0) {

         if(n>1) n--; else return(ind);

         }

      }

   }


ya da bunun gibi, ki bu daha özlü. Kodun hızına ve güzelliğine takıntılıyım, kusura bakmayın)
 
keep87 :

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(ind!=0) {

         if(n>1) n--; else return(ind);

         }

      }

   }


ya da bunun gibi, ki bu daha özlü. Kodun hızına ve güzelliğine takıntılıyım, kusura bakmayın)


Genel olarak, ve böylece her şey yolunda. Sadece biraz farklı kod yazmaya alışkınım, okuması benim için daha kolay ama sizin için farklı. Size parantez içinde ilk herkes transfer edilmez. Editör'de ortaya koydum ve her şey bu biçimde yerine oturdu:

 double get_extrem( int n)
{
   for ( int i= 1 ;;i++)
   {
     double ind= iCustom ( Symbol (), 0 , "indicator_name" , 0 ,i);
       if (n> 1 )
        {
           if (ind!= 0 ) n--;
        }
         else
        {
           if (ind!= 0 ) return (ind);
        } 
   }
}
 
hoz :


Genel olarak, ve böylece her şey yolunda. Sadece biraz farklı kod yazmaya alışkınım, okuması benim için daha kolay ama sizin için farklı. Size parantez içinde ilk herkes transfer edilmez. Editör'de ortaya koydum ve her şey bu biçimde yerine oturdu:


kod 1000 satırın üzerine çıktığında, kompakt bir şekilde yazmaya başlarsınız)

ayrıca MT4'te özellikle testler yaptığınızda performans düşer. Kısa ve öz sürüm daha hızlıdır.