[SERVICE DESK] Zamanlayıcıda kıdemli TF'nin zamanı alınırken hata oluştu! - sayfa 12

 
Taras Slobodyanik :

Bir sorun görmüyorum, yeni bir mum ortaya çıktı - göstergenin / danışmanın son mumunu yeniden hesaplıyoruz.
Birden fazla yeni mum ortaya çıktı - göstergenin / danışmanın tam bir yeniden hesaplamasını yapıyoruz.
Aynı - yeni bir mum belirir.

Yine de - güncellenmeleri için gerekli sürelerin sürekli olarak "çekilmesi" gerekir.
Nokta sembolü üzerinde kimse çalışmıyorsa (tırnak işaretleri kontrol edilmez, gösterge çalışmıyor), o zaman gereksiz olduğu düşünüldüğü için "uykuya dalar".

Ördek çekiyoruz, çekiyoruz. İstek yapıyoruz, hata alıyoruz, çıkıyoruz. Ancak burada, gördüğünüz gibi, başka bir "özellik" ortaya çıkıyor - sıfırlamadan sonra hata tekrar düzeltilmiyor. Eğilirdi - sorun olmazdı. Ve bu nedenle yanlış verilerin döndürülmesi bir sorundur. Ve bunu çok net görebiliyorum.

Bu örnekte tüm hata kontrol sistemi boşa gidiyor.

 

Terminal, en son verilerin güncel olmadığını nasıl anlıyor?
Sonuçta tarih var.
Komisyoncuya istek gönderildi... mümkün olan en kısa sürede.

Yeni bir çubuk belirir - veriler güncellenir.

 
Taras Slobodyanik :

Terminal, en son verilerin güncel olmadığını nasıl anlıyor?
Sonuçta tarih var.
Komisyoncuya istek gönderildi... mümkün olan en kısa sürede.

Yeni bir çubuk belirir - veriler güncellenir.

Sunucuya bağlantı kuruldu. Üst düzey bir TF'den veri talep ederken, veriler hazır değilse - bir hata veya 0 döndürür. Veriler hazırsa - SADECE gerçek verileri döndürür. Herşey. Veriler uzun süre hazır değilse bize bir hata veya 0 döndürmesine izin verin.

 
Taras Slobodyanik :

Bu arada, terminalin versiyonuyla ilgili soruyu cevaplamadınız.

 
Alexey Kozitsyn :

Bu arada, terminalin versiyonuyla ilgili soruyu cevaplamadınız.

Ve terminalin versiyonunun genel olarak bununla ne ilgisi var. Yeni veriler var ya da yok. Ve sunucudan gelmedilerse hiçbir sürüm kaydedilmez.
Sadece gösterge, yeni veriler gelmeden önce başlar. Bir seçenek olarak, çekleri , yeni bir onay işareti alındığında tetiklenen OnCalculate öğesine taşıyın.

 
Konstantin Nikitin :

Bir seçenek olarak, çekleri , yeni bir onay işareti alındığında tetiklenen OnCalculate'e taşıyın.

bu ona birkaç kez teklif edildi ve admin de

gösterge başlatıldığında gösterge OnCalculate() 'i çalıştırır, ancak ikinci kez OnCalculate() bir onay işareti geldiğinde çalışır - burası zamanlayıcıyı açmanız ve yeni OHLC verilerini indirmeniz gereken yerdir

 
Igor Makanu :

bu ona birkaç kez teklif edildi ve admin de

gösterge başlatıldığında gösterge OnCalculate()'i çalıştırır, ancak ikinci kez OnCalculate() bir onay işareti geldiğinde çalışır - burası zamanlayıcıyı açmanız ve yeni OHLC verilerini indirmeniz gereken yerdir

Gönderdiğim son koda bakın. Artık zamanlayıcı değil, her şey OnCalculate()'e taşındı. Terminal başlatılırken hala çalışmıyor.

 
//--- Проверяем связь с сервером
if (firstrun)
{
 firstrun= false ;                 // первый запуск индикатора
 return ( 0 );
}   
if (! IsConnected ())                               // Если не удалось установить связь с сервером
     {
       //--- Сбрасываем флаг соединения с сервером
      _isConnected= false ;
       //--- Выходим
       return ( 0 );
     }
Ayrıca GetTickCount() 'u kontrol ederdim, böylece terminalin açılması, grafikler oluşturması ve sunucu ile bağlantı kurması için zaman olur.Ayrıca terminali yeniden başlatma gerçeğini de izlemeniz gerekir, nasıl izleyeceğimi bilmiyorum ama zaman vermelisin
 
Alexey Kozitsyn :

Gönderdiğim son koda bakın. Artık zamanlayıcı değil, her şey OnCalculate()'e taşındı. Terminal başlatılırken hala çalışmıyor.

Peki başlangıçta ilk geçişi atla

 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 bool res = false ;
   if ( !res )
     {
      res = true ;
       return ( rates_total );
     }
   /* работаем */
   return ( rates_total );
  }
 
Konstantin Nikitin :

Peki başlangıçta ilk geçişi atla

1. maddeyi okuyun .