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

 

koddaki limit int'dir, eğer 1/2=0.5 ise, görünüşe göre şimdi yuvarlama 1 değil, 0?

Hipotezi test etmek için kodu değiştirdim

         double d1=(delta_price_high-center_line_point)/(( double )limit/ 2 );
         double d2=(center_line_point-delta_price_low)/(( double )limit/ 2 );
 
Aleksey Vyazmikin :

Çöpü tamamlayın - yine sıfıra bölme hatası aldı

Kodu ME'den resim olarak gönderiyorum - belki körüm ama neler olduğunu anlamıyorum

Hepsi aynı satırda hata veriyor

Dosya aynıdır, çünkü baskı kodunun eklenmesi nedeniyle hatalı satır kaymıştır.

Şekillendiriciyi kullanmanız gerekir - sorunlu satırınızın if(limit==0) kontrol bölgesine DAHİL OLMADIĞINI hemen görürsünüz.

 
Vladimir Karputov :

Şekillendiriciyi kullanmanız gerekir - sorunlu satırınızın if(limit==0) kontrol bölgesine DAHİL OLMADIĞINI hemen görürsünüz.

Yani içeri girmesi gerekmiyor, neden?

 

Bu tür kod

         int a= 1 ;
         double test= 1 /(a/ 2 );

Terminali kapatın.

 
Aleksey Vyazmikin :

koddaki limit int'dir, eğer 1/2=0.5 ise, görünüşe göre şimdi yuvarlama 1 değil, 0?

Hipotezi test etmek için kodu değiştirdim

kod:

 //+------------------------------------------------------------------+
//|                                           writeSpicifiedType.mq5 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link        ""
#property version    "1.00"
//---
double high=- 1.0 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   for ( int limit= 0 ;limit< 4 ;limit++)
     {
       Print ( "limit (" ,limit, ")/2 " ,limit/ 2 );
     }
  }
//+------------------------------------------------------------------+


Sonuç:

Test_en (EURUSD,M30)    limit ( 0 )/ 2 0
Test_en (EURUSD,M30)    limit ( 1 )/ 2 0
Test_en (EURUSD,M30)    limit ( 2 )/ 2 1
Test_en (EURUSD,M30)    limit ( 3 )/ 2 1
 
Vladimir Karputov :

kod:


Sonuç:

Bu sadece nokta ve daha önce görünüşe göre 1/2, sıfır değil, 1 verdi.

 
Aleksey Vyazmikin :

Bu sadece nokta ve daha önce görünüşe göre 1/2, sıfır değil, 1 verdi.

Hayır. Her zaman çok yuvarlak olmuştur.

 
Vladimir Karputov :

Hayır. Her zaman çok yuvarlak olmuştur.

Yani yine de başka bir şey...

 

Baskı kodunu değiştirdi

         if (limit/ 2 == 0 )
         {
         limit= 2 ;
         Print ( "start_time - " , TimeToString (start_time, TIME_DATE | TIME_MINUTES ), " stop_time - " , TimeToString (stop_time, TIME_DATE | TIME_MINUTES ));
         Print ( "start_index=" ,start_index, " stop_index=" ,stop_index);
         }

ve şimdi anladım

 2018.07 . 04 15 : 47 : 07.959 IndDrafter (Si- 9.18 ,H1) start_time - 2017.08 . 10 11 : 00 stop_time - 2017.08 . 10 11 : 00
2018.07 . 04 15 : 47 : 07.959 IndDrafter (Si- 9.18 ,H1) start_index= 2012 stop_index= 2012

Nasıl yani?

 
Aleksey Vyazmikin :

Baskı kodunu değiştirdi

ve şimdi anladım

Nasıl yani?

Pekala. Eğer limit limit=( int )(stop_time-start_time)/ PeriodSeconds ( _Period ) formülü kullanılarak hesaplanırsa;

o zaman sonuç = 0 olacaktır.

Şimdi durma ve başlama zamanının nasıl oluştuğunu izlemeniz gerekiyor.

Neden: