指标中的OnDeinit - 页 2

 
eevviill:

不,它没有。我正常关闭了终端。

如果把Deinit放进Init,它也不起作用。

只有自定义对象的删除功能有帮助。

好吧,如果它不删除,谁知道你在那里做了什么 :)

 
keekkenen:

好吧,如果不删除它,谁知道你对它做了什么 :)

有道理。但如果我只是从图表中删除该指标,那么这些区域就会被删除。当我关闭终端时,它们就不在了。如果我使用init中删除区域的函数(在deinit中是同一个函数)。

我理解deinit对所有人都有效。而当关闭或打开终端时,它应该被触发?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

  for(int i=ObjectsTotal()-1;i>=0;i--)

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill:

有道理。但是,如果我简单地从图表中删除该指标,这些区域就会被删除。当终端关闭时就不会。只有当我把我自己的删除区域的函数放在init中时(在deinit中也是同样的函数)。

我理解deinit对所有人都有效。但当终端关闭或打开时,它应该工作吗?

是的,当终端关闭 时,它可以工作...

也许你有某种逻辑的长期存在?

在这个意义上,在关机的那一刻,指示器不经意地计算了一些东西,而终端预计这一切都错了和/或中断了,那OnDeinit就不工作了?

我认为通往服务台的路...

 
keekkenen:

是的,当你关闭终端时,它可以工作...

也许你有某种长期的游戏逻辑?

在这个意义上,在关机的那一刻,指标正在计算一些可怕的东西,而终端预计这一切都很糟糕和/或中断,OnDeinit不工作了?

我认为通往服务台的路...

如果它对你有用,那就可以了。我去看看我的。
 

没有任何变化,而且还增加了更多内容。

缓冲液指示器。操作 打开图表-连接M1指示器-关闭终端-几分钟后打开。结果在截图中。

尽管我在代码中也写了这样的内容

//////////////////////////////////////////////////////////////////
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],
                const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
    //new bar
if (Time[0] != prevtime) 
{
 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);


prevtime = Time[0];
}

 

开发人员,你们要解决这个问题吗?

这里有一个指标给你。试试我在上面的帖子中所做的。

打开图表--装上 M1指示器--关闭终端--几分钟后打开了它。

附加的文件:
 
eevviill:

开发人员,你们要解决这个问题吗?

这里有一个指标给你。试试我在上面的帖子中所做的。

打开图表--装上M1指示器--关闭终端--几分钟后打开了它

你的指标的情况已经解决了。

事情是这样的,指标的计算不仅是在ticks的到来上,而且是在第一次绘图和失踪历史的到来上。

1.一个新的刻度线到达--指标被计算。

2.缺少的历史数据到了,它填补了最后一个终端开始 的数据和最后一个勾股之间的漏洞。该指标的计算。但与此同时,也没有新的酒吧条件!

为了解决这个问题,你需要检查小节的数量。大约是这样的

   if(Time[0]!=prevtime || Bars!=prevbars)
     {
      ArrayInitialize(body_up,EMPTY_VALUE);
      ArrayInitialize(body_down,EMPTY_VALUE);
      ArrayInitialize(shadow_up,EMPTY_VALUE);
      ArrayInitialize(shadow_down,EMPTY_VALUE);
      ArrayInitialize(yell_body_up,EMPTY_VALUE);
      ArrayInitialize(yell_body_down,EMPTY_VALUE);
      ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
      ArrayInitialize(yell_shadow_down,EMPTY_VALUE);

      prevtime=Time[0];
      prevbars=Bars;
     }
 
stringo:

你的指标的情况已经解决了。

事情是这样的--指标的计算不仅是根据ticks的到来,而且是根据第一次绘图和缺失历史的到来。

1.一个新的刻度线到达--指标被计算。

2.缺少的历史数据到了,它填补了最后一个终端开始的数据和最后一个勾股之间的漏洞。该指标的计算。但与此同时,也没有新的酒吧条件!

为了解决这个问题,你需要检查小节的数量。像这样

谢谢你。

但这不仅仅是在我的指标中。我以为你会从你那边解决这个问题。

例如,当关闭终端 时,Deinit在所有程序中运行。

 
eevviill:

谢谢你。

但这并不只是在我的指标中。我以为你会从你那边解决这个问题。

例如,在关闭终端时,在所有程序中deinit。

实际上所有程序中的deinit都是在终端关闭时调用的。

甚至还有一个 专门的代码来说明deinit的原因。解释_关闭

原因: