Zero Divide (Das Thema gefunden - aber warum?)

 

Ich habe also das Problem gefunden, das die Nullteilung verursacht - ich habe dies bis jetzt noch nicht gesehen. Ich dachte, ich war fertig mit meinem Code, bis dies aufgetaucht! Ich habe 3 Varianten meines EA. 1 funktioniert einwandfrei, die anderen beiden sind ähnlich in dieser Abteilung (Code unten). Ich kann nicht verstehen, warum dies eine Nullteilung verursachen würde?

Suchen Sie nach den Zeilen mit den Pfeilen, die die Zeilen anzeigen, die das Problem verursachen... Ich habe dieses Problem hier isoliert? Entweder das oder ich bin immer eine Anomalie mit AUDUSD Backtest (Ich lade meine historischen Daten von Forex Tester 2... scheint zu arbeiten mit einem meiner EA's gut.)

//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| 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:

Ich habe also das Problem gefunden, was die Nullteilung verursacht - ich habe das bis jetzt noch nicht gesehen. Ich dachte, ich war fertig mit meinem Code, bis dies aufgetaucht! Ich habe 3 Varianten meines EA. 1 funktioniert einwandfrei, die anderen beiden sind ähnlich in dieser Abteilung (Code unten). Ich kann nicht verstehen, warum dies eine Nullteilung verursachen würde?

Suchen Sie nach den Zeilen mit den Pfeilen, die die Zeilen anzeigen, die das Problem verursachen... Ich habe dieses Problem hier isoliert? Entweder das oder ich bekomme eine Anomalie mit AUDUSD Backtest (ich lade meine historischen Daten von Forex Tester 2 herunter... scheint mit einem meiner EA's gut zu funktionieren).

Ich bin nicht sicher, ob Sie das Problem gefunden haben... woher wissen Sie, dass Sie es haben?

Ich glaube nicht, dass der Code, den Sie mit einem Pfeil markiert haben, einen Fehler bei der Division durch Null verursacht; um sicher zu sein, ersetzen Sie dies...

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

mit diesem...

double HalfAPoint = Point / 2.0;



if(ema21 - H1_low > HalfAPoint) 

und versuchen Sie es erneut.

Ich vermute, dass Ihr Fehler bestehen bleibt, da er an einer anderen Stelle liegt...

 

Ich kann nur ein /Aufteilungsproblem ausfindig machen.

Die Nullteilung kommt nicht von der obigen Funktion.

Wenn Sie nicht alle Codes zeigen wollen, dann:

Finden Sie alle Ihre Divisionsprobleme in ea, custom_indicators und den enthaltenen Dateien.

Stellen Sie sicher, dass der Ausdruck auf der rechten Seite von / nicht gleich 0 sein kann.

Hinzugefügt:

Eine weitere Anmerkung: Sie könnten wirklich von ArraySort() profitieren.

Wenn Sie wissen wollen, ob Daily_3 am höchsten/niedrigsten ist, erstellen Sie ein Array und sortieren Sie.

 
RaptorUK:

Ich bin mir nicht sicher, ob Sie das Problem gefunden haben... woher wissen Sie, dass Sie es haben?

Ich glaube nicht, dass der Code, den Sie mit einem Pfeil markiert haben, einen Fehler bei der Division durch Null verursacht. Um sicher zu sein, ersetzen Sie dies...

mit diesem...

und versuchen Sie es erneut.

Ich vermute, dass Ihr Fehler bestehen bleibt, da er an einer anderen Stelle liegt...


Ich habe "V1-V2-V3" von meinem EA.

Ich kopierte im Wesentlichen über V1 auf eine neue leere Vorlage und änderte den Teil, den ich oben über (unten Code) illustriert und es gab mir eine Null-Division-Fehler während eines Backtest auf AUDUSD. Haben die Daten etwas mit der Nullteilung zu tun? Wenn ich einen Backtest aller Versionen meines EA auf EURUSD von 2001-2013 durchführe (Forex Tester hat Daten heruntergeladen und in ST importiert), erhalte ich bei keinem meiner EAs einen Fehler?

            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.
                }
 
Im nur durch andere Paare laufen und diese Null teilen Problem scheint nicht zu sein, zeigen, es sei denn seine auf AUDUSD mit V2 und V3? Korrigieren Sie mich, wenn die Daten nichts damit zu tun hat?
 
DomGilberto:
Im nur durch andere Paare laufen und diese Null teilen Problem scheint nicht zu sein, zeigen, es sei denn seine auf AUDUSD mit V2 und V3? Korrigieren Sie mich, wenn die Daten nichts damit zu tun hat?
Wenn Sie einen Code haben, bei dem Sie den Preis als Divisor verwenden und der Preis 0,0 ist, dann können Sie einen Fehler bei der Division durch Null bekommen, weil der Preis ...
 
DomGilberto:


Ich habe "V1-V2-V3" von meinem EA.

Ich im Wesentlichen kopiert über V1 auf eine neue leere Vorlage und änderte den Teil, den ich oben über (unten Code) illustriert und es gab mir eine Null-Division-Fehler während eines Backtest auf AUDUSD. Haben die Daten etwas mit der Nullteilung zu tun? Wenn ich einen Backtest aller Versionen meines EA auf EURUSD von 2001-2013 durchführe (Forex Tester hat Daten heruntergeladen und in ST importiert), erhalte ich bei keinem meiner EAs einen Fehler?

Bevor Sie den Code ändern, müssen Sie in der Lage sein, den Fehler nach Belieben zu reproduzieren ... sobald Sie das tun können, dann können Sie es untersuchen.
 
DomGilberto: Haben die Daten etwas mit der Nullteilung zu tun?
Hier gibt es keine Gedankenleser. Sie haben uns den Code mit dem Divide nicht gezeigt, also kann Ihnen hier niemand helfen.
 
WHRoeder:
Es gibt keine Gedankenleser hier. Sie haben nicht gezeigt, uns den Code mit der Teilung, so dass niemand hier kann Ihnen helfen.

Alles, was ich gefragt habe, war eine einfache Frage: Haben die Daten etwas damit zu tun? Wenn nicht, dann verstehe ich mehr über Zero Divide von Leuten, die Erfahrung damit haben... Hätte nicht gedacht, dass es hier Gedankenleser gibt...

Es gibt zu viel Code, um jede kleine Teilung hier zu posten. Ich dachte, ich hätte das Problem auf das beschränkt, was ich oben erklärt habe, aber anscheinend nicht. Es ist nur etwas seltsam, dass ich eine winzige Sache ändere und es dann nicht funktioniert, weil ich eine Nullteilung erhalte (die kleine Sache, die ich geändert habe, ist das, was ich im ersten Beitrag dargestellt habe).

@RaptorUK so im Wesentlichen könnte es eine Anomalie in den Preis der Daten während meiner Backtest, in diesem Fall, auf dem AUDUSD sein. Nur ein wenig seltsam, dass V2 und V3 laufen etwa 1/4 des Weges durch einwandfrei und dann trifft es ganz plötzlich eine Null-Teilung und stoppt die EA von der Arbeit alle zusammen.

 
DomGilberto:


@RaptorUK so im Wesentlichen könnte es eine Anomalie in den Preis der Daten während meiner Backtest, in diesem Fall, auf dem AUDUSD sein. Nur ein wenig seltsam, dass V2 und V3 laufen etwa 1/4 des Weges durch einwandfrei und dann trifft es ganz plötzlich eine Null-Teilung und stoppt die EA aus arbeiten alle zusammen.

Wenn Sie Tage damit verbringen wollen, dieses einfache Problem zu lösen, können Sie das gerne tun.... Ich würde es nicht tun.

Wenn Sie wissen, wann es während Ihres Backtests passiert, dann ist es leicht zu finden ... beginnen Sie den Backtest einen Tag vor dem Datum, an dem es passiert ... finden Sie auf die Minute genau heraus, wann es passieren wird ... für alle Divisionen in Ihrem Code . ... ja, alle, fügen Sie ein Print() vor der Zeile mit der Division ein, das den Divisor und einen Verweis auf die betreffende Codezeile ausgibt ...

Zum Beispiel:

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

a = c / d;

Wenn Ihr Code mit dem Fehler "Dividieren durch Null" abbricht, überprüfen Sie die Protokolldatei, und in den letzten Ausdrucken wird die Codezeile, die den Fehler verursacht hat, und die Variable, die auf Null gesetzt wurde, ausgedruckt...

... Lernen Sie, intelligenter zu arbeiten und Ihre Probleme logisch und effizient zu finden.

 
DomGilberto: Alles, was ich gefragt habe, war eine einfache Frage,
Das kann dir hier niemand beantworten. Du bist faul. Du postest ständig "wird das funktionieren" oder "was ist falsch", aber lieferst nichts von Wert.
DomGilberto:
Hey, du hast recht, entschuldige, dass ich so vage war!

Und Sie lernen es nicht - Sie wurden wiederholt nach dem gesamten (relevanten) Code und Ihren Variablenwerten gefragt. Warum müssen wir 21 Beiträge später immer noch nachfragen? Bauen Sie die Druckanweisungen in Ihren Code ein und geben Sie Informationen wie was und wo.

Wenn du dein Problem dann immer noch nicht lösen kannst, frag nach.