Pazar kapalı - sayfa 7

 
Yarım saniye için bir zamanlayıcı ayarladım. Biraz daha iyi oldu. Tamam, şimdilik öyle olsun.
 
Vasiliy Pushkaryov :
Yarım saniye için bir zamanlayıcı ayarladım. Biraz daha iyi oldu. Tamam, şimdilik öyle olsun.

Kodu göster.

 
fxsaber :

Kodu göster.

Fazlalıkları temizledim.

Ancak bu tür gecikmeler genellikle manuel olarak yakalanabilir veya 500 ms için normal mi?


Dosyalar:
 
Vasiliy Pushkaryov :

Fazlalıkları temizledim.

Ancak bu tür gecikmeler genellikle manuel olarak yakalanabilir veya 500 ms için normal mi?


Etiketi silmek yerine böyle bir yapıyı denedim, etiket varsa sadece metni değiştirin ama pek bir fark göremedim

   if ( ObjectFind (idChart, nameFix) == 0 )
   {
     ObjectSetString (idChart, nameFix, OBJPROP_TEXT , text);
     ChartRedraw ();
     return ;
   }
 
Vasiliy Pushkaryov :

bu tür gecikmeler genellikle manuel olarak yakalanabilir veya 500 ms için normal mi?

Bu bir gecikme değil. Zamanı OnTimer'dan ekrana yazdırırsınız, ardından 500ms beklersiniz. Bu 500ms sırasında zaman değişir, ancak OnTimer henüz çağrılmadı.

Senkronize etmeniz gerekiyor - EventSetTimer(1)'i tam olarak "TimerCurrent değiştiği" anda ayarlayın.


senkronize etmeye çalıştım

 bool SetTimerSync( const uint TimerMs = 1000 , const uint SyncError = 50 )
{
   // https://www.mql5.com/ru/forum/166646/page5#comment_5796939    
   return ((GetCurrenTime() % 1000 > 1000 - SyncError) && EventSetMillisecondTimer (TimerMs));
}

void OnTimer ()
{
   static bool Sync = GetCurrenTime() * 0 ;
   // --- при максимизированном окне выводим время на график
   if (Sync)
    showHideTime(); // https://www.mql5.com/ru/forum/166646/page7#comment_6384173
   else
    Sync = SetTimerSync();
}


int OnInit ()
{
   EventSetMillisecondTimer ( 1 );
  
   return INIT_SUCCEEDED ;
} 
Çalışmıyor. Ve MT5 gecikmesine karşı kötü düşüncelerim var. Komut dosyanızın bu değişikliklerle nasıl davranacağını kendiniz görün.
 
fxsaber :

senkronize etmeye çalıştım

Çalışmıyor. Ve MT5 gecikmesine karşı kötü düşüncelerim var.

OnTimer, verilen ms sayısından sonra çağrılmaz. Dolayısıyla birikmiş hata ve gözlemlenen gecikme. Hata yap!

 
fxsaber :

Bu bir gecikme değil. Zamanı OnTimer'dan ekrana yazdırırsınız, ardından 500ms beklersiniz. Bu 500ms sırasında zaman değişir, ancak OnTimer henüz çağrılmadı.

Senkronize etmeniz gerekiyor - EventSetTimer(1)'i tam olarak "TimerCurrent değiştiği" anda ayarlayın.


senkronize etmeye çalıştım

Çalışmıyor. Ve MT5 gecikmesine karşı kötü düşüncelerim var. Komut dosyanızın bu değişikliklerle nasıl davranacağını kendiniz görün.
OnInit'te kodda bir milisaniye zamanlayıcınız var, gönderide her zamanki gibi saniyede yazın. Anladığım kadarıyla EventSetTimer (1) kullanmanız gerekiyor mu?
 
Vasiliy Pushkaryov :
OnInit'te kodda bir milisaniye zamanlayıcınız var, gönderide her zamanki gibi saniyede yazın. Anladığım kadarıyla EventSetTimer (1) kullanmanız gerekiyor mu?

İlk olarak, senkronizasyon ilk zamanlayıcı aracılığıyla gerçekleşir, ardından ikincisi ayarlanır.

 
fxsaber :

İlk olarak, senkronizasyon ilk zamanlayıcı aracılığıyla gerçekleşir, ardından ikincisi ayarlanır.

Apaçık. Yardımın için teşekkürler ancak yarın bakabilirim.
 
fxsaber :

OnTimer, verilen ms sayısından sonra çağrılmaz. Dolayısıyla birikmiş hata ve gözlemlenen gecikme. Hata yap!

Grafik yorumundaki komut dosyası bu hatayı gösteriyor

 input int TimerMs = 1000 ;

const bool Init = EventSetMillisecondTimer (TimerMs);

void OnTimer ()
{
   static ulong StartTime = 0 ;  
   static int Count = 0 ;
  
   if (!StartTime)
    StartTime = GetMicrosecondCount ();
  
   Comment ( "Error " + ( string )(( int )( GetMicrosecondCount () - StartTime) / 1000 - TimerMs * Count) + " ms." );  
  
  Count++;
}
Neden: