Zero Divide(문제를 찾았지만 그 이유는 무엇입니까?)

 

그래서 나는 0 분할 을 일으키는 문제를 발견했습니다. 지금까지 이것을 본 적이 없습니다. 나는 이것이 나타날 때까지 내 코드가 끝났다고 생각했습니다! 내 EA에는 3가지 변형이 있습니다. 1은 완벽하게 작동하고 다른 두 가지는 이 부서에서 유사합니다(아래 코드). 이것이 왜 0 분할을 일으키는지 이해할 수 없습니까?

문제를 일으키는 줄을 나타내는 화살표가 있는 줄을 찾으십시오... 여기에서 이 문제로 분리했습니다. 또는 AUDUSD 백테스트에서 이상 현상이 발생합니다(Forex Tester 2에서 내 과거 데이터를 다운로드합니다... 내 EA의 벌금 중 하나에서 작동하는 것 같습니다.)

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

그래서 나는 0 분할을 일으키는 문제를 발견했습니다. 지금까지 이것을 본 적이 없습니다. 나는 이것이 나타날 때까지 내 코드가 끝났다고 생각했습니다! 내 EA에는 3가지 변형이 있습니다. 1은 완벽하게 작동하고 다른 두 가지는 이 부서에서 유사합니다(아래 코드). 이것이 왜 0 분할을 일으키는지 이해할 수 없습니까?

문제를 일으키는 줄을 나타내는 화살표가 있는 줄을 찾으십시오... 여기에서 이 문제로 분리했습니다. 또는 AUDUSD 백테스트에서 이상 현상이 발생합니다(Forex Tester 2에서 내 과거 데이터를 다운로드합니다... 내 EA의 벌금 중 하나에서 작동하는 것 같습니다.)

문제를 찾았는지 확실하지 않습니다. . . 가지고 있는지 어떻게 압니까?

나는 당신이 화살표로 표시한 코드가 0으로 나누기 오류를 일으킬 것이라고 생각하지 않습니다. . .

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

이것으로 . . .

 double HalfAPoint = Point / 2.0 ;



if (ema21 - H1_low > HalfAPoint) 

그리고 다시 시도하십시오.

나는 당신 의 오류 가 다른 곳에 있기 때문에 남아 있을 것이라고 생각 합니다 . . .

 

위의 /div 문제는 하나만 찾을 수 있습니다.

0 나누기 는 위의 함수에서 나온 것이 아닙니다.

모든 코드를 표시하지 않으려면 다음을 수행하십시오.

ea, custom_indicators 및 포함된 파일 내에서 모든 분할 문제를 추적합니다.

/의 right_side에 있는 표현식이 0과 같을 수 없는지 확인하십시오.

추가됨:

또 다른 참고 사항으로 ArraySort()의 이점을 활용할 수 있습니다.

Daily_3가 최고/최저인지 알고 싶다면 배열을 만들고 정렬하십시오.

 
RaptorUK :

문제를 찾았는지 확실하지 않습니다. . . 가지고 있는지 어떻게 압니까?

나는 당신이 화살표로 표시한 코드가 0으로 나누기 오류를 일으킬 것이라고 생각하지 않습니다. . .

이것으로 . . .

그리고 다시 시도하십시오.

나는 당신 의 오류 가 다른 곳에 있기 때문에 남아 있을 것이라고 생각 합니다 . . .


내 EA의 "V1-V2-V3"이 있습니다.

나는 본질적으로 V1을 새로운 빈 템플릿에 복사하고 위에서 설명한 부분을 (아래 코드)로 변경했으며 AUDUSD에 대한 백 테스트 중에 0 분할 오류가 발생했습니다. 데이터가 0분할과 관련이 있습니까? 2001년부터 2013년까지 EURUSD에서 내 EA의 모든 버전에 대한 백 테스트를 실행할 때(Forex Tester가 데이터를 다운로드하고 ST로 가져옴), 내 EA 중 하나에서 오류가 발생하지 않습니까?

            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.
                }
 
다른 쌍을 통해 실행 중이고 V2 및 V3이 있는 AUDUSD에 있지 않는 한 이 0분할 문제가 표시되지 않는 것 같습니까? 데이터와 관련이 없는 경우 수정하시겠습니까?
 
DomGilberto :
다른 쌍을 통해 실행 중이고 V2 및 V3이 있는 AUDUSD에 있지 않는 한 이 0분할 문제가 표시되지 않는 것 같습니까? 데이터와 관련이 없는 경우 수정하시겠습니까?
가격을 제수로 사용하는 코드가 있고 가격이 0.0이면 가격 때문에 0으로 나누기 오류가 발생할 수 있습니다. . .
 
DomGilberto :


내 EA의 "V1-V2-V3"이 있습니다.

나는 본질적으로 V1을 새로운 빈 템플릿에 복사하고 위에서 설명한 부분을 (아래 코드)로 변경했으며 AUDUSD에 대한 백 테스트 중에 0 분할 오류가 발생했습니다. 데이터가 0분할과 관련이 있습니까? 2001년부터 2013년까지 EURUSD에서 내 EA의 모든 버전에 대한 백 테스트를 실행할 때(Forex Tester가 데이터를 다운로드하고 ST로 가져옴), 내 EA 중 하나에서 오류가 발생하지 않습니까?

코드를 변경하기 전에 오류를 마음대로 재현할 수 있어야 합니다. . . 일단 그렇게 할 수 있으면 조사할 수 있습니다.
 
DomGilberto : 데이터가 0분할과 관련이 있습니까?
여기에는 마음의 독자가 없습니다. 나누기가 있는 코드를 표시하지 않았으므로 여기에서 아무도 도와줄 수 없습니다.
 
WHRoeder :
여기에는 마음의 독자가 없습니다. 나누기가 있는 코드를 표시하지 않았으므로 여기에서 아무도 도와줄 수 없습니다.

내가 던진 것은 간단한 질문이었습니다. 데이터가 그것과 관련이 있습니까? 그렇지 않다면 나는 그것을 경험 한 사람들로부터 제로 디바이드 에 대해 더 많이 이해합니다 ... 여기에 마인드 리더가 있다고 생각하지 않았습니다 ...

여기에 모든 작은 구분을 게시하기에는 너무 많은 코드가 있습니다. 내가 우려하는 한 나는 위에서 설명한 것과 문제를 분리했다고 생각했지만 분명히 그렇지는 않았습니다. 작은 것 하나를 변경한 다음 0으로 나누기 때문에 작동하지 않는 것이 조금 이상합니다(제가 변경한 작은 것은 첫 번째 게시물에서 설명한 것입니다).

@RaptorUK 따라서 본질적으로 AUDUSD에서 백 테스트하는 동안 데이터 가격이 비정상적일 수 있습니다. V2와 V3가 완벽하게 1/4 정도 실행되다가 갑자기 0 분할에 도달하여 EA가 함께 작동하지 못하게 하는 것이 조금 이상합니다.

 
DomGilberto :


@RaptorUK 따라서 본질적으로 AUDUSD에서 백 테스트하는 동안 데이터 가격이 비정상적일 수 있습니다. V2와 V3이 완벽하게 1/4 정도 실행되다가 갑자기 0분할에 도달하여 EA가 함께 작동하지 못하게 하는 것이 조금 이상합니다.

이 간단한 문제를 분류하는 데 며칠을 보내고 싶다면 언제든지 부담 없이 지내십시오. . . . 나는하지 않을 것이다.

백 테스트 중에 언제 발생하는지 안다면 쉽게 찾을 수 있습니다. . . 백 테스트가 발생한 날짜 하루 전에 백 테스트를 시작합니다. . . 언제 일어날지 정확히 알아내십시오. . . 코드의 모든 구분에 대해 . . . 예, 모두, 제수를 인쇄하는 나눗셈이 포함된 줄 앞에 Print()를 추가하고 해당 코드 줄에 대한 참조를 추가합니다. . .

예를 들어:

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

a = c / d;

코드가 0으로 나누기 오류로 종료되면 로그 파일을 확인 하고 마지막 몇 인쇄에서 오류를 생성한 코드 행과 0으로 설정된 변수를 보여주는 인쇄가 표시됩니다. . .

. . . 더 똑똑하게 일하는 법을 배우고 문제를 논리적이고 효율적으로 찾아내십시오.

 
DomGilberto : 내가 던진 것은 간단한 질문이었습니다.
여기에서 아무도 대답할 수 없다는 것입니다. 당신은 게으르다. "이것이 작동할 것인가" 또는 "잘못된 것"을 계속 게시하지만 가치 있는 것은 제공하지 않습니다.
돔길베르토 :
이봐, 당신 말이 맞아, 모호해서 미안해!

그리고 당신은 배우지 않습니다 - 당신은 모든 (관련) 코드와 변수 값을 반복적으로 요청 받았습니다. 왜 우리는 21개의 게시물을 나중에 요청해야 합니까? 코드에 인쇄 문을 넣고 what 및 was와 같은 정보를 얻으십시오.

그런 다음 여전히 문제를 해결할 수 없으면 질문하십시오.

사유: