Zero Divide (Sorunu buldum - ama neden?)

 

Böylece sıfır bölünmeye neden olan sorunu buldum - şimdiye kadar bunu daha önce görmemiştim. Bu ortaya çıkana kadar kodumun bittiğini sanıyordum! EA'mın 3 varyasyonu var. 1'i kusursuz çalışıyor, diğer ikisi bu bölümde benzer (aşağıdaki kod). Bunun neden sıfır bölünmeye neden olacağını anlayamıyorum?

Soruna neden olan satırları gösteren Oklu satırları arayın... Sorunu burada bu sorun olarak mı ayırdım? Ya öyle ya da AUDUSD arka testinde bir anormallik alıyorum (Geçmiş verilerimi Forex Tester 2'den indiriyorum... EA'mın cezalarından biriyle çalışıyor gibi görünüyor.)

 //+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Function that checks for an MA Cross                                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

void CheckForMaTrade()
   {
   double CurrentSmallFish1   =   iMA ( NULL , 60 , 3 , 0 , 1 , 0 , 1 ),  Hour4_3   =   iMA ( NULL , 240 , 3 , 0 , 1 , 0 , 1 ),  Daily_3   =   iMA ( NULL , 1440 , 3 , 0 , 1 , 0 , 1 ); 
   double CurrentSmallFish2   =   iMA ( NULL , 60 , 5 , 0 , 1 , 0 , 1 ),  Hour4_5   =   iMA ( NULL , 240 , 5 , 0 , 1 , 0 , 1 ),  Daily_5   =   iMA ( NULL , 1440 , 5 , 0 , 1 , 0 , 1 );
   double CurrentSmallFish3   =   iMA ( NULL , 60 , 8 , 0 , 1 , 0 , 1 ),  Hour4_8   =   iMA ( NULL , 240 , 8 , 0 , 1 , 0 , 1 ),  Daily_8   =   iMA ( NULL , 1440 , 8 , 0 , 1 , 0 , 1 );
   double CurrentSmallFish4   =   iMA ( NULL , 60 , 10 , 0 , 1 , 0 , 1 ), Hour4_10  =   iMA ( NULL , 240 , 10 , 0 , 1 , 0 , 1 ), Daily_10  =   iMA ( NULL , 1440 , 10 , 0 , 1 , 0 , 1 );
   double CurrentSmallFish5   =   iMA ( NULL , 60 , 12 , 0 , 1 , 0 , 1 ), Hour4_12  =   iMA ( NULL , 240 , 12 , 0 , 1 , 0 , 1 ), Daily_12  =   iMA ( NULL , 1440 , 12 , 0 , 1 , 0 , 1 );
   double CurrentSmallFish6   =   iMA ( NULL , 60 , 15 , 0 , 1 , 0 , 1 ), Hour4_15  =   iMA ( NULL , 240 , 15 , 0 , 1 , 0 , 1 ), Daily_15  =   iMA ( NULL , 1440 , 15 , 0 , 1 , 0 , 1 );
   double CurrentBigFish1     =   iMA ( NULL , 60 , 30 , 0 , 1 , 0 , 1 ), Hour4_30  =   iMA ( NULL , 240 , 30 , 0 , 1 , 0 , 1 ), Daily_30  =   iMA ( NULL , 1440 , 30 , 0 , 1 , 0 , 1 );
   double CurrentBigFish2     =   iMA ( NULL , 60 , 35 , 0 , 1 , 0 , 1 ), Hour4_35  =   iMA ( NULL , 240 , 35 , 0 , 1 , 0 , 1 ), Daily_35  =   iMA ( NULL , 1440 , 35 , 0 , 1 , 0 , 1 );
   double CurrentBigFish3     =   iMA ( NULL , 60 , 40 , 0 , 1 , 0 , 1 ), Hour4_40  =   iMA ( NULL , 240 , 40 , 0 , 1 , 0 , 1 ), Daily_40  =   iMA ( NULL , 1440 , 40 , 0 , 1 , 0 , 1 );
   double CurrentBigFish4     =   iMA ( NULL , 60 , 45 , 0 , 1 , 0 , 1 ), Hour4_45  =   iMA ( NULL , 240 , 45 , 0 , 1 , 0 , 1 ), Daily_45  =   iMA ( NULL , 1440 , 45 , 0 , 1 , 0 , 1 );
   double CurrentBigFish5     =   iMA ( NULL , 60 , 50 , 0 , 1 , 0 , 1 ), Hour4_50  =   iMA ( NULL , 240 , 50 , 0 , 1 , 0 , 1 ), Daily_50  =   iMA ( NULL , 1440 , 50 , 0 , 1 , 0 , 1 );
   double CurrentBigFish6     =   iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 ), Hour4_60  =   iMA ( NULL , 240 , 60 , 0 , 1 , 0 , 1 ), Daily_60  =   iMA ( NULL , 1440 , 60 , 0 , 1 , 0 , 1 );
   double ema21               =   iMA ( NULL , 60 , 21 , 0 , 1 , 0 , 1 );

 //-------------------(-H1 Fish-)------------------\\  - //------------(-H4 Fish-)-----------\\ - //------------(-D1 Fish-)-----------\\
   
   // Check for Moving Averages Fanned up ON THE DAILY TIME FRAME, creating an UP bias.   
     if (D1_Bias== "None" ) 
       if (Daily_3>Daily_5)
         if (Daily_5>Daily_8)
             if (Daily_8>Daily_10)
               if (Daily_10>Daily_12)
                   if (Daily_12>Daily_15)
                     if (Daily_15>Daily_30)
                         if (Daily_30>Daily_35)
                           if (Daily_35>Daily_40)
                               if (Daily_40>Daily_45)
                                 if (Daily_45>Daily_50)
                                     if (Daily_50>Daily_60)
                                       {
                                       D1_Bar=Time[ 1 ];
                                       D1_Bias= "Daily is Up" ;
                                       Comment ( "Bias is: " +D1_Bias+ " since: " +TimeToStr(D1_Bar,TIME_DATE|TIME_MINUTES));
                                       }
  
   // Check for Moving Averages Fanned up ON THE 4 HOUR TIME FRAME, creating an UP bias.  
     if (D1_Bias== "Daily is Up" && H4_Bias== "None" ) 
       if (Hour4_3>Hour4_5)
         if (Hour4_5>Hour4_8)
             if (Hour4_8>Hour4_10)
               if (Hour4_10>Hour4_12)
                   if (Hour4_12>Hour4_15)
                     if (Hour4_15>Hour4_30)
                         if (Hour4_30>Hour4_35)
                           if (Hour4_35>Hour4_40)
                               if (Hour4_40>Hour4_45)
                                 if (Hour4_45>Hour4_50)
                                     if (Hour4_50>Hour4_60)
                                       {
                                       H4_Bar=Time[ 1 ];
                                       H4_Bias= "4 Hour is Up" ;
                                       Comment ( "Bias is: " +H4_Bias+ " since: " +TimeToStr(H4_Bar,TIME_DATE|TIME_MINUTES));
                                       }
   
   // Check for Moving Averages Fanned up on H1, creating an UP bias.
   if (D1_Bias== "Daily is Up" && H4_Bias== "4 Hour is Up" && H1_Bias== "None" )
       if (CurrentSmallFish1>CurrentSmallFish2)
         if (CurrentSmallFish2>CurrentSmallFish3)
             if (CurrentSmallFish3>CurrentSmallFish4)
               if (CurrentSmallFish4>CurrentSmallFish5)
                   if (CurrentSmallFish5>CurrentSmallFish6)
                     if (CurrentSmallFish6>CurrentBigFish1)
                         if (CurrentBigFish1>CurrentBigFish2)
                           if (CurrentBigFish2>CurrentBigFish3)
                               if (CurrentBigFish3>CurrentBigFish4)
                                 if (CurrentBigFish4>CurrentBigFish5)
                                     if (CurrentBigFish5>CurrentBigFish6)
                                       {
                                       triggerBarTime=Time[ 1 ];
                                       H1_Bias= "H1 is Up" ;
                                       Comment ( "Bias is: " +H1_Bias+ " since: " +TimeToStr(triggerBarTime,TIME_DATE|TIME_MINUTES));
                                       H4_Bias= "4 Hour is Up" ;
                                       Comment ( "Bias is: " +H4_Bias+ " since: " +TimeToStr(H4_Bar,TIME_DATE|TIME_MINUTES));
                                       D1_Bias= "Daily is Up" ;
                                       Comment ( "Bias is: " +D1_Bias+ " since: " +TimeToStr(D1_Bar,TIME_DATE|TIME_MINUTES));
                                       }
   
   
   
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////   

   H1_low  = iLow( NULL , PERIOD_H1 , 1 );
   H1_close = iClose( NULL , PERIOD_H1 , 1 );
   if (H1_Bias== "H1 is Up" && H4_Bias== "4 Hour is Up" && D1_Bias== "Daily is Up" && H1_close > CurrentBigFish6)
      {
       
         if (ema21 - H1_low > Point / 2 )   // << These parts here?
            {
            PullBack_Bar = Time[ 1 ];   // << These parts here?
            }
             if (PullBack_Bar > triggerBarTime)   // << These parts here?
                {
                H1_Buy_Touch = "H1 Buy Touch" ;
                OrderEntry( 0 ); // Pending order Buy Stop function is called.
                }


   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  
// The other way I write it on the other EA thats works perfectly is:

   ///////////////////////////////////////////////////////////////////////////////////////

   H1_high  = iHigh( NULL , PERIOD_H1 , 1 );
   H1_close = iClose( NULL , PERIOD_H1 , 1 );
   H4_close = iClose( NULL , PERIOD_H4 , 1 );
   D1_close = iClose( NULL , PERIOD_D1 , 1 );
   
   if (H1_Bias== "Down" && H4_Bias== "4 Hour is Down" && D1_Bias== "Daily is Down" && H1_high >= ema21 && H1_close < CurrentBigFish6)
      {
      H1_Sell_Touch = "H1 Sell Touch" ;
         {
         OrderEntry( 1 ); // Pending order Sell Stop function is called.
         }
      }
 
DomGilberto :

Böylece sıfır bölünmeye neden olan sorunu buldum - şimdiye kadar bunu daha önce görmemiştim. Bu ortaya çıkana kadar kodumun bittiğini sanıyordum! EA'mın 3 varyasyonu var. 1'i kusursuz çalışıyor, diğer ikisi bu bölümde benzer (aşağıdaki kod). Bunun neden sıfır bölünmeye neden olacağını anlayamıyorum?

Soruna neden olan satırları gösteren Oklu satırları arayın... Sorunu burada bu sorun olarak mı ayırdım? Ya öyle ya da AUDUSD arka testinde bir anormallik alıyorum (Geçmiş verilerimi Forex Tester 2'den indiriyorum... EA'mın cezalarından biriyle çalışıyor gibi görünüyor.)

Sorunu bulduğunuzdan emin değilim. . . sahip olduğunu nereden biliyorsun?

Okla işaretlediğiniz kodun sıfıra bölme hatasına neden olacağını sanmıyorum, emin olmak için this . . .

 if (ema21 - H1_low > Point / 2 )   // << These parts here?

Bununla . . .

 double HalfAPoint = Point / 2.0 ;



if (ema21 - H1_low > HalfAPoint) 

ve yeniden dene.

Hatanızın başka bir yerde bulunduğu için kalacağından şüpheleniyorum. . .

 

Yukarıda sadece bir/bölme problemini bulabiliyorum.

Sıfır bölme yukarıdaki fonksiyondan gelmiyor.

Tüm kodları göstermek istemiyorsanız:

Tüm bölme problemlerinizi ea, custom_indicators ve dahil edilen dosyalar içinde takip edin.

/ öğesinin sağ tarafındaki ifadenin 0'a eşit olamayacağından emin olun.

Katma:

Başka bir notta, ArraySort()'tan gerçekten faydalanabilirsiniz.

Daily_3'ün en yüksek/en düşük olup olmadığını bilmek istiyorsanız, dizi yapın ve sıralayın.

 
RaptorUK :

Sorunu bulduğunuzdan emin değilim. . . sahip olduğunu nereden biliyorsun?

Okla işaretlediğiniz kodun sıfıra bölme hatasına neden olacağını sanmıyorum, emin olmak için this . . .

Bununla . . .

ve yeniden dene.

Hatanızın başka bir yerde bulunduğu için kalacağından şüpheleniyorum. . .


EA'mın "V1-V2-V3" üne sahibim.

Esasen V1'i yeni bir boş şablona kopyaladım ve yukarıda gösterdiğim kısmı (kodun altında) olarak değiştirdim ve AUDUSD'de geriye dönük test sırasında bana sıfır bölme hatası verdi. Verilerin sıfır bölmeyle bir ilgisi var mı? 2001-2013 yılları arasında EURUSD üzerinde EA'mın tüm sürümlerinin geriye dönük testini çalıştırdığımda (Forex Tester verileri indirdi ve ST'ye aktardı), EA'larımdan herhangi birinde herhangi bir hata almıyorum?

            PullBack_Bar = Time[ 1 ];   // << These parts here?
            }
             if (PullBack_Bar > triggerBarTime)   // << These parts here?
                {
                H1_Buy_Touch = "H1 Buy Touch" ;
                OrderEntry( 0 ); // Pending order Buy Stop function is called.
                }
 
Sadece diğer çiftler arasında dolaşıyorum ve bu sıfır bölme sorunu, V2 ve V3 ile AUDUSD'de olmadığı sürece görünmüyor mu? Verilerin bununla hiçbir ilgisi yoksa beni düzeltin mi?
 
DomGilberto :
Sadece diğer çiftler arasında dolaşıyorum ve bu sıfır bölme sorunu, V2 ve V3 ile AUDUSD'de olmadığı sürece görünmüyor mu? Verilerin bununla hiçbir ilgisi yoksa beni düzeltin mi?
Bölen olarak fiyatı kullandığınız bir kodunuz varsa ve fiyat 0.0 ise, evet, fiyat nedeniyle sıfıra bölme hatası alabilirsiniz. . .
 
DomGilberto :


EA'mın "V1-V2-V3" üne sahibim.

Esasen V1'i yeni bir boş şablona kopyaladım ve yukarıda gösterdiğim kısmı (kodun altında) olarak değiştirdim ve AUDUSD'de geriye dönük test sırasında bana sıfır bölme hatası verdi. Verilerin sıfır bölmeyle bir ilgisi var mı? 2001-2013 yılları arasında EURUSD üzerinde EA'mın tüm sürümlerinin geriye dönük testini çalıştırdığımda (Forex Tester verileri indirdi ve ST'ye aktardı), EA'larımdan herhangi birinde herhangi bir hata almıyorum?

