Hatalar, hatalar, sorular - sayfa 1390

 

Göstergenin tam olarak oluşturulduğunu gösteren bir gösterge için internette beklemeyin.

Bir gösterge ve dönüş kontrolü oluşturun ve tüm ortam ve geçmiş daha sonra hazırlanacak ve yeniden hesaplama kodunuz çağrılacaktır.

 
Renat Fatkhullin :

Göstergenin tam olarak oluşturulması için internette beklemeyin.

Bir gösterge ve dönüş kontrolü oluşturun ve tüm ortam ve geçmiş daha sonra hazırlanacak ve yeniden hesaplama kodunuz çağrılacaktır.

Teşekkürler, yani OnInit'ten () döndükten sonra her veri aldığınızda 4806'yı kontrol etmeniz mi gerekiyor?
 
Her veri okuma konumunda
 

Burada göstergeye ulaşılır ve değerleri OnCalculate içerisinde hesaplanır. Süresiz bekleyebilirsiniz, yeniden hesaplama yoktur. D1 dönem grafiğinde çalıştır

 int i_ich= INVALID_HANDLE ;
double ind_buf[];

int OnInit (){
   i_ich= iIchimoku ( Symbol (), PERIOD_H4 , 9 , 26 , 52 );
   if (i_ich== INVALID_HANDLE ){
       Print ( "Невозможно создать индиктор Ишимоку!" );
       return ( INIT_FAILED );
   }
   SetIndexBuffer ( 0 , ind_buf, INDICATOR_DATA );
   ArraySetAsSeries (ind_buf, true );
   return ( INIT_SUCCEEDED );
}


int OnCalculate ( const int rates_total,
                     const int prev_calculated,
                     const datetime & time[],
                     const double & open[],
                     const double & high[],
                     const double & low[],
                     const double & close[],
                     const long & tick_volume[],
                     const long & volume[],
                     const int & spread[]){
   double temp[];
   int copied= CopyBuffer (i_ich, 0 , 0 , 1 ,temp);
   if (copied<= 0 ){
       datetime now= TimeLocal ();
       while ( BarsCalculated (i_ich)<= 0 && ! IsStopped ()){  
         Comment ( "Ждем пересчета индикатора Ишимоку... " , int ( TimeLocal ()-now));
      }
       if ( BarsCalculated (i_ich)> 0 ){
         Print ( "Расчитано " , BarsCalculated (i_ich), " баров за " , int ( TimeLocal ()-now), " секунд" );
      }
       Comment ( "" );
   } 

   return (rates_total);
}

Lütfen Ichimoku'nun okumalarının neden hesaplanmadığını açıklayın.

 
Ilya Malev :

Burada göstergeye erişilir ve değerleri OnCalculate içerisinde hesaplanır. Süresiz bekleyebilirsiniz, yeniden hesaplama yoktur. D1 dönem grafiğinde çalıştır

Lütfen Ichimoku'nun okumalarının neden hesaplanmadığını açıklayın.

Ve öyle olsa bile:

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    0
int i_ich= INVALID_HANDLE ;
double ind_buf[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   i_ich= iIchimoku ( Symbol (), PERIOD_H4 , 9 , 26 , 52 );
   if (i_ich== INVALID_HANDLE )
     {
       Print ( "Невозможно создать индиктор Ишимоку!" );
       return ( INIT_FAILED );
     }
   SetIndexBuffer ( 0 ,ind_buf, INDICATOR_DATA );
   ArraySetAsSeries (ind_buf, true );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   static int count;
   Print (count);
   double temp[];
   datetime now= TimeLocal ();
   int copied= CopyBuffer (i_ich, 0 , 0 , 1 ,temp);
   if (copied> 0 )
       Print ( "Расчитано " , BarsCalculated (i_ich), " баров за " , int ( TimeLocal ()-now), " секунд" );
   count++;
   return (rates_total);
  }
//+------------------------------------------------------------------+
?
 

Gösterge kodundaki beklemeyi asla döngüye almamalısınız. Komut dosyalarında ve Uzman Danışmanlarda mümkündür, ancak göstergelerde kesinlikle mümkün değildir.

Yani, göstergelerdeki diğer kişilerin verilerini hesaplama ve talep etme stratejisi aşağıdaki gibi olmalıdır: veri talebi başarısız olursa, hemen çıkın, bir sonraki onay için hesaplamaları erteleyin. Bir sonraki tik/çağrıda, gerekli olanı tekrar talep etmeye çalışacağız.

 
Karputov Vladimir :

Ve öyle olsa bile:

?
"0" çıktısı (bugün Pazar olduğu için OnCalculate yeniden başlatılmaz)
 
Renat Fatkhullin :

Gösterge kodundaki beklemeyi asla döngüye almamalısınız. Komut dosyalarında ve Uzman Danışmanlarda mümkündür, ancak göstergelerde kesinlikle mümkün değildir.

Yani, göstergelerdeki diğer kişilerin verilerini hesaplama ve talep etme stratejisi aşağıdaki gibi olmalıdır: veri talebi başarısız olursa, hemen çıkın, bir sonraki onay için hesaplamaları erteleyin. Bir sonraki tik/çağrıda, gerekli olanı tekrar talep etmeye çalışacağız.

Tamam, peki ya bir sonraki keneleri beklemeden gösterge okumalarını tek seferde hesaplamanız gerekirse? Örneğin, bir hafta sonuysa veya yalnızca düşük sıvı zamanıysa, dakikada bir tık ne zaman çıkıyor? OnCalculate yerine OnTimer kullanılsın mı?
 
Ilya Malev :
"0" çıktısı (çünkü bugün Pazar, OnCalculate yeniden başlatılmaz)
Test cihazında, test cihazında! Ve hafta sonları, grafiğe sağ tıklayıp "Yenile" yapmanız gerekir.
 

"Güncelle" ye tıkladıktan sonra her şey hesaplandı. Yine de bir dilek olarak, İnternette oluşturulan göstergelerin verilerinin OnCalculate/OnTimer vb.'ye ilk çağrıdan önce hesaplanması daha uygun olacaktır.

Veya init'ten sonra gösterge içindeki döngüde hesaplanmalarını programlı olarak bekleyebilmek.

Göstergeyi hesaplamak için kullanıcının grafikte birkaç kez "yenile" düğmesine basması gerekecektir. Onun ihtiyacı var mı? Eski güzel MT4'ü hatırlayacak ve MT5'in bazı avantajlarına rağmen devam edecek.