零分法(发现问题--但为什么?)

 

所以我已经找到了导致零除法 的问题--直到现在我还没有看到这个问题。我以为我的代码已经完成了,直到这个问题的出现我的EA有3个变化。其中一个工作得完美无缺,另外两个在这个部门也是类似的(代码如下)。我无法理解为什么会造成零分化?

寻找带有箭头的线条,表示造成问题的线条......我已经把它隔离到这个问题上了?要么就是我在澳元兑美元的回测中出现了异常(我从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:

所以我已经找到了导致零除法的问题--直到现在我还没有看到这个问题。我以为我的代码已经完成了,直到这个问题的出现我的EA有3个变化。其中一个工作得完美无缺,另外两个在这个部门也是类似的(代码如下)。我无法理解为什么会造成零分化?

寻找带有箭头的线条,表示造成问题的线条......我已经把它隔离到这个问题上了?要么就是我的澳元兑美元回测出现了异常(我从Forex Tester 2下载我的历史数据......似乎与我的一个EA的工作正常。)

我不确定你是否找到了问题所在......你怎么知道你找到了?

我不认为你箭头所指的代码会导致除以零的错误,为了确定,请把这个 . .

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

换成这个 . .

double HalfAPoint = Point / 2.0;



if(ema21 - H1_low > HalfAPoint) 

然后再试一次。

我怀疑你的错误会一直存在,因为它位于其他地方 . .

 

我只能在上面找到一个/分的问题。

零除法 并不是来自上述函数。

如果你不想显示所有的代码,那么。

在ea、custom_indicators和包含的文件中追踪你所有的除法问题。

确保"/"右边的表达式不能等于0。

补充。

在另一个方面,你真的可以从ArraySort()中受益。

如果你想知道Daily_3是否是最高/最低价,可以建立数组并排序。

 
RaptorUK:

我不确定你是否找到了问题所在 ...... 你怎么知道你找到了?

我不认为你箭头所指的代码会导致除以零的错误,为了确定,请把这个 . .

用这个 . .

然后再试试。

我怀疑你的错误会一直存在,因为它位于其他地方 . .


我有我的EA的 "V1-V2-V3"。

我基本上把V1复制到一个新的空白模板上,并把我上面说明的部分改为(下面的代码),在澳元兑美元的回测中,它给我一个零除法 错误。数据与零除法有什么关系吗?当我对2001-2013年我所有版本的欧元兑美元的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上?如果数据与此无关,请纠正我?
 
DomGilberto:
我只是通过其他货币对运行,这个零除法问题似乎没有显示出来,除非是在澳元兑美元的V2和V3上?如果数据与此无关,请纠正我?
如果你的代码中使用价格作为除数,而价格是0.0,那么你可以得到一个除以零的错误,因为价格......。
 
DomGilberto:


我有我的EA的 "V1-V2-V3"。

我基本上把V1复制到一个新的空白模板上,并把我上面说明的部分改为(下面的代码),在澳元兑美元的回测中,它给我一个零除法错误。数据与零除法有什么关系吗?当我对2001-2013年我所有版本的欧元兑美元的EA进行回测时(Forex Tester下载数据并导入ST),我的任何一个EA都没有得到任何错误?

在你改变代码之前,你需要能够随意重现错误......一旦你能够做到这一点,你就可以调查它。
 
DomGilberto: 数据与零除法有什么关系吗?
这里没有读心术。你没有给我们看有除法的代码,所以这里没有人可以帮助你。
 
WHRoeder:
这里没有读心术。你还没有向我们展示除数的代码,所以这里没有人可以帮助你。

我所问的只是一个简单的问题,数据与它有关系吗?如果没有,那么我从有经验的人那里了解更多关于 除法的情况......没想到这里有读心术的人...

这里有太多的代码,不可能把每个小的除法都贴在这里。就我而言,我以为我把问题隔离在我上面解释的地方,但显然不是。它只是有点奇怪,我改变了一个小东西,然后它就不工作了,因为我得到了零除数(我改变的小东西就是我在第一篇文章中说明的。)

@RaptorUK所以本质上可能是我回测时数据价格的异常,在这种情况下,对澳元兑美元。只是有点奇怪的是,V2和V3运行了大约1/4的时间,没有任何问题,然后它突然遇到了一个零除数,使EA完全停止工作。

 
DomGilberto:


@RaptorUK所以本质上可能是我回测时数据价格的异常,在这种情况下,在澳元兑美元上。只是有点奇怪的是,V2和V3运行了大约1/4的时间,没有任何问题,然后它突然遇到了一个零分叉,并使EA完全停止工作。

如果你想花几天时间来整理这个简单的问题,那么请随意......。我不会的。

如果你知道它在你的回测中何时发生,那么就很容易找到它 ......在它发生的前一天开始回测 ......精确到分钟,找出它将要发生的时间 ......对于你代码中的所有除法 ......是的,所有的除法。是的,所有的除法,在包含除法的行前添加一个Print(),打印出除数和对相关代码行的引用。

比如说。

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

a = c / d;

当你的代码以除以0的错误结束时,检查 日志文件,在最后几个打印中会显示产生错误的代码行和哪个变量被设置为0 ... ...

... ... 学会更聪明地工作,有逻辑和有效地寻找你的问题。

 
DomGilberto: 我所问的只是一个简单的问题。
那这里没有人可以回答。你很懒惰。你一直在发布 "这能行吗 "或 "有什么问题",但没有提供任何有价值的东西。
DomGilberto:
嘿,你是对的,对不起,我说得很含糊!

你不学习 - 你已经被反复要求提供所有的(相关)代码和你的变量值。为什么我们在21个帖子后还得问?把打印语句放在你的代码中,并获得一些信息,如什么和是什么。

那么如果你还是不能解决你的问题,就问吧。