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

 
Alexey Kozitsyn :

Kendin dene. Göstergeyi çalıştırın, terminali kapatın ve yeni saat geldiğinde açın.

Yani TimeCurrent alırsanız

Sunucunun bilinen son zamanını, "Piyasa İzleme"de seçilen sembollerden biri için son teklifin varış zamanını döndürür.

Her şey doğru.
 
Konstantin Nikitin :

Yani TimeCurrent alırsanız

Sunucunun bilinen son zamanını, "Piyasa İzleme"de seçilen sembollerden biri için son teklifin varış zamanını döndürür.

Her şey doğru.

Söyle bana, TimeCurrent araması bu kodda nerede?

 
Alexey Kozitsyn :

Söyle bana, TimeCurrent araması bu kodda nerede?

Yani y çubuğunun açılış zamanı hala terminalin kapanmasından önce alınan zamandır. Yeni bir çubuk oluşturulur, zaman güncellenir. Sorun nedir.

 
Konstantin Nikitin :

Yani y çubuğunun açılış zamanı hala terminalin kapanmasından önce alınan zamandır. Yeni bir çubuk oluşturulur, zaman güncellenir. Sorun nedir.

İşin aslı, grafikteki son saatlik çubuk 22:00 olduğunda terminal kapanır. Örneğin 22:45'te kapanıyor. 23:01'de açılır - sunucuyla bağlantı kurduktan sonraki son saatin saatini istemek ve OnInit()'te herhangi bir zamanlayıcı olmadan ön talepten sonra - hala 22 saattir. Bu senin için normal mi?

 

Çubukların hesaplanmasını değil, mumun zamanını kontrol edin.
Bu şekilde doğru bir şekilde güncellenecektir (işaretli).

 //--- Проверяем первый запуск индикатора
   if (prev_calculated<= 0 || 
      _weekOpenTime!= iTime ( _Symbol , PERIOD_W1 , 0 )+SEC_PER_DAY ||
      _dayOpenTime!= iTime ( _Symbol , PERIOD_D1 , 0 ) ||
      _hourOpenTime!= iTime ( _Symbol , PERIOD_H1 , 0 ) )
     {
     
      _weekOpenTime= 0 ;
      _dayOpenTime = 0 ;
      _hourOpenTime= 0 ;
        
       //--- Проверяем, записано ли время открытия текущей недели
       if (!CheckCurrentWeekOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего дня
       if (!CheckCurrentDayOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего часа
       if (!CheckCurrentHourOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected= true ;
       //---
       Print ( __FUNCTION__ , ": Данные старших ТФ загружены!" );
     }
 
Anladığım kadarıyla, terminal ilk kez, geçmişte sahip olduğu en son verileri görüntüler ve ancak o zaman sunucudan yüklenir.
 
Taras Slobodyanik :

Çubukların hesaplanmasını değil, mumun zamanını kontrol edin.
Bu şekilde doğru bir şekilde güncellenecektir (işaretli).

Ne tür bir çubuk hesaplamasından bahsediyoruz?

Sürümünüzü kontrol edeceğim, ancak aslında, OnCalculate() öğesine bir "boş" veri isteği eklediniz ve bu kadar ve mantıksal olarak, "boş" isteğe bile ulaşamayacak, çünkü prev_calculated <= 0 zaten yürütülecek ve ilk çalıştırma bloğu yürütülecek.

Her durumda, bu bir koltuk değneği çözümüdür, dilde böyle durumlar olmamalıdır. Bağlantı kurulur, veri alma işlevi hatalar ve alınan verilerin doğruluğu açısından kontrol edilir. Ve sonunda ne? Veriler hala kaldı.

Genel olarak, emin davranırsanız, İnternet'teki geçerli saati isteyebilir, ardından OnCalculate()'de geçerli saati isteyebilir ve farklı olana kadar karşılaştırabilirsiniz. Ama bu aynı koltuk değneği ve böyle olmamalı.

 
Alexey Kozitsyn :

İşin aslı, grafikteki son saatlik çubuk 22:00 olduğunda terminal kapanır. Örneğin 22:45'te kapanıyor. 23:01'de açılır - sunucuyla bağlantı kurduktan sonraki son saatin saatini istemek ve OnInit()'te herhangi bir zamanlayıcı olmadan ön talepten sonra - hala 22 saattir. Bu senin için normal mi?

Herhangi bir son çubuğun kapanma zamanı TimeCurrent (yani mevcut) olacaktır. Sorunuza bakılırsa buna ihtiyacınız var gibi görünüyor.

 
Taras Slobodyanik :
Anladığım kadarıyla, terminal ilk kez, geçmişte sahip olduğu en son verileri görüntüler ve ancak o zaman sunucudan yüklenir.

Soru! Sunucuyla bağlantı kurulduktan sonra neden önceki verileri veriyor, OnInit()'te bir veri ön talebi vardı, CheckCurren..() işlevlerinin her birinde veri yükleme kontrolü yapıldı. Her şeyin yolunda gitmesi için kaç tane, kahretsin, kontrol yapılması gerekiyor ...

 
Konstantin Nikitin :

Herhangi bir son çubuğun kapanma zamanı TimeCurrent (yani mevcut) olacaktır. Sorunuza bakılırsa buna ihtiyacınız var gibi görünüyor.

Ne kapanışı? Bir açılış saatine ihtiyacım var...

Neden: