全局初始化失败!!!!!!!

 

如果有人能提供帮助...我为4个图表对运行一个专家顾问,在为第5个图表对运行时,在成功加载后,我有全局初始化失败,然后被删除...

我希望至少能得到一个指导,看看有什么问题。

谢谢...

 
HELLAS:

如果有人能提供帮助...我为4个图表对运行一个专家顾问,在为第5个图表对运行时,在成功加载后,我有全局初始化失败,然后被删除...

我希望至少有一个指导,看看有什么问题。

谢谢...

看来你在初始化过程中遇到了问题。检查 你的代码。如果你需要帮助,你可以贴出相关的代码。
 
angevoyageur:
看来你在初始化过程中遇到了问题。请检查你的代码。如果你需要帮助,你可以发布相关的代码。


谢谢你的回答。

问题是,我的代码对4个图表(对)工作正常,但当我试图对另一个图表运行时,就会出现这种情况。

这段代码有点大,所以我不知道它是否能帮助你。

 
这可能不是代码的问题。我的终端在拖动终端窗口时崩溃了,它部分地恢复了,但说全局初始化失败。我不得不重新启动终端。在build625之前,我从未见过这个错误,在过去的一周左右,已经有不止一个关于这个错误的报告。
 
SDC:
这可能不是代码的问题。我的终端在拖动终端窗口时崩溃了,它部分地恢复了,但说全局初始化失败。我不得不重新启动终端。在Build 625之前,我从未见过这个错误,在过去的一周左右,已经有不止一个关于这个错误的报告。
当你重新启动终端时,一切正常吗? 因为我确实重新启动了几次,但我有同样的结果。事实是,我找不到任何具体的文件来帮助解决这个问题......
 
是的,当我重新启动它时,一切都很好。
 

各位,我知道这个话题已经有一个月了,但我认为这是一个MetaTrader的问题,而不是一个代码问题。我在做的一个指标上随机发生了这种情况。有时,如果我查看或改变指标的属性,它就会发生;有时,如果我关闭并重新启动终端,它就会发生;有时,它只是自发地发生。这绝对是某种初始化问题。我确定这一点的原因是,我有一组按钮,是我为在不同的时间框架上查看MAs而创建的,而不是你目前所处的框架。在所有情况下,当它失败时,TF按钮仍在图表上,但指标已被删除。自然,这些按钮不再有任何作用。为了让事情回到正轨,我不得不手动删除这些按钮,并将指标放回图表上。它在一段时间内运行良好,然后砰的一声!它又死了。至于为什么,没有任何理由。我不认为问题出在我们的代码上。我认为是MT4的一些问题造成的。顺便说一下,我正在运行v625版本。如果我想出了什么办法来规避这个问题,我会把它贴出来。

教授

 
给我们看看代码。只是为了确保你的代码不是罪魁祸首。否则,MetaQuotes就会嘲笑你了。
 

我也遇到过这种 "全局初始化失败 "的情况

当我改变图表的时间框架时,它就发生了。

我看不出有什么原因,也无法复制它。

奇怪的是,init中的最后两块代码创建了对象,这些对象是在图表上创建的。

由于没有调用deinit,它们没有被删除。

