RefreshRates() işlevi neyi günceller? - sayfa 4

 
Mikhail Nazarenko :
Tamam, tüm geliştiricilere ilgileri için teşekkürler, NewBar gibi koltuk değnekleri oluşturmaya gittim.))) Konu kapanmıştır.

Evet, yaratılmaları gerekmez. Sana tamamen çalışan bir fonksiyon verdim. Zevk almak.

 

İşte yeni saat geliyor...


Bire bir değerler...

 
Mikhail Nazarenko :

Hayır, _Period daha iyidir. H1'den sıfır bir teklifin ortaya çıkmasını beklemek zorunda kalacağımızdan ve cari dönem düzenli olarak güncellendiğinden. Verilerin saat güncellendiğinde değil, saatin ilk saniyelerinde alınması gerekir.

 if (NewBar( PERIOD_M5 ))
   {
    close_H1 = iClose ( _Symbol , PERIOD_H1 , 1 );
    close_M1 = iClose ( _Symbol , PERIOD_M1 , 1 );
    close_M5 = Close[ 1 ];
    
    
     if (close_H1 != close_M5)
       Print (close_H1, " H1 != M5 " , close_M5);
     if (close_M1 != close_M5)
       Print (close_M1, " M1 != M5 " , close_M5);

//...

Bir örnek eklemek ve kontrol etmek istiyorum


Neden tamamen farklı barlar için aynı kapanış fiyatını görmeyi beklediğinizi anlamıyorum?

M5'te yeni bir çubuk göründüğünde, M1'de de yeni bir çubuk vardır ve H1'de yalnızca 12'den birinde yeni bir çubuk olacak ve kalan 11'de - hayır.

 
PapaYozh :

Neden tamamen farklı barlar için aynı kapanış fiyatını görmeyi beklediğinizi anlamıyorum?


Ayrıca fark ettim, yanlış anladığımı sandım.

 

Görünüşe göre sorunu bir şekilde yetersiz açıkladım, üzgünüm. Yıkadım ve vaat edilen koltuk değneklerini denedim. Buraya yazdım çünkü MQL4'ün kendi kodunda uygulanması gerekiyor. İlgilenenler alsın. Konu kapandı.

 //Функция отслеживания появления обновленных котировок по таймфрейму, где max_tf таймфрейм +1 до которого включительно будет требоваться обновление
bool isRefresh( int max_tf = 0 , int min_sleep = 1000 ){
   
   //Массив с таймфреймами
   int tf[ 9 ] = { 1 , 5 , 15 , 30 , 60 , 240 , 1440 , 10080 , 43200 };
   
   //Если максимальное 0 то текущее значение
   max_tf = (max_tf <= 0 ) ? _Period : max_tf;
   
   //Текущее время
   datetime period,tc = TimeCurrent ();
   
   for ( int i = 0 ; i < 9 ; i++){
         
      period = tf[i]* 60 ;
      
       if ( iTime ( _Symbol ,tf[i], 1 ) != ( int (tc/period)- 1 )*period){
         Sleep (min_sleep);
         return false ;   
      }
       if (max_tf < tf[i]) //Если таймфрейм больше максимального и тоже обновлен то выходим
         break ;
   }
   Sleep (min_sleep);
   RefreshRates();
   
   return true ;
}
 
Mikhail Nazarenko :

Görünüşe göre sorunu bir şekilde yetersiz açıkladım, üzgünüm. Yıkadım ve vaat edilen koltuk değneklerini denedim. Buraya yazdım çünkü MQL4'ün kendi kodunda uygulanması gerekiyor. İlgilenenler alsın. Konu kapandı.

1. Görünüşe göre, evet.

2. Döndürülen sonucu herhangi bir şekilde etkilemiyorsa, bir işlevden dönmeden önce neden bir saniye uyuyalım?

 

Diğer dönemlerden/sembollerden mumların zamanında üretilebilmesi için sürekli olarak "çekilmeleri" gerekir, aksi takdirde MT bunları "gerektiği gibi" günceller.
Bu genel bir gerçek, forumda defalarca tartışıldı)

not. kod bir zamanlayıcıda çalışıyorsa ve diğer dönemlerden alıntılara yalnızca saatte bir kez (veya günde bir kez) erişiyorsa, güncelleme için ayrı bir işlev oluşturmanız gerekir. Veya bir sonraki istekten sonra birkaç saniye bekleyin.

 
PapaYozh :

1. Görünüşe göre, evet.

2. Döndürülen sonucu herhangi bir şekilde etkilemiyorsa, bir işlevden dönmeden önce neden bir saniye uyuyalım?

Bunların hepsi deneyimle. Bana inanmıyorsanız, yeniden yapın ve uyumayın.) Kollektif çiftlik gönüllü bir iştir.

 

Bu *** en saf haliyle.

Dönüp faydalı bir şeyler yapabilecekken neden bir fonksiyonda uyuyasınız ki?

 
PapaYozh :

Bu *** en saf haliyle.

Dönüp faydalı bir şeyler yapabilecekken neden bir fonksiyonda uyuyasınız ki?

Bu *** en saf haliyle. Önceki cevabımda neyi anlamadığını söyle? Tekrar. Uyumayın ve faydalı bir şey yapın.)))