TF değişikliği bir sorundur - sayfa 3

 
Vasyl Nosal :

Bir fikrim var. Daha sonra yazacağım.

fikir ortaya çıktı.

Geliştiricilerden HistoryUpdated() sistemi gibi bir şey yapmalarını isteyeceğim, tüm geçmişin güncellenip güncellenmediğini kontrol edeceğim.

En iyi seçenek. Tüm zaman dilimleri için geçmişi güncel tutun. Benzer bir gösterge yakın zamanda CodeBase'de ortaya çıktı
 
Slawa :

Geliştiriciler size yardım etmeyecekler çünkü yapmayacaklar

Daha önce söylendi: Rate_total ve prev_hesaplanan arasındaki fark 1'den büyükse, o zaman bu HistoryUpdated

0'dan büyük, 1 değil.

VE? Bu sorunu çözüyor mu?

Yoksa her yeni çubukta tüm geçmişi yeniden hesaplamak sizin için sorun değil mi?

 
Vasyl Nosal :

0'dan büyük, 1 değil.

VE? Bu sorunu çözüyor mu?

Yoksa her yeni çubukta tüm geçmişi yeniden hesaplamak sizin için sorun değil mi?

Size doğru söylendi. 1'den büyük. Yeni bir çubuk göründüğünde, fark 1'dir.

Ve bu sorunu tamamen çözüyor.

Tam bir yeniden hesaplama için normal bir gösterge çok az zaman harcar. bir saniyeden az

 
Victor Nikolaev :

Size doğru söylendi. 1'den büyük. Yeni bir çubuk göründüğünde, fark 1'dir.

Ve bu sorunu tamamen çözer.

Tam bir yeniden hesaplama için normal bir gösterge çok az zaman harcar. bir saniyeden az

Yalnızca arabellekler sıfırlandığında çalışır.

 //history update
   int all=rates_total;
   int counted=prev_calculated;
   if (all-counted> 1 )
  { 
   ArrayInitialize (up_arr, EMPTY_VALUE );
   ArrayInitialize (down_arr, EMPTY_VALUE );
  counted= 0 ;
  }
   
   //main
 for ( int i=all-counted;i>= 0 ;i--)
{
 
Vasyl Nosal :

Yalnızca arabellekler sıfırlandığında çalışır.

 //history update
   int all=rates_total;
   int counted=prev_calculated;
   if (all-counted> 1 )
  { 
   ArrayInitialize (up_arr, EMPTY_VALUE );
   ArrayInitialize (down_arr, EMPTY_VALUE );
  counted= 0 ;
  }
   
   //main
 for ( int i=all-counted;i>= 0 ;i--)
{

Üzgünüm ama şunu sorayım:

  • Neden her bir tick üzerinde oluşturulan ayrı değişkenlere oranları_toplam ve prev_calculated değerlerini atamanız gerekiyor?
  • if () koşullu operatörünün ifadesinde ve for () döngüsünde, bu değişkenlerin farkını yeniden hesaplamak için?
  • neden oranlar_toplam ve prev_hesaplanan arasındaki fark için limit gibi bir değişken getirmiyorsunuz?
Uygulama, görevlere bağlı olarak farklı olabilir. Nüanslar farklı olabilir. Başkalarının bunu çeşitli koşullara bağlı olarak nasıl uyguladığını görebiliyor musunuz? Dahil olmak üzere ve bir çıktı yardımıyla, görevlere bağlı olarak sizin için kabul edilebilir olan seçenekleri belirleyin, karar verin, biçimlendirin?
 
Vasyl Nosal :

Bir postscript ekleyeceğim:

Koşullu ifadenin if(){} bloğundaki sıfırlama (counted= 0 ) fikriniz bana açık görünüyor.

Her ihtimale karşı, yukarıda kısaca aklımdan geçenler de dahil olmak üzere, sizin için daha net olması için, Documentation bölümünden bir alıntı yapacağım ... Dil Temelleri / Fonksiyonlar / Olay İşleme Fonksiyonları :

... OnCalculate() işlevine yapılan son çağrıdan bu yana fiyat verileri değiştiyse (daha derin geçmiş yüklendi veya geçmiş boşlukları dolduruldu), prev_calculated girdi parametresinin değeri terminalin kendisi tarafından sıfıra ayarlanacaktır. .

 
Vasyl Nosal :

Yalnızca arabellekler sıfırlandığında çalışır.

Hiçbir şeyi sıfırlamanıza gerek yok.

 int OnCalculate (...)
{
   // индекс последнего посчитанного на прошлом вызове бара
   // с которого начинаем расчёт
   int nStartBar = rates_total - MathMax (prev_calculated, 1 );

   for ( int i = nStartBar; i >= 0 ; i--)
   {
       // рассчитываем индикатор на всех непосчитанных барах
   }
}

prev_caclulated sıfırlandığında, gösterge tamamen yeniden hesaplanacaktır. Ve haklı olarak - tarihte tam olarak neyin değiştiğini bilmiyorsunuz. Belki bir delik yüklenmiştir, belki bijonlar bir yerlerde temizlenmiştir... Tamamen yeniden hesaplamak zorunludur. Diğer tüm durumlarda, yalnızca son bir çubuk yeniden hesaplanır ( yeni bir çubuk göründüğünde, son ikisi).

 
Dina Paches :

Üzgünüm ama şunu sorayım:

  • neden her bir kene üzerinde oluşturulan ayrı değişkenlere oranları_toplam ve prev_calculated değerlerini atamanız gerekiyor?
  • if () koşullu operatörünün ifadesinde ve for () döngüsünde, bu değişkenlerin farkını yeniden hesaplamak için?
  • neden oranlar_toplam ve prev_hesaplanan arasındaki fark için limit gibi bir değişken getirmiyorsunuz?
Uygulama, görevlere bağlı olarak farklı olabilir. Nüanslar farklı olabilir. Başkalarının bunu çeşitli koşullara bağlı olarak nasıl uyguladığını görebiliyor musunuz? Dahil olmak üzere ve bir çıktı yardımıyla, görevlere bağlı olarak sizin için kabul edilebilir olan seçenekleri belirleyin, karar verin, biçimlendirin?

Teşekkür ederim. İyi bir nokta.

Ama hayır. Bu, bir boşluk varsa tüm geçmişi yeniden hesaplayabilmeniz içindir.

 
Dina Paches :

Bir postscript ekleyeceğim:

Koşullu ifadenin if(){} bloğundaki sıfırlama (counted= 0 ) fikriniz bana açık görünüyor.

Her ihtimale karşı, yukarıda kısaca aklımdan geçenler de dahil olmak üzere, sizin için daha net olması için, Documentation bölümünden bir alıntı yapacağım ... Dil Temelleri / Fonksiyonlar / Olay İşleme Fonksiyonları :

... OnCalculate() işlevine yapılan son çağrıdan bu yana fiyat verileri değiştiyse (daha derin geçmiş yüklendi veya geçmiş boşlukları dolduruldu), prev_calculated girdi parametresinin değeri terminalin kendisi tarafından sıfıra ayarlanacaktır. .

Gitmeyecek. 0, sonra 0 değil, sonra tekrar 0 (geçmiş birkaç kez yüklendiğinde).
 
Sergei Vladimirov :

Hiçbir şeyi sıfırlamanıza gerek yok.

prev_caclulated sıfırlandığında, gösterge tamamen yeniden hesaplanacaktır. Ve haklı olarak - tarihte tam olarak neyin değiştiğini bilmiyorsunuz. Belki bir delik yüklenmiştir, belki bijonlar bir yerlerde temizlenmiştir... Tamamen yeniden hesaplamak zorunludur. Diğer tüm durumlarda, yalnızca son bir çubuk yeniden hesaplanır ( yeni bir çubuk göründüğünde, son ikisi).

Numara. Sıfırlama olmadan, ekran görüntülerinde ne varsa o olacaktır.