Bir göstergede sıfıra bölme hatası var - sayfa 6

 
Aleksey Vyazmikin :

Mantıksal olarak sıfıra eşit olmamalı - bunun neden olduğu açık değil!

d1'iniz minyatür sayılar üretiyor, fiyatı int'ye çevirerek bu tür sorunlardan kaçınıyorum, yani. örneğin int bid=int((tick_array[0].bid+_Point/10)/_Point);, hesaplamalar çift olarak yapılırsa muhtemelen bazen 5 simgesinde 0.00000999999 verilir
 
Aleksey Vyazmikin :

Mantıksal olarak sıfıra eşit olmamalı - bunun neden olduğu açık değil!

Si-9.18'de hata ayıklayıcıda başlatıldı. Bazı nedenlerden dolayı, oranlardaki süre 2016'dır. i değeri 2189 olmasına rağmen likiditenin olmadığı grafiğin başında hesaplamaya başlamaktadır. Başlatma ve durdurma arasındaki ilk süre 1 saattir. Ancak bu saat için - yalnızca bir zaman değeri. Bunu hem başlangıç değişkeni hem de bitiş değişkeni olarak bulur. Sonuç olarak, başla = dur. Elbette. çıkarırsanız sıfır alırsınız. Daha çözemedim.

 
ovak77 :
d1'iniz minyatür sayılar üretiyor, fiyatı int'ye çevirerek bu tür sorunlardan kaçınıyorum, yani. örneğin int bid=int((tick_array[0].bid+_Point/10)/_Point);, hesaplamalar çift olarak yapılırsa muhtemelen bazen 0 verilir

Evet, d1'i tartışmayalım - bu gerekli, o zaman gerekli, orada her şey doğru kabul edilir. Asıl soru, start_time ve stop_time ile start_index ve stop_index için neden aynı değeri alıyoruz?

 
Aleksey Vyazmikin :

d1'i tartışmayalım - bu gerekli, bu yüzden gerekli, orada her şey doğru kabul ediliyor. Asıl soru, start_time ve stop_time ile start_index ve stop_index için neden aynı değeri alıyoruz?

Bu size kalmış, örneğin 0.0000099999'u 2'ye bölmeyi deneyin.
 

Bir sonraki donmadan sonra, terminal açılmayı bıraktı .... yeniden yüklemeden nasıl yeniden canlandırılır?

Hafızada asılı olduğu ortaya çıktı - süreci zorla öldürdü - başladı.

 
Aleksey Vyazmikin :

Zamanın eşit olması nasıl mümkün olabilir? Yarım yıl boyunca her şey doğru çalıştı ...

 void CreateFigure( int i, const datetime & Time [], const double & Open [], const double & High [], const double & Low [], const double & Close [], MqlRates &rates[])
  {                                                               //i = 2189 
   datetime start_time=rates[i].time;                             //start_time=rates[i].time = D'2016.10.06 12:00:00'
   datetime stop_time=(start_time+ PeriodSeconds (TimeFrames));     //stop_time = D'2016.10.06 13:00:00'
//---                                                            //Time[38572] = D'2016.10.05 19:23:00'
   int start_index,stop_index,limit;                             //Time[38571] = D'2016.10.06 12:35:00'
   datetime vertical_line_time;                                   //Time[38570] = D'2016.10.06 19:05:00'
//---
   start_index= ArrayBsearch ( Time ,start_time);                     //start_index = 38571
   if ( Time [start_index]<start_time) start_index=(start_index> 0 ?start_index- 1 :start_index);
   start_time= Time [start_index];                                 //start_time = D'2016.10.06 12:35:00'
   if (i> 0 )
     {
      stop_index= ArrayBsearch ( Time ,stop_time);                   //stop_index = 38571
       if ( Time [stop_index]>stop_time) stop_index++;
      stop_time= Time [stop_index];                                 //stop_time  = D'2016.10.06 12:35:00'
      limit=start_index-stop_index+ 1 ;
      vertical_line_time= Time [start_index-(limit>> 1 )];
Önce limit=start_index-stop_index+ 1, yani limit==1 yazdınız ve ardından 2'ye bölmenin limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) olduğu yerde yazdınız. Birim eklenmedi. Sıfır nokta ile bölünür.
 
Sergey Savinkin :

Si-9.18'de hata ayıklayıcıda başlatıldı. Bazı nedenlerden dolayı, oranlardaki süre 2016'dır. i değeri 2189 olmasına rağmen likiditenin olmadığı grafiğin başında hesaplamaya başlamaktadır. Başlatma ve durdurma arasındaki ilk süre 1 saattir. Ancak bu saat için - yalnızca bir zaman değeri. Bunu hem başlangıç değişkeni hem de bitiş değişkeni olarak bulur. Sonuç olarak, başla = dur. Elbette. çıkarırsanız sıfır alırsınız. Daha çözemedim.

Giriş parametrelerinde BarsUsed=100 olarak ayarlayın.

 
Aleksey Vyazmikin :

Giriş parametrelerinde BarsUsed=100 olarak ayarlayın.

Evet, hata yok. Ancak, düşük likiditeli bir alete veya likit olmayan bir zaman alırsanız - örneğin akşam seansında, o zaman bir saat içinde kolayca 1 alt çubuk olabilir. Burada limit = 0 ve güvenceye sahipsiniz! Ve eğer tırnaklar 2 ise, limit/2 yuvarlama sırasında yine de 0 verecektir.

 
Sergey Savinkin :

Evet, hata yok. Ancak, düşük likiditeli bir alete veya likit olmayan bir zaman alırsanız - örneğin akşam seansında, o zaman bir saat içinde kolayca 1 alt çubuk olabilir. Burada limit = 0 ve güvenceye sahipsiniz! Ve eğer tırnaklar 2 ise, limit/2 yuvarlama sırasında yine de 0 verecektir.

Belki yaparım, teşekkürler. Ancak küresel sorun başka bir şey .... sorun, istikrarlı olmaması.

 
ovak77 :
Bu size kalmış, örneğin 0.0000099999'u 2'ye bölmeyi deneyin.

Basılı d1 - görevlerim için

 2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 35.71428571428572
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 32.78688524590164
2018.07 . 04 19 : 38 : 06.404 IndDrafter_Test (Si- 9.18 ,M1)    d1= 43.47826086956522

Genel olarak, durum böyle değil, teşekkürler.