看来你在初始化过程中遇到了问题。请检查你的代码。如果你需要帮助,你可以发布相关的代码。
谢谢你的回答。
问题是,我的代码对4个图表(对)工作正常,但当我试图对另一个图表运行时,就会出现这种情况。
这段代码有点大,所以我不知道它是否能帮助你。
这可能不是代码的问题。我的终端在拖动终端窗口时崩溃了,它部分地恢复了,但说全局初始化失败。我不得不重新启动终端。在Build 625之前,我从未见过这个错误,在过去的一周左右,已经有不止一个关于这个错误的报告。
各位,我知道这个话题已经有一个月了,但我认为这是一个MetaTrader的问题,而不是一个代码问题。我在做的一个指标上随机发生了这种情况。有时,如果我查看或改变指标的属性,它就会发生;有时,如果我关闭并重新启动终端,它就会发生;有时,它只是自发地发生。这绝对是某种初始化问题。我确定这一点的原因是,我有一组按钮,是我为在不同的时间框架上查看MAs而创建的,而不是你目前所处的框架。在所有情况下,当它失败时,TF按钮仍在图表上,但指标已被删除。自然,这些按钮不再有任何作用。为了让事情回到正轨,我不得不手动删除这些按钮,并将指标放回图表上。它在一段时间内运行良好,然后砰的一声!它又死了。至于为什么,没有任何理由。我不认为问题出在我们的代码上。我认为是MT4的一些问题造成的。顺便说一下,我正在运行v625版本。如果我想出了什么办法来规避这个问题,我会把它贴出来。
教授
我也遇到过这种 "全局初始化失败 "的情况
当我改变图表的时间框架时,它就发生了。
我看不出有什么原因,也无法复制它。
奇怪的是,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语句,并注意到它从未被调用。你也可以尝试用错误处理代码来包装你的删除代码,看看它可能在做什么。
教授
我的问题似乎是使用init()和deinit(),而不是新的OnInit()和OnDeinit()。在我改用新的调用后,事情似乎就好办了。MetaQuotes最好不要嘲笑我。我似乎记得在大量的变化列表中读到过,旧的调用仍然与MQL4兼容。事实上,我有另一个指标仍在使用它们,并创建了一些标签对象,没有出现任何问题。为了安全起见,我可能会改变这一点,因为我计划在我准备好的时候提供这两个指标供出售。
总之,问题似乎是在指标去初始化时没有调用deinit(),所以对象没有被删除,因为它们本该被删除。初始化失败是因为这些对象仍然存在。我对所有的东西都进行了错误检查,但是对象创建失败没有被报告。很明显,它在我的错误处理代码之前就发生了错误,并给了我MQL的错误。
GumRai,你可以尝试使用SubStr而不是StringFind。这应该没有关系,但我发现MQL有时会很古怪。你确定OnDeinit()没有被调用吗?让我发现问题的原因是在我的deinit()方法中加入了一个Alert语句,并注意到它从未被调用。你也可以尝试用错误处理代码来包装你的删除代码,看看它可能在做什么。
教授
如果有人能提供帮助...我为4个图表对运行一个专家顾问,在为第5个图表对运行时,在成功加载后,我有全局初始化失败,然后被删除...
我希望至少能得到一个指导,看看有什么问题。
谢谢...