int OnInit()
  {
//--- indicator buffers mapping
      IndicatorBuffers(4);

      //---- drawing settings
      SetIndexArrow(0,250);
      SetIndexArrow(1,250);

      SetIndexStyle(0,DRAW_NONE);
      SetIndexDrawBegin(0,i-1);
      SetIndexBuffer(0,CTFresistancetBuffer);
      SetIndexLabel(0,"Resistance");

      SetIndexStyle(1,DRAW_NONE);
      SetIndexDrawBegin(1,i-1);
      SetIndexBuffer(1,CTFsupportBuffer);
      SetIndexLabel(1,"Support");

      SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS);
      SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS);

      switch(S_R_TimeFrame)
        {
         case M5:
            SRPeriod=PERIOD_M5;
            break;
         case M15:
            SRPeriod=PERIOD_M15;
            break;
         case M30:
            SRPeriod=PERIOD_M30;
            break;
         case H1:
            SRPeriod=PERIOD_H1;
            break;
         case H4:
            SRPeriod=PERIOD_H4;
            break;
         case Daily:
            SRPeriod=PERIOD_D1;
            break;
         case Weekly:
            SRPeriod=PERIOD_W1;
            break;
         case Monthly:
            SRPeriod=PERIOD_MN1;
            break;
         case Current_Chart:
            SRPeriod=PERIOD_CURRENT;
            break;
        }
        
      if(Digits==3 || Digits==5)
         NewPip=Point*10;
      else
         NewPip=Point;
      
      string obj_name = "TDR_ARROW" ;
      ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(obj_name, OBJPROP_CORNER, 1);
      ObjectSet(obj_name, OBJPROP_XDISTANCE,  30);
      ObjectSet(obj_name, OBJPROP_YDISTANCE,  30);
      ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue);
      
      obj_name = "TDR_LINE" ;
      ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0);
      ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   for(i=ObjectsTotal()-1;i>=0;i--)
     {
      string ObName=ObjectName(i);
      if(StringFind(ObName,"TDR",0)!=-1)
         ObjectDelete(ObName);
     }

   return;
  }
//+------------------------------------------------------------------+
 

我的问题似乎是使用init()和deinit(),而不是新的OnInit()和OnDeinit()。在我改用新的调用后,事情似乎就好办了。MetaQuotes最好不要嘲笑我。我似乎记得在大量的变化列表中读到过,旧的调用仍然与MQL4兼容。事实上,我有另一个指标仍在使用它们,并创建了一些标签对象,没有出现任何问题。为了安全起见,我可能会改变这一点,因为我计划在我准备好的时候提供这两个指标供出售。

总之,问题似乎是在指标去初始化时没有调用deinit(),所以对象没有被删除,因为它们本该被删除。初始化失败是因为这些对象仍然存在。我对所有的东西都进行了错误检查,但是对象创建失败没有被报告。很明显,它在我的错误处理代码之前就发生了错误,并给了我MQL的错误。

GumRai,你可以尝试使用SubStr而不是StringFind。这应该没有关系,但我发现MQL有时会很古怪。你确定OnDeinit()没有被调用吗?让我发现问题的原因是在我的deinit()方法中加入了一个Alert语句,并注意到它从未被调用。你也可以尝试用错误处理代码来包装你的删除代码,看看它可能在做什么。

教授

 
ProfessorMetal:

我的问题似乎是使用init()和deinit(),而不是新的OnInit()和OnDeinit()。在我改用新的调用后,事情似乎就好办了。MetaQuotes最好不要嘲笑我。我似乎记得在大量的变化列表中读到过,旧的调用仍然与MQL4兼容。事实上,我有另一个指标仍在使用它们,并创建了一些标签对象,没有出现任何问题。为了安全起见,我可能会改变这一点,因为我计划在我准备好的时候提供这两个指标供出售。

总之,问题似乎是在指标去初始化时没有调用deinit(),所以对象没有被删除,因为它们本该被删除。初始化失败是因为这些对象仍然存在。我对所有的东西都进行了错误检查,但是对象创建失败没有被报告。很明显,它在我的错误处理代码之前就发生了错误,并给了我MQL的错误。

GumRai,你可以尝试使用SubStr而不是StringFind。这应该没有关系,但我发现MQL有时会很古怪。你确定OnDeinit()没有被调用吗?让我发现问题的原因是在我的deinit()方法中加入了一个Alert语句,并注意到它从未被调用。你也可以尝试用错误处理代码来包装你的删除代码,看看它可能在做什么。

教授

你能发布一个例子代码来重现你的问题吗?