Kodu değiştirmeden önce, hatayı istediğiniz zaman yeniden oluşturabilmeniz gerekir. . . Bunu bir kez yapabildikten sonra araştırabilirsiniz.
 
DomGilberto : Verilerin sıfır bölmeyle bir ilgisi var mı?
Burada akıl okuyucular yok. Bize bölme kodunu göstermedin, bu yüzden burada kimse sana yardım edemez.
 
WHRoeder :
Burada akıl okuyucular yok. Bize bölme kodunu göstermedin, bu yüzden burada kimse sana yardım edemez.

Tek sorduğum basit bir soruydu, verilerin bununla bir ilgisi var mı? Değilse, sıfır ayrımı hakkında tecrübesi olan insanlardan daha iyi anlıyorum... Burada akıl okuyucular olduğunu düşünmemiştim...

Her küçük bölümü buraya göndermek için çok fazla kod var. Endişelendiğim kadarıyla, konuyu yukarıda açıkladıklarımla izole ettiğimi sanıyordum, ama görünüşe göre değil. Küçük bir şeyi nasıl değiştirdiğim ve sonra işe yaramadığı için biraz garip çünkü sıfır bölme alıyorum (değiştirdiğim küçük şey, ilk gönderide gösterdiğim şey.)

@RaptorUK, bu nedenle, geriye dönük testim sırasında verilerin fiyatında bir anormallik olabilir, bu durumda AUDUSD'de. V2 ve V3'ün yolun yaklaşık 1 / 4'ünü kusursuz bir şekilde geçmesi biraz garip ve sonra aniden sıfıra çarpıyor ve EA'nın hep birlikte çalışmasını engelliyor.

 
DomGilberto :


@RaptorUK, bu nedenle, geriye dönük testim sırasında verilerin fiyatında bir anormallik olabilir, bu durumda AUDUSD'de. V2 ve V3'ün yolun yaklaşık 1 / 4'ünü kusursuz bir şekilde geçmesi biraz garip ve sonra aniden sıfıra çarpıyor ve EA'nın hep birlikte çalışmasını engelliyor.

Bu basit sorunu çözmek için günlerinizi harcamak istiyorsanız, elbette çekinmeyin. . . . yapmazdım.

Sırt testiniz sırasında ne zaman olduğunu biliyorsanız, bulmak kolaydır. . . Geri teste, olduğu tarihten bir gün önce başlayın. . . tam olarak, ne zaman olacağını dakikasına öğrenin. . . kodunuzdaki tüm bölümler için. . . evet, hepsi, böleni yazdıran bölümü ve söz konusu kod satırına bir referansı içeren satırın önüne bir Print() ekleyin. . .

Örneğin:

if (d == 0.0 ) Print ( "a = c / d - divisor d is " + d );

a = c / d;

Kodunuz sıfıra bölme hatasıyla sona erdiğinde, günlük dosyasını kontrol edin ve son birkaç baskıda, hatayı üreten kod satırını ve hangi değişkenin sıfıra ayarlandığını gösteren baskı olacaktır. . .

. . . daha akıllı çalışmayı öğrenin ve sorunlarınızı mantıklı ve verimli bir şekilde araştırın.

 
DomGilberto : Tek sorduğum basit bir soruydu,
Burada kimse cevap veremez. Tembelsin. "Bu işe yarayacak mı" veya "Yanlış olan ne" yazmaya devam ediyor, ancak değerli hiçbir şey vermiyorsunuz.
DomGilberto :
Hey, haklısın, belirsiz olduğum için üzgünüm!

Ve öğrenmiyorsunuz - Tekrar tekrar TÜM (ilgili) kod ve değişken değerleriniz istendi. Neden hala 21 gönderi sonra sormak zorundayız? Print ifadelerini kodunuza koyun ve ne ve ne olduğu gibi bazı bilgileri alın.

O zaman hala sorununuzu çözemezseniz, sorun.