指标中的OnDeinit - 页 3

 

在OnDeinit开始时做一个打印,在关闭客户终端后,看一下专家日志,确保OnDeinit已经被调用了!

这里是你的错误

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

你显然知道你自己创造的对象。

保留它们的名字,并删除它们,不引用ObjectsTotal 和ObjectName

PS 新版本增加了一个按前缀删除一组对象的功能。如果你用相同的唯一前缀来命名你的对象,这将有助于你的工作。

 
stringo:

在OnDeinit开始时做打印,在关闭客户终端后,查看EA日志,确保OnDeinit被调用了

这里是你的错误

你显然知道你自己创造的对象。

保存它们的名字,并删除它们,不引用ObjectsTotal和ObjectName

PS 新版本增加了一个按前缀删除一组对象的功能。如果你用相同的唯一前缀来命名你的对象,这将有助于你的工作。

我已经有机会测试了按前缀删除一组对象的效果。很好,但即使是以前版本中的编译代码也无法工作。因此,它目前只能用于个人目的。我们没有必要因为它而强迫用户更新。许多人甚至不知道如何更新,直到他们上传更新到DC服务器。
 
stringo:

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

甚至还有一个 特殊的代码来说明去初始化的原因。解释_关闭

那么它是否会重置指示器缓冲区?
 
eevviill:
那么它是否会重置指标缓冲区?
什么是 "重设指标缓冲区"?
 
eevviill:
那么它是否会重置指标缓冲区?
一切都被重置了。毕竟,终端关闭)))。
 
stringo:

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

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

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

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

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

嗯,把EMPTY_VALUE 缓冲区初始化块放在Inite里。问题仍然存在。
 

在init和deinit中,缓冲区初始化块被卡在一个空值上。其结果是一样的。也就是说,它不存在。

等待开发者的评论。

 
Scriptong:
一切都重设为零。毕竟,终端关闭)))。
是的是的。
 
eevviill:
嗯。缓冲区初始化块EMPTY_VALUE被放在Inite中。

为什么?内部缓冲区可能还没有被分配。

当缓冲区被大量缓冲时(新的一批历史数据到来),怎么办?

在这种情况下,缓冲区的初始化是在指标计算 之前完成的,此时很明显整个指标将被重新计算。

 
stringo:

为什么?内部缓冲区可能还没有被分配。

而当缓冲区非常大时(新的一批历史数据来了),怎么办?

在这种情况下,缓冲区的初始化是在计算指标之前进行的,当时很清楚整个指标将被重新计算。

好的。归零在deinit中也不起作